Sonic Pi v4.0.0 Release Notes

  • ๐Ÿš€ To be released... <!-- (view commits): -->

    Known Issues (to be addressed in upcoming Betas)

    • ๐ŸŽ On macOS, the booting procedure no longer attempts to tweak the audio-card's sample rates to match and instead crashes on a mismatch.
    • There are no GUI elements to view/manipulate the new Link metronome.
    • ๐Ÿ”— Link is enabled by default and cannot be disabled via the GUI.
    • ๐Ÿง MIDI port names are very long and change on disconnect/reconnect on Linux.
    • ๐Ÿ”€ Using sync with an external OSC or MIDI message whilst in :link bpm mode is broken.
    • โšก๏ธ On macOS if there are no MIDI devices attached at boot, the updater doesn't work. However, it does appear to if devices are attached at boot.

    ๐Ÿ’ฅ Breaking Changes

    • Previously it was possible that the onset: option for sample silently ignored the last onset of a given sample. This has now been fixed. Some samples may therefore have an additional onset index which won't affect any code using earlier indexes but will affect code which uses indexes larger than the number of onsets (and therefore relying on the index wrapping behaviour).
    • ๐Ÿšš The Minecraft Pi Edition API has been removed (all mc_ fns). Minecraft Pi Edition appears to no longer ship on Raspberry Pi OS and the Pi Edition API is not the same as the standard Minecraft API.

    ๐Ÿ†• New

    • ๐Ÿ‘Œ Support for Ableton Link. This enables you to synchronise the tempo of Sonic Pi running on multiple computers connected on the same network. It will also enable automatic BPM synchronisation with music production tools such as Ableton Live, VJ tools such as Resolume, DJ hardware such as the MPC and many compatible iPad music apps. For a full list see:,,
    • ๐Ÿ†• New :link option to fn use_bpm. This enables Link mode for the current thread which automatically syncs the BPM to the Link metronome (which also syncs it with all other Link-capable apps running on any computer connected to the local (wired or wifi) network.
    • ๐Ÿ†• New fn link which sets the BPM to a new :link mode and also waits until the start of the next bar (as determined by Link) before continuing. This lets you automatically sync tempo and beat phase in one command.
    • ๐Ÿ†• New fn link_sync which sets the BPM to a new :link mode, waits for the Link session to be playing and also waits until the start of the next bar (as determined by Link) before continuing. This lets you automatically "arm" Sonic Pi to sync tempo and beat phase and wait for an external "play" command from another Link device - such as Ableton Live.
    • ๐Ÿ”— New fn set_link_bpm! to change the BPM/tempo of the Link metronome (and simultaneously change the tempo of all connected Link-capable apps on the network).
    • New fn current_random_source which returns the current random number source kind (see use_random_source).
    • ๐Ÿ†• New fn load_synthdef which lets you load a single synthdef file.
    • load_synthdefs now loads both directories and single files (by dispatching to load_synthdef where necessary).

    Synths & FX

    • ๐Ÿ†• New synth :winwood_lead - a lead synth inspired by the Winwood songs from the early 80s.
    • ๐Ÿ†• New synth :bass_foundation - a soft bass synth inspired by the sounds of the 80s.
    • New synth :bass_highend - an addition to the :bass_foundation synth inspired by the sounds of the 80s.


    • ๐ŸŽ Preference pane is now an overlay which hovers over the main window. This means that opening and closing it does not inadvertantly modify a carefully chosen layout e.g. for a performance.
    • ๐Ÿ†• New preference option to show and hide the pane titles such as Scope, Log, Cues, Context, Help, etc.
    • Increase width of panel dividers and highlight on mouse hover.
    • Highlight scrollbars on mouse hover.
    • Scrollbars now have rounded edges.
    • Teach autocompletion about random source choices: :white, :light_pink, :pink, etc.
    • ๐Ÿ‘Œ Improve syntax indentation.
    • ๐Ÿ‘Œ Improvements for Arabic, Catalan, Chinese (Simplified), Dutch, Estonian, French, German, Italian, Japanese, Korean, Persian, Polish, Portuguese (Brazil), Russian, Sinhala, Spanish, Swedish
    • ๐ŸŒ Introduced new translations for Basque, Gaelic.

    ๐Ÿ‘Œ Improvements

    • ๐Ÿ“š Many minor documentation fixes and improvements.
    • 0๏ธโƒฃ When running on Raspberry Pi, Sonic Pi connects to PulseAudio by default.
    • โฑ The scheduling accuracy of outgoing OSC and MIDI messages is improved on Windows.
    • Optimise midi_clock_beat.
    • note_range can now handle both increasing and decreasing note ranges.

    ๐Ÿ›  Bugfixes

    • ๐Ÿ‘Œ Improve robustness of outgoing OSC messages in the case where an outgoing hostname is malformed and can't be resolved.
    • Synths :dull_bell and :pretty_bell now properly free themselves when they finish playing, which now means the resources they consumed are also properly freed.
    • Indexing into an empty ring no longer causes a divide by zero error.
    • ๐Ÿ No longer attempt to increase audio server priority on Windows which causes booting errors in some cases.
    • ๐Ÿ›  Fixed encoding issues when saving/loading files containing non-ascii characters on Windows.
    • range no longer loops infinitely with a step size of 0. Instead it now throws an error.
    • In some circumstances having the lissajous visualiser visible caused the GUI to crash on startup. This has now been addressed.