Sonic Pi v3.2 'Tau' Released!

Hi everyone,

Sonic Pi v3.2 is finally here and free to download for everyone. (Download links are below.)

After a long 2 years without updates, we are threaded with excitement to bring you Sonic Pi’s first fully independent release. Sam Aaron’s work on this release has been 100% supported by kind and generous donations from people on Patreon in addition to funds raised by delivering talks, workshops and performances. Sam’s work has also been hugely assisted by many wonderful code and translation contributions both by members of the Core Team and by our growing international community of live coders. This release has truly been a community effort.

So, what’s new? This time there are no radical new features, instead we have a much more polished, accessible and stable version than ever before. (This release has been heavily battle-tested in many performances worldwide).

This release is codenamed Tau - (an improved Pi).

One of the core focusses of this release is accessibility. Tau introduces support for screen readers. Previously the code editor was invisible to the main screen readers on both macOS and Windows and this is now fixed. There is also an accessible menu bar and a new high contrast colour theme which is WCAG 2 level AAA compliant. Accessibility is very important to us - we acknowledge that this is only the beginning and we value and encourage feedback from users who have specific accessibility requirements that we are not directly meeting. We plan to improve our accessibility support where possible in every release going forward.

Another aspect of accessibility is support for Windows devices with high resolution displays. Previously on certain displays font and icon sizes could be far too small, unreadable and out of proportion with the app in general. This has all been addressed with significant work on ensuring Sonic Pi looks great on a variety of monitors on both Windows and macOS. We believe that this release looks better and is more usable than any previous release.

Tau features two beautiful new audio visualiser scopes - a spectrum scope showing the frequency content of the audio and a beautiful mirror stereo scope. These scopes have been contributed by Chris Maughan who has also been pivotal in improving and simplying the Windows build process. We are hugely grateful for his contributions - thanks Chris!

We have two fabulous new FX - a ping pong delay contributed by Ethan Crawford and an autotuner contributed by Xavier Riley. We hope you have as much fun playing with these as we have.

Finally, this release has seen a significant improvement in translation coverage - both of the GUI and the tutorial. We truly believe that this helps us achieve our mission of lowering the barrier to entry for a creative experience with code by helping more non-English speakers start their live coding journeys.

Now, go and make some noise with code!

Here are the full release notes…

Breaking Changes

  • spread now produces identical patterns as in the Toussaint paper. Previously, some of the patterns had been shifted. Use the rotate: opt to match prior behaviour if required.
  • OSC cues now include the IP address and port number of incoming messages
  • MIDI cues now include the source information in the first part of the path with : separators to match the new OSC cue format.
  • The osc fn now forces all outgoing args to either be numbers or strings (binary blobs and timestamps are not supported at this point). If the value is neither a number or string, it is ‘inspected’ and the resulting description string is sent instead.
  • The default incoming OSC cues port is now 4560 as the previous value was registered on the Iana Service Name and Transport Protocol Port Number Registry. However, 4560 is currently free.
  • Constrain :flanger FX’s feedback: opt to range 0->1. Values greater than 1 had the effect of increasing the amplitude which should be achieved via the amp: opt.
  • Add arg checker for sample's hpf: opt which now ensures the value is not higher than 119 as values higher than this can cause bad noise artefacts.
  • Improve sample's start:/finish:/onset:/slice: opt semantics. The start: and finish: opts for sample now work within the specified slice or onset. This allows you to easily play, say the first half of a given slice or onset by specifying a start: of 0 and a finish: of 0.5. Where both the slice: and onset: opts are specified, then the slice operates within the onset. Where the slice:, onset: and start:/finish: opts are all used, the start/finish operate within the slice which in turn operates within the onset. See the updated sample examples for more information.

New Fns

  • eval_file evaluates the contents of the specified file inline in the current thread as if it was a function.
  • midi_sysex for sending MIDI sysex messages.
  • Add new chain fn .notes which takes a ring of values and returns a new ring with each element treated as a note. This will leave numbers unchanged but will turn note names like :C1 to their corresponding MIDI note.

