Sonic Pi v3.3 is released

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 fixesand 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.

Releases

macOS (10.13 - 11)
Link Sonic-Pi-for-Mac-x64-v3.3.0.dmg
Size 119M
MD5 a4355c20fb2e4fd3376be1f0397f4f36
SHA256 d55e756a728706e64f8bc98db2dea93e61c3f29e827aa086906704d08ff7a5e1
Windows 10
Link Sonic-Pi-for-Win-x64-v3.3.0.msi
Size 166M
MD5 0070f6395e82ab14818ddcb5aa0a97ec
SHA256 7f1b967ae661b446cdfc9327126ae8449fbf9ba1f49fb8a0b5ef9f00b0dbb12c
Raspberry Pi OS (2021-01-11+)
Link sonic-pi_3.3_1_armhf.deb
Size 66M
MD5 7335c2e538d76c9e046c939125171ef6
SHA256 00dbf08169b6199b625da50d7a658f8692b3f5f70a75f747a14a6675e1daba45
17 Likes

Thank you so much for your hard work, guys! :top:

1 Like

When I double-click on the downloaded .dmg file, I can’t open it. I just get:

If instead of double-clicking it, I right click it and select “open”, then I get a similar dialog, but there are two buttons: “open” and “cancel”, and I can continue by selecting “open”.

Then, once I’ve dragged the .app to my Applications folder, I can open it fine just by double clicking it (the first time I get a warning that it was downloaded from the internet, but can just click OK).

I wonder if the .dmg also needs to be signed or something?

I’m on MacOS Mojave (10.14.6).

Sorry for your issues but I’ve not been able to replicate this here. I don’t have a Mac running 10.14, but I do have ones on 10.13, 10.15 and 11 and none of them had any issue with the DMG.

Has anybody else seen this?

Could it be related to it being downloaded from the internet (using Chrome)? The dialog mentions the fact that it was downloaded by Chrome.

Unfortunately I honestly don’t know. I’m very interested if anyone else is running into this though.

And using Safari to download ?

I tried downloading it again using Safari, and get the same thing:

So I tried using curl to download it from the command line, and then it opens straight away without showing any dialog first.

I think it must be to do with the extended attributes that are set on the file when downloaded by a browser. To test this out, I deleted the com.apple.quarantine extended attribute on the file downloaded by Safari, and then it opened fine, just like the one downloaded with curl.

I’m not sure why I only see this with the Sonic Pi .dmg though - I haven’t seen it before (I don’t think even with the Sonic Pi 3.3 betas).

Super weird. I can always move back to distributing as a zip - but it just seems that dmgs are a bit friendlier. I’ll look into this - although it’s hard given that I can’t replicate it locally.

On mine (Mojave), I just wait 15 min and dialog box shows me Open/Cancel buttons. Nothing in Security preferences to force to open.

Could it be to do with notarisation? (I don’t know anything about it, but some Google searches led to this):

> spctl -a -vvv Sonic-Pi-for-Mac-x64-v3.3.0.dmg
Sonic-Pi-for-Mac-x64-v3.3.0.dmg: rejected
source=Unnotarized Developer ID
origin=Developer ID Application: Samuel Aaron (MM65S3L4NG)

That’s weird - I didn’t realise that the dmg had to be notarised - the app certainly does (and is) - I’m pretty sure the dmg is just signed.

This is definitely something I can look into :slight_smile:

1 Like

It looks like it’s recommended to notarise the dmg instead of the app: how can i notarizing dmg file | Apple Developer Forums

1 Like

I installed from github version 3.3 on a couple of Linux machines. Both were successful.

A Raspberry Pi 4 running RaspiOS aarch64 beta.
OS: Debian GNU/Linux 10 (buster) aarch64
Host: Raspberry Pi 4 Model B Rev 1.4
Kernel: 5.10.5-v8+

A Xubuntu 20.10 amd64
OS: Xubuntu 20.10 x86_64
Host: NUC8i5BEH
Kernel: 5.8.0-38-generic

Thank you Sam and Robin for your effort.

I wish I knew enough about debian packages to provide deb files for these two architectures.

Whatever changes you made in 3.3.1 seem to have fixed it.
I was able to just double-click the downloaded dmg and it showed the license, and once that had been accepted it opened the dmg.

Yey, that’s a relief! :slight_smile:

1 Like

This is fantastic thank you Sam and the whole team :smile: And including the Rpi release, double plus good as this is my core system. I’m esp keen to try out the new colours of randomness.

2 Likes

Sam, this is great news. Thanks to you and everybody for all the work. Two questions:

  1. Maybe I missed this, but how did you solve the Supercollider not running on MacOS 11 problem?
  2. I like the idea of moving core functionality to BEAM. I’ve actually been doing a lot of playing around with that myself. My question is (and maybe it’s more of a comment), would you consider using Elixir as the implementation language instead of Erlang? I did a lot of Erlang programming in the 2010 era working on some distributed software. I love the language, but even more, I love the architecture of the BEAM and the way of doing distributed software. But, having started working recently with Elixir, I find that I get everything I love and in a language that has a much closer to Ruby like syntax. Just a thought.

It wasn’t me that solved it, it was @lilyinstarlight with this commit: Commits · supercollider/supercollider · GitHub. The issue was how scsynth was calculating time - using an API that changed in macOS Big Sur in order to improve compatibility with the new M1 Apple Silicon chips.

I simply built my own version of scsynth which included this patch and packaged it as part of Sonic Pi :slight_smile:

I’m not sure I’d say “instead of” but I’m certainly considering using it “in addition to” Erlang. Especially to explore LiveView as a possible way of generating GUI views.

Hi. Great to hear that a new version is there.
As my students often were using the portable version of Sonic Pi, I was wondering whether there is or will be a portable version of 3.3 as well? Otherwise it would be great to still put a link on sonic-pi.net to easily find it (as for 3.1 and Windows 7).