Sonic Pi v3.3.0 Release Notes

  • 28th Jan, 2021 (view commits):

    Ten months of development, over 700 individual commits, loving contributions from many many people have gone into this new version of ๐Ÿš€ Sonic Pi. This release is also the result of a 3 month long community beta process which took place over on ๐Ÿ‘ Patreon where supporters got access ๐Ÿš€ to early releases and really helped polish and shape development. Huge ๐Ÿ‘ thanks to everyone that has supported continued development. We're ๐Ÿš€ really excited and proud to share this new release with you all.

    In terms of significant changes, there have been many internal ๐Ÿ‘Œ improvements, including a full rewrite of our MIDI subsystem. This shouldn't result in much change as a user (although some MIDI cue names might have changed slightly) but it really sets us up for some exciting developments in the future. We're essentially moving much more of the core input/output functionality of Sonic Pi into a special system called the BEAM and a language called Erlang. This is ๐Ÿšค a system that has a strong emphasis on low latency, low jitter and high concurrency which is exactly what the IO of a music system requires! ๐Ÿ‘€ We're so excited to see what we'll be able to achieve with this new ๐Ÿš€ approach that the BEAM features as the codename of this release.

    ๐Ÿ‘€ Another area that has seen a lot of love and attention is our strong focus on accessibility. We now have a much improved menu bar which essentially duplicates much of the functionality found in the preferences but in a format that's extremely easy to work with via a screen reader. We've also added a new context pane that displays the current line and character position as a direct result of a collaboration with Leiden University's accessibility group. There have already been numerous studies that are reporting success for blind and low-vision users of Sonic Pi - so we're confident we're on the right track with respect to accessibility. We're also not stopping here and are always looking for ways to lower the many barriers to entry for creative experiences with code for everyone.

    ๐Ÿš€ This is also the first release where we officially welcome Chris Maughan โœ… as the latest member of the Sonic Pi core team. Chris has made significant contributions over the last year including improvements to ๐Ÿ— the scope and a complete reworking of our build process. I hope you join us in welcoming Chris to the team.

    ๐ŸŽ Finally, we have official support for macOS Big Sur, some lovely new ๐ŸŒ synths and FX, improved translations, support for advanced configuration ๐Ÿ›  (audio and colour theming), new Turkish scales and many, many bug fixes and improvements.

    We really hope you love this version of Sonic Pi as much as we do.

    Happy Live Coding!

    ๐Ÿ’ฅ Breaking Changes

    • โšก๏ธ MIDI port description names may be slightly different from previous versions. Precise matches on MIDI ports via sync and get will have to be updated accordingly.
    • ๐Ÿš€ Incoming MIDI cues now no longer include clock tick events. Optionally re-enabling these and new ways of working with incoming timing systems will feature in a future release.

    ๐Ÿ†• New

    • Completely new MIDI subsystem.
    • use/with_random_source - change the current random stream used when selecting random values. We now have :white, :light_pink, :pink, :dark_pink and :perlin. Default is :white which is the same stream as previous releases to preserve compatibility.
    • Many Turkish scales (makams) have been added.
    • ๐Ÿ†• New user config directory for fine tuning aspects of the app such as advanced audio settings. See ~/.sonic-pi/config/README.md for more information.

    Synths & FX

    • ๐Ÿ†• New synth :rodeo - emulating an electric piano.
    • ๐Ÿ†• New synth :kalimba - an African thumb piano.
    • โž• Add sliding to :autotuner FX opts note: and formant_ratio:.
    • mix, pre_mix and pre_amp opts are now affected by slide:.

    GUI

    • ๐Ÿ†• New context pane which displays the current line number and position making this information accessible to screen readers. This may be shown/hidden with a preference setting.
    • ๐Ÿ†• New keyboard shortcuts for switching directly to a buffer. S-M-1 (hold shift and Meta and the number 1) will jump to buffer 1. Meta is Cmd on macOS and alt on Windows/Linux.
    • Autocompletion system can now be enabled or disabled. This is intended to help those using screen readers for which the autocompletion system is currently incompatible.
    • Sample listings in the help system now have a handy play button that allows you to preview them by clicking rather than having to write any code.
    • ๐Ÿ‘Œ Improvements for Catalan, Chinese, Danish, Dutch, Finnish, French, German, Hebrew, Hungarian, Icelandic, Italian, Korean, Norwegian, Polish, Portuguese, Portuguese (Brazil), Russian, Slovak, Spanish, Swedish, Thai, Turkish and Vietnamese translations.
    • ๐ŸŒ Sinhalese translation added.
    • GUI now has a much more complete menu bar which duplicates the functionality of the preferences pane whilst making it easily accessible to screen readers.
    • MIDI port names are now autocompleted.
    • โช The GUI now correctly saves and restores the visibility preferences for the buttons, tabs and log pane.

    ๐Ÿ‘Œ Improvements

    • ๐Ÿ“š Many minor improvements to the documentation.
    • Unsent external MIDI messages are now flushed and no longer sent after hitting the Stop button.
    • ๐Ÿšš The common mistake of calling both play and sample on the same line such as play sample :loop_amen is now an error with an appropriately helpful description to explain that play should be removed.

    ๐Ÿ›  Bugfixes

    • Fix pulse_width_curve: and pulse_width_slide: opts which were incorrectly swapped on pulse, subpulse and dpulse synths.
    • ๐Ÿ‘Œ Improve boot on Windows systems that have default locale code pages currently unsupported by Ruby. We now force UTF-8.
    • ๐Ÿ›  Fix issue causing the incorrect error line to be highlighted in the GUI.
    • ๐Ÿ›  Fix issue when syncing with cues with - symbols in their paths.
    • ๐Ÿ”€ Fix bug with use_merged_synth_defaults after a call to use_synth_defaults. This bug was triggered in the "Sonic Dreams" example which now plays through correctly again.
    • ๐ŸŽ MIDI device hotswapping (detecting whether devices were connected or disconnected) now works on macOS.
    • ๐Ÿ›  Fix .take_last to no longer return nil for min and max of the range.
    • ๐Ÿ›  Fix off-by-one error in line fn. Now should always return rings of the correct length.