Synths & FX

  • New FX ping_pong - delayed echo alternating between left and right channels.
  • New FX autotuner - Autotune/phase vocoder effect.
  • The gverb FX now checks to ensure that the room: opt is greater than or equal to 1.
  • The piano synth now supports fractional notes such as 70.3


  • New WCAG 2 level AAA compliant high contrast colour theme. This is especially suited for those with low vision.
  • New application menu and shortcuts.
  • New default icons which match the pro icon feel.
  • 2 new visualiser scopes - mirror stereo and spectrum.
  • Move to simple numbered labels for buffers.
  • Improve scaling of icons, text etc. on high DPI displays on Windows.
  • The version number is no longer placed in the initial comment of new empty buffers. This felt like a friendly thing to do, but can be confusing if a given buffer hasn’t been used and the version was updated. This results in the buffer reporting the old version number that was used to create the buffer not the current version used to display it.
  • Many, many translation improvements. Thanks to all the wonderful volunteers contributing to the translation effort:
  • Error pane height is now higher by default on all platforms and its height is correctly scaled on high DPI monitors.
  • Preference checkboxes are now similarly styled on all platforms.


  • Allow scale degrees over an octave and augmented/diminished degrees.
  • Calling .tick and .look on a normal array such as [1, 2, 3] will now automatically convert it to a ring first.
  • Add docstring for the set fn.
  • Add new article A.20 - Creative Coding in the Classroom as appeared in issue #9 of the Hello World magazine.
  • OSC messages are now sent from the external cue listening port. This allows OSC servers that reply directly back to incoming messages (such as SuperCollider) to be able to communicate back to messages sent from Sonic Pi.
  • Random fns now understand notes. For example rrand(:e1, :e2) will return a random frequency between E octave 1 and 2.
  • Windows can now detect sample onsets from samples stored in .flac and .ogg format in addition to arbitrary sample rates such as 48khz.


  • Further improve boot stability on Mac in the cases where audio input/output sample rates do not match (typically due to the use of bluetooth
    headsets). Audio inputs on macOS are now disabled by default unless we can definitely determine the audio rates are the same.
  • Revert synthdefs to original bytecode version. This fixes a regression in at least the :tb303 synth and possibly others. All synths should sound and behave as they did in v3.0.1.
  • Fix issue with scaling default opts. Previously it was possible that unspecified opts correctly fell back to the default value - however that default value wasn’t scaled. Default values are now always scaled qhether or not explicitly specified.
  • with_sched_ahead_time now correctly sets the schedule ahead time before running the block and returns the result of the block itself
  • When “Enforce Timing Guarantees” is selected, Sonic Pi wil no longer throw out of time warnings in ‘real time’ threads (specified using use_real_time).
  • set and cue no longer print duplicate messages which was possible in some cases.
  • Fix time_warp examples which were incorrect and misleading.
  • Improve pid handling on Linux. This should reduce the number of zombie processes accidentally generated.
  • The offset: opt for with_swing now matches documented behaviour.
  • Teach sample_duration to scale correctly.
  • Fix GUI bug which could result in a buffer stuck in the highlighted state after hitting Run.
  • Fix the on: opt when playing chords to work similarly across all
    notes in a given chord.
  • Stop defonce from being executed multiple times
  • Calling .take on an empty ring no longer results in infinite recursion but instead returns an empty ring.
  • Scope now has a minimum height.
  • Windows now supports sending and receiving OSC messages over the network to and from external machines.


Size 124M
MD5 d9792361a19c3a946c376d54aeabad3f
SHA256 7a3e8b29c30dd83cfa081cff86983f0a28269553b18636b6784a40601bb9497e
Windows 10 (64 bit)
Link sonic-pi-for-win-x64-v3.2.0.msi
Size 162M
MD5 381012e19decc5e2277ed3856058ad84
SHA256 d7d42f7fe95d8411ba951fa221b3259604de6cbc557c5a511671e6d531476b33
Windows 10 Portable (64 bit)
Link sonic-pi-for-win-x64-portable-v3.2.0.paf.exe
Size 93M
MD5 a20811f7f15290c2006a9d6819de34ef
SHA256 b42f15f053f07bc9b714143a38ecc5de8e85c3bdb8e54c97b75f62151d632dea

Great news :musical_note:


Welcome back :tb303! All is forgiven!



Hi Sam,

the ping pong delay is a nice addition :smiley:
Thank you for your hard work and I wish you all the best.



Glad you like it! I’m hoping to add a few more synths and FX to Sonic Pi over the next few releases :slight_smile:


Hi Ethan,

great work from you. Can’t wait to see what’s coming next :slight_smile:
I’m already trying out some sound design for some time in Sonic-Pi. Even though it’s not meant for this, you can already do quite a lot of nice sounds in it.
Here an easy example:

# Classic TR808 Kickdrum
# Change starting frequency to maybe 110 Hz or lower if needed and ending frequency to 50 Hz or lower for different bass accents.
# Change release and sustain for deepness and length.
s = synth :sine, note: hz_to_midi(120), attack: 0, sustain: 0.02, release: 0.5, note_slide: bt(0.07), note_slide_shape: 6
control s, note: hz_to_midi(60)



Now, go and make some noise with code!

You don’t have to tell me twice.

Congrats on the release! Looking forward to playing with it this weekend.

This release also tries to install on my K: drive, which I cause the following error:

“Unable to create K:/.sonic-pi due to permissions errors”.

I am running Windows 10. I had the same issue with the previous release and was hoping it would be fixed. Anything I can do to force everything on C: ?

@ErikOostveen: you can. See for example.

1 Like

Brill; that worked!
So, for the purpose of this posting, the solution was to open the “System Properties” window and click the “Environment Variables”. In the “Environment Variables” window click “New…” in the “Systems variables” section and enter SONIC_PI_HOME in the “Variable name:” field and c:\SonicPi (In my case. You have to create this folder yourself first)