github sonic-pi-net/sonic-pi v5.0.0
SuperSonic

6 hours ago

Since its very inception Sonic Pi has used the incredibly powerful SuperCollider scsynth audio engine to produce sound. That power came at a significant ergonomic cost: scsynth is built for sophisticated audio synthesis research, not beginner-friendly education software, so Sonic Pi has always had to do a lot of hidden work to make things run smoothly. This mostly worked, but some rough edges remained, like not being able to plug headphones into a Mac without needing to restart.

For the past year Sam Aaron has been working on SuperSonic - a friendly port of scsynth designed to solve these issues. In v5 scsynth is now fully replaced by SuperSonic. The headline benefit is the ability to change audio settings directly in the GUI - hot-swapping your input device, output device, sample rate or buffer size on the fly, without rebooting Sonic Pi or losing your running music. So go ahead, plug those headphones in mid-jam!

v5 also brings a host of new ways to play together and perform: stream live audio from other Ableton Link peers with link_audio, lock your tempo to an incoming MIDI clock with use_bpm :midi, jam with a game controller, record your sessions to video, and stream the Sonic Pi window straight into Syphon/Spout-aware visuals software.

The GUI has had an overhaul of its own: a redesigned code completion popup with inline documentation and live previews, a rebuilt Docs pane with runnable examples and interactive synth playgrounds, Quickstart Cards, Sets for saving all ten buffers together, in-editor search, a Keyboard Shortcuts preferences tab, new scopes and colour themes, and wide-ranging accessibility work throughout.

Enjoy v5 and Happy Live Coding!

Breaking Changes

  • set_volume! now takes a value between 0 and 1 rather than between 0 and 5, and is the fader after the limiter. If you used set_volume! 2, check out set_drive! instead.
  • The main mixer has a new limiter and its internal FX chain has been reordered, so an existing piece may sound a little different - generally cleaner and better balanced. Use set_drive! to push it harder if you liked the old crunch.
  • v5 keeps its own configuration files, separate from v4 - running both side by side leaves your v4 settings untouched, but your v4 preferences won't carry over either.
  • The load and save toolbar icons have swapped: + now means load (add a file's contents into the current buffer) and the arrow means save (write the buffer out to a file), better matching what each action does. Their menu items are now named "Load into Buffer..." and "Save Buffer As..." to match.

New

  • SuperSonic replaces scsynth as the audio engine. Change audio input, output, buffer size and sample rate live from the GUI, without restarting and without losing your running music.
  • Native PipeWire support on Linux. SuperSonic talks to PipeWire directly, and this is now enabled by default.
  • A 16-in/16-out Patchbay device on Linux. Sonic Pi appears in PipeWire tools such as qpwgraph as an ordinary node with explicit ports, ready to wire to multichannel interfaces, DAWs and other apps.
  • ASIO-aware audio preferences on Windows.
  • New limiter in the main mixer with much lower latency (1.5ms vs 20ms) - noticeable when you're working with live_audio.
  • Volume and drive are now separate controls sitting on opposite sides of the limiter. Changing the volume no longer alters both the sound and mix - that is now the job of the drive control.
  • New fn set_drive! which sets how hard the mix is driven into the main limiter, on a scale that is even in decibels: 0 is -12dB, 0.5 is unity and 1 is +12dB. current_drive returns the current value.
  • Follow an incoming external MIDI clock with use_bpm :midi. The current thread tracks the live tempo and aligns to the next bar. Each thread or live loop may follow a different external clock by specifying a device: use_bpm :midi, "launchpad". Use quantum: to set the bar length. Use midi_clock_sources to see which ports are sending clock. Following is accurate even with jittery real-world clocks.
  • New fn link_audio which streams live audio from another Ableton Link peer straight into Sonic Pi. Subscribe to a remote peer's published channel - for example Ableton Live's "Main" or "Drums" - as a named live audio source and use it just like live_audio.
  • New support for game controllers - such as Xbox controllers. Connect a game controller and respond to its buttons and sticks as live events with sync and get, just like incoming MIDI.
  • Switch individual MIDI and game controller devices on and off from the new IO menu and the preferences.
  • New fn ring.invert_around which reflects the notes of a ring around a pitch axis.

GUI

  • Friendlier, clearer error messages. Error reports have been restyled for readability and the error text now scales with the editor zoom level.
  • New: Quickstart Cards. A deck of small runnable code cards in the help pane - play a musical idea and watch its waveform on the card's own mini-scope, then drag the card (or hover its insert button to preview, and click) straight into your code. Ships with decks covering the basics, synths, FX, live loops and Lissajous figures.
  • New: a redesigned code completion popup. Suggestions come with inline documentation, a mini note keyboard for choosing pitches, and value sliders for ranged options such as pan:. The highlighted suggestion is previewed live in your code as you move through the list, and you can accept it with Tab, Return or Space.
  • A new "Show Code Completion Help" toggle (in the View menu and the editor preferences) switches the new autocomplete between a plain list of suggestions and these richer helper panes.
  • Code completion for samples shows each sample's details along with a preview player.
  • Code completion autocompletes Link Audio peer and channel names for link_audio, the same way it completes MIDI ports and cue names.
  • New: a rebuilt Docs help pane. Tutorial and reference pages render natively with syntax-highlighted, runnable examples - play and stop code examples directly from the help pane.
  • New interactive playable "synths" in the Synth and FX documentation pages. These contain dials for exploring each ranged option and an on-screen keyboard that updates the demo code as you play.
  • New: an Examples menu. Load and play a bundled example straight from the menu bar.
  • New: Sets. Save and load all ten buffers together as a single .sonicpi file - Load Set, Save Set, Save Set As and a recent-sets list live in the Live menu, alongside Clear All Buffers for a fresh start. A set remembers which buffer you were working in and each buffer's text size. The file itself is plain text, so it can be shared, diffed and version-controlled like any other code, and double-clicking a .sonicpi file opens it straight into Sonic Pi.
  • New: an optional floating editor toolbar with undo/redo, cut/copy/paste and find. It fades back while your code runs beneath it.
  • New: in-editor search. Find, Find Next and Find Previous search the current buffer and highlight every match right in your code.
  • New: a Keyboard Shortcuts preferences tab. See every shortcut in one place, switch between the Mac, Windows | Linux and Emacs Live presets, or choose Custom to record your own bindings. Clashing shortcuts are flagged as you edit, and you can import and export your custom set to share it or carry it between machines.
  • The default keyboard shortcut mode now follows the host operating system on first launch - new users on macOS get the Mac mode, and new users on Windows and Linux get the Windows | Linux mode. The original Emacs Live mode is still available at any time in Preferences.
  • Improved Windows shortcuts. Jump-to-document-start and jump-to-document-end are now Ctrl+Home and Ctrl+End to match the standard Windows conventions. Thanks to Henri Vilminko for the suggestion.
  • New: session recording for macOS and Windows. Capture the Sonic Pi window plus the main audio mix to a single video file.
  • New: GUI streaming for macOS and Windows. Stream the Sonic Pi window via Syphon (macOS) or Spout (Windows) to other Syphon/Spout-aware applications (Resolume, VDMX, OBS, etc.) without going through screen capture.
  • New: live visual feedback in the editor. Runs briefly flash the code they trigger, and each live_loop gains an inline mini-oscilloscope next to the code showing its own audio as it plays. Both can be switched off in the editor preferences.
  • New: oscilloscope-style scope triggering. Repeating waveforms hold still on screen like on a hardware oscilloscope instead of scrolling past. There's also a new level scope showing your output levels.
  • New: a live SuperSonic debug panel, with engine metrics and a node-tree visualiser.
  • New: a Link Audio Streams panel showing the peers and channels currently published on the network.
  • New: Volume and Drive controls in the audio preferences, alongside a new Level meter.
  • New: a Reset button for the audio device.
  • New: more colour themes, including a low-contrast "Mild Dark" theme that is kinder on the eyes for those with light sensitivity or migraines, plus display filters such as hue rotation. Mild Dark grew out of a community contribution from Chris Prosser. Thanks Chris!
  • New application icons for all platforms.
  • Friendlier microphone-permission notice on macOS. The message is clearer, and it now only appears when audio inputs are enabled.
  • With auto-align switched off, Tab now behaves as an ordinary tab key.
  • The help pane's macOS shortcut is now the standard Cmd+? (F1 still works everywhere).

Accessibility

  • The Docs pane now reads naturally to screen readers - prose you can arrow through with the caret, headings that appear in rotor navigation, and dials that announce their values. Docs prose exposes its laid-out text, so every screen-reader bridge steps through it by visual line rather than jumping a whole paragraph at a time.
  • The Quickstart Cards are screen-reader navigable - page through a deck with Left and Right and hear each card announced as you go.
  • Focus now follows you around the app: opening Help, Preferences, the Cards or the info window lands focus inside the new pane ready for arrow-key browsing, and closing a pane hands focus back to the editor rather than dropping it on the window frame.
  • The main toolbar is reachable with Tab, and its toggle buttons respond correctly when activated by assistive technology.
  • Status updates such as showing or hiding the scopes are now spoken as well as shown.
  • Wider accessibility improvements throughout: keyboard navigation and screen-reader feedback across the GUI, high-contrast detection, WCAG colour fixes, visible focus rings and a reduced-motion option. Errors are announced and code buffers are named. Windows gains its own contrast detection, screen-reader feedback and reduced-motion support.

Synths & FX

  • New: phase_offset: opt for the :beep / :sine synth - set the sine wave's starting phase as a fraction of a cycle (0 to 1). Two panned sines playing the same note with offsets of 0 and 0.25 draw a circle as a Lissajous figure. It can also be changed while the synth is running via control.
  • Fixed :tech_saws which was incorrectly outputting four channels of audio. It now correctly outputs stereo as originally intended.
  • Fixed :hoover which was incorrectly writing six channels of audio. It now mixes its three detuned voices down to stereo as intended.
  • Fixed the :krush FX which was adding a constant DC offset to its output.
  • Fixed the :autotuner FX, which emitted silence in its automatic pitch-correction mode, and taught it two new opts: strength: for gentler correction and retune: to glide onto the target pitch instead of snapping.
  • Fixed :sc808_cymbal, which played straight to the hardware output - bypassing the main mixer, recordings and the scopes.
  • Fixed the option validations on the :gabberkick synth.
  • Envelope curve fixes: exponential curves (env_curve: 2) now ramp cleanly from silence rather than clicking, and squared/cubed curves now slide correctly through negative values (such as pan: heading left).

Music Theory

  • New scale: :lydian_dominant (also available as :acoustic).
  • New scale aliases with the names musicians usually reach for: :altered (same as :super_locrian), :phrygian_dominant (same as :spanish) and :double_harmonic / :byzantine (same as :bhairav).
  • New chords: :minor_major7 (also available as mM7 / mmaj7), :maj13, 9-5 and 7+9 - the latter a friendlier name for the Hendrix chord previously only available as 7-10.
  • New chord aliases: :maj7 and :min7 for :major7 and :minor7, plus more long-form aliases: :minor6, :major6, :minor9, :major9, :minor11, :major11 and :minor13.
  • Fixed the 9+5 and m9+5 chords which were missing their 3rd, sharpened 5th and 9th - a long-standing bug inherited from SuperCollider via Overtone.
  • Fixed chord_degree silently returning fewer notes than requested for higher degrees combined with larger chord sizes.
  • Fixed degree on scales which don't span exactly an octave (such as the makam :evic) - degrees beyond the scale's length now continue the scale's own interval pattern rather than assuming a 12 semitone octave.

Improvements

  • Code buffers can now hold much more code - up to 64KB (roughly 2,500 lines) on every platform. The previous limit was around 9KB on macOS and 16KB on Linux and Windows, where exceeding it made Run fail silently.
  • Clearer runtime errors: syntax errors name the offending buffer line, errors from run_file and init.rb include the file path, and an unresponsive audio engine is reported clearly rather than exiting silently.
  • sample now honours the duration: opt, just like play and synth.
  • play_pattern_timed now accepts lists for per-note opts such as amp:, and its legato: default matches the documentation again.
  • set_sched_ahead_time! and set_control_delta! now reset to their defaults when called with no arguments.
  • Calling .map on a ring, vector or ramp now returns the same kind of structure rather than a plain list. Thanks to Robert Bendun.
  • Sample packs can now be indexed by any number, not just Integers.
  • Octave shifts and with_swing offsets now accept whole numbers of any numeric type.
  • 32-bit Linux (i686) is now built and tested alongside the other platforms, with its own AppImage.
  • Upstream Debian packaging, so distributions can build Sonic Pi against their own system libraries without patching.
  • New SONIC_PI_ROOT and SONIC_PI_ETC_PATH environment variables let you point Sonic Pi at relocatable install and config locations, making life easier for packagers.

Bugfixes

  • Events sharing an identical timestamp are now ordered consistently rather than arbitrarily.
  • Envelope sustain time is now calculated correctly when attack, decay or release are left at their defaults. Thanks to Michael Schubmehl.
  • Fixed a crash when typing with an input method (IME) that commits several characters at once.
  • Fixed Sonic Pi failing to start on Windows when the home directory contains non-ASCII characters.
  • Fixed the daemon failing to boot when Sonic Pi is launched from a terminal with Ruby gem environment variables set (e.g. rvm/rbenv). Thanks to Keenan Brock.
  • Fixed shift-based text selection so holding Shift with the navigation shortcuts once again selects text, including Shift+Cmd+Left/Right and Shift+Option+Left/Right on macOS. (Fixes #3537 and #955)
  • Function names inside strings and comments are no longer touched by the language preprocessor.
  • defonce and kill messages now respect use_debug.
  • Fixed an error in onset_slices.
  • Copy now copies your selection in the help pane when the docs have focus, rather than the editor's.
  • The editor's horizontal scrollbar now only appears when a line is actually wider than the window.
  • The scope, log and cue panes now start with equal heights on first boot.
  • The preferences pane behaves better on lower resolution monitors.

Translations

  • New: complete Spanish GUI translation.
  • Translation updates across many languages, including German, Irish, Hebrew, Turkish, Norwegian, Hindi, Persian, Greek, Catalan, Chinese and French.

Releases

macOS ARM64
Link Sonic-Pi-for-Mac-arm64-v5.0.0.dmg
Size 175M
MD5 884316717f3dc63dfc47d9ed53a2d6b5
SHA256 3dd0b9873a74aa274d3723be098622fdea73896ceba29a1423af9e7b46a7c291
macOS x64
Link Sonic-Pi-for-Mac-x64-v5.0.0.dmg
Size 171M
MD5 aec9e7556d71b5e3151df61d92f69508
SHA256 5a2634924646f85f410c8b7c51aca5b15b4cf3f1705c4771f3174d7762b1d20a
Windows ARM64
Link Sonic-Pi-for-Win-arm64-v5.0.0.msi
Size 132M
MD5 34fba3ad22ed16869753ba4609102cb8
SHA256 256e0281567f9f8dc4c187ce739d35866ab76e3439df20f74e645b899edf90bf
Windows x64
Link Sonic-Pi-for-Win-x64-v5.0.0.msi
Size 160M
MD5 2d2e60b2b5b41ccd55868543f31f5838
SHA256 58c12ba5f66894dfdde3f62ca12649530b6fe80a6cc4f15af70b9349d76fdb48
Linux ARM64
Link Sonic-Pi-for-Linux-arm64-v5.0.0.AppImage
Size 253M
MD5 28d2cabe9c7b1ba16f69ef964cd555b4
SHA256 ab00f18122a648b94fb7a9465bac30910a093bb5c6bdabd602521f0e8c064ba4
Linux x64
Link Sonic-Pi-for-Linux-x64-v5.0.0.AppImage
Size 255M
MD5 7a4eb014aa99d9b1b91240be3dd7be8d
SHA256 9c75c27428d14a1a02bfe56908a9f8a4188033050f06e490ab23ec0ee87778be
Linux x86
Link Sonic-Pi-for-Linux-x86-v5.0.0.AppImage
Size 214M
MD5 8fd228cdec76d1b30b38482201fdf2ab
SHA256 e4d91d3401b37f5fce7eb4d8af3e0403147f477388bcb496897ef0306563ce9d

|

Don't miss a new sonic-pi release

NewReleases is sending notifications on new releases.