Sonic Pi Versions Save

Code. Music. Live.

v4.0.1

1 year ago

Version 4.0.1 'Verknüpfen'

12th July 2022

This is a bugfix release addressing a startup issue for a number of users with non-ASCII characters within audio harware information on macOS.

We also sadly say goodbye to Core Team member Hanno Zulla who did amazing work with Linux packaging - especially getting Sonic Pi into Debian. Hanno also spearheaded the translation work setting up the crowdsourced translation system which has now enabled Sonic Pi to be translated into over 50 languages. Thank-you so much Hanno - we wish you success and happiness in all you do going forwards.

This release also includes Italian and Polish translation updates.

Releases

macOS (10.15 Catalina and higher)
Link Sonic-Pi-for-Mac-x64-v4-0-1.dmg
Size 128M
MD5 f83cc83bdedbc9054c25f744d4f5bcff
SHA256 ff7e7119644125f1b6c9ab926e2f1d5cbdc2e025e8b4cbc2ab7be58e0015dfca
Windows x64 (10 and 11)
Link Sonic-Pi-for-Win-x64-v4-0-1.msi
Size 201M
MD5 2a5901af16d4b01158de0c9a1001ab31
SHA256 38c7717f64e93c8d98cfbb4f8366a81b8297a50eeaf0705a5eda5cb5ca43757a
Raspberry Pi Bullseye 64 bit
Link sonic-pi_4.0.1_1_bullseye.arm64.deb
Size 88M
MD5 ce81f87db70692e93fbdebee0fc7e101
SHA256 1de84984d346c5fe6c1336bc411f053612d2a11efef2f48e1f41f20a570d0d84
Raspberry Pi Bullseye 32 bit
Link sonic-pi_4.0.1_1_bullseye.armhf.deb
Size 87M
MD5 7acaf6205a38758b2a6628f5ca4e334b
SHA256 d1c156fa74349ebfa57e87f28910849b53a7cae2a62545dce92934c4301e4c43

v4.0.0

1 year ago

6th July, 2022

Get ready to Jam with v4 of Sonic Pi.

In this release, the internal timing algorithms have been completely refactored to enable them to link to a new global metronome. The GUI now features a new metronome panel which will let you dynamically change the BPM of your code whilst it is running. You can also use the new "Tap Tempo" button to click out a tempo and Sonic Pi will automatically shift to play in time with your taps. Additionally, you can link the metronome with other versions of Sonic Pi running on other computers connected to the same network (wifi or ethernet). This means it is now possible to gather some laptops together to form an ensemble or turn a whole classroom of computers into an orchestra of live coders - and for everyone to be in time with each other. You can even dynamically change the BPM for everyone on the network whilst code is running on everyone's computers independently and everything maintains synchronised and in time. It's a real jam.

Finally, you're not limited to syncing tempo with other copies of Sonic Pi. The new global metronome is built on top of a wonderful piece of technology called Link which was developed and open sourced by Ableton who also make Live and Push, both widely used by professional musicians and also automatically sync using Link. Additionally there are also over 200 other apps or hardware products that also sync with Link. Sonic Pi can therefore now automatically jam with any of these with just a click of a button. It's so exciting to imagine the new kinds of bands and collaborations that are going to be possible with this new timing system.

There's also a large number of other improvements and fixes within this release that together combine to form the most powerful and exciting release of Sonic Pi yet. See below for a full breakdown of visible changes.

This release would not have been possible without the huge number of fabulous contributors that have been involved. Key contributions have been a huge refactoring of our GUI by Chris Maughan, the wrapping of Link as an Erlang NIF by Luis Lloret and the tireless and constant attention to detail by Ethan Crawford. Thanks so much to you all. Thanks also to José Valim for financially supporting development during a tricky period. José is the creator of the programming language Elixir which is now integrated into the internals of Sonic Pi. Elixir opens up a rich world of exciting opportunities within Sonic Pi which we have already started exploring with earnest. Expect exciting things for the future and consider becoming a Patreon supporter to automatically get access to all upcoming BETAs.....

Finally, we would love for you all to extend a warm welcome to the latest member of the Sonic Pi Core Team: Lily Foster. She brings a huge depth of Linux knowledge to the team and we're terrifically excited to have her on board.

Now, go and get your Live Coded Jam On!

Breaking Changes

  • The default BPM is now set to the new global Link metronome. This is set to 60 by default, so on the surface the behaviour will appear identical. However, if you change the Link metronome BPM using the GUI or the new fn set_link_bpm! it will change the BPM for all threads dynamically. Previous behaviour (a static BPM of 60 unlinked to the global metronome) can be obtained by starting your code with use_bpm 60.
  • 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.
  • The main mixer settings have been modified to reduce load on the limiter in common scenaries with the GUI volume slider set to a high position. This caused distortion and other unwanted audio issues. This change should be an improvement for most users - however if you wish to return to the old behaviour, you can run the following at the start of your session: set_mixer_control! pre_amp: 1, amp: 1.

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: https://www.ableton.com/link/products/,,
  • 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.

Examples

  • New Algomancer example - Blockgame coded by DJ_Dave.
  • New Sorcerer example - Lorezzed.

GUI

  • Preference pane is now an overlay which hovers over the main window. This means that opening and closing it does not inadvertently 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.
  • New preference option to hide the menubar when in fullscreen mode (Windows and Linux only as this behaviour is standard on macOS).
  • New preference option for enabling audio inputs (now disabled by default). Modifying this setting requires a reboot to take effect.
  • New preference option for selecting the default language translation. Modifying this setting requires a reboot to take effect.
  • Preferences now show audio hardware information such as connected input/out devices, sample rate, block size etc. The amount of information displayed varies by platform.
  • New GUI controls for interacting with the new Link Metronome. You can connect/disconnect to the network (to share tempo with others), change the tempo (in BPM) and tap out a new tempo.
  • Increase width of panel dividers and highlight on mouse hover.
  • Highlight scrollbars and preference checkbox descriptions 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, Ukrainian.
  • Introduced new translations for Basque, Gaelic.

Improvements

  • Many minor documentation fixes and improvements.
  • 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.
  • No longer connect to the input sound device on macOS by default - this also means audio input/output rate mismatches no longer cause boot issues on macOS by default.
  • SuperCollider audio server boot issues are now immediately detected and reported as a specific issue to the user alongside the full scsynth log file.

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.
  • Stop thread hanging when passing 0 as the first argument to spread. Now just returns a ring of false values.

v3.3.1

3 years ago

Version 3.3.1 - 'Beamer'

1st Feb, 2021

This is compatibility release addressing two issues with macOS Big Sur:

  1. Correct language translations now used based on user's current locale
  2. The language server is no longer killed by macOS Gatekeeper when a sample's onset times are queried.

This release also includes minor translation updates.

Releases

macOS x64 (10.13+)
Link Sonic-Pi-for-Mac-x64-v3-3-1.dmg
Size 120M
MD5 cf7990a629321ac1e5f935ffc741f7db
SHA256 0bfd12f930311e8ef1c7306dc9c012cfcc1f8e50710fd26a8c18ba003573a506
Windows 10 x64
Link Sonic-Pi-for-Win-x64-v3.3.1.msi
Size 167M
MD5 e8392ef976891ab9513feb23e1152b57
SHA256 b9ee2605333b01feb6ce973e5918f04f489de83b971a46890e1313eae7c04b79
Raspberry Pi OS (October 30th 2021)
Link sonic-pi_3.3.1_2_armhf.deb
Size 66M
MD5 2941bc5b4eca86236af5f5a4e03bc45b
SHA256 ebbf5960dae866d3d8105cf257a6f4379f1d6b1f3c572813f34afe5573d98a31
Raspberry Pi OS (Legacy)
Link sonic-pi_3.3.1_1_armhf.deb
Size 67M
MD5 0b5c00cc092a8f3c6b2584caf2554937
SHA256 f6cc382cea61467d04ce7fe186deba7d352f64b0a7b4d9ccc8f74b2774d9dfe5
Ubuntu 20 amd64
Link sonic-pi_3.3.1_2_amd64.deb
Size 67M
MD5 cc0fcf1a05c1e83df5f290cfeda1d3d9
SHA256 3a7884ac605f0eb0e408dda28c17d496d3d3c613d4d0b014665861f45c992836

v3.3.0

3 years ago

Version 3.3.0 - 'Beam'

28th Jan, 2021

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

v3.2.2

4 years ago

Version 3.2.2 - 'Tau3'

5th April, 2020

This is a minor bugfix and maintenance release.

GUI

  • Significant improvements to the Danish and Swedish translations.

Bugfixes

  • Fixed a build issue on macOS that stopped recording from working.
  • Fixed issues rendering images in the documentation for non-English translations.

Releases

macOS
Link sonic-pi-for-mac-v3.2.2.zip
Size 126M
MD5 53348871f5d8d7e8b065ecbca471f556
SHA256 52828a3132ed8657a30a64f995dfe72b32f0a3b718886c3ac7e6d41d846ab441
Windows 10 64bit Portable
Link sonic-pi-for-win-x64-portable-v3.2.2.paf.exe
Size 93M
MD5 23163f26a2b07456b8f34c9d249c0582
SHA256 cf3c17bf966c115353b112548bea674c8e907a8cdd930d5f13934bb11b334198
Windows 10 64bit Installer
Link sonic-pi-for-win-x64-v3.2.2.msi
Size 162M
MD5 a7feb0414505ac0fa10cb6c72dcf6be4
SHA256 0b585382fdfa238d38bd37823f63e61be009a0424284a1441803d70c64b8bc70
Raspberry Pi OS 32bit
Link sonic-pi_3.2.2_4_armhf.deb
Size 64M
MD5 8df8e49f2ed43bf52a30f69e115d094d
SHA256 76086decc9378790397982ed39bfac65d1ff60d6c9f63b1cbcec398ddff6e425

v3.2.1

4 years ago

Version 3.2.1 - 'Take Tau'

3rd April, 2020

This release is another maintenance release with a primary focus on increasing stability and reliability. There are therefore no major new features, but instead there are significant improvements to the internals and the packaging of the Windows installer.

Whilst there are no major new features, we have still been working hard engaging with users with accessibility requirements. We have added a number of modifications to the GUI to improve keyboard navigation which should improve things for users that do not use a mouse (for example, users working with a screen reader). As mentioned in the previous release, we will continue to work to improve accessibility support wherever possible in each release.

One core internal focus has been improving memory utilisation of the app. A number of memory leaks have been hunted down and fixed. A memory leak is where the application requests increasingly more memory from the computer and never gives it back. Over time this means that the app would waste a lot of the system memory. This might have not been too noticeable using Sonic Pi on modern computers that typically have incredibly large amounts of memory. However, it was noticeable and problematic on low-powered systems with limited memory capacity. Sonic Pi now uses a lot less memory and after a warm-up period, the memory usage stays much more constant than before. We will continue to look for and fix memory leaks going forward.

Finally, this release is the first to ship with a fully signed Windows installer. This is a major milestone as we now ship with signed versions for both macOS and Windows which should help more users and organisations (especially schools) trust the installation and running of Sonic Pi.

Now, go and get live coding!

Breaking Changes

  • The ping_pong FX now merges the dry sound with the result of the echo to match the behaviour of echo.
  • In the last release, the piano synth had its default amplitude accidentally altered when being updated to work with arbitrary frequencies. This has been restored.
  • Incoming MIDI Active Sensing messages are now ignored

GUI

  • New shortcuts and menu items for explicitly placing focus on specific areas of the app. This is primarily intended to improve accessibility for screen readers or those not using a mouse or trackpad. The new shortcuts are:

    • Control-shift-e - move focus to editor
    • Control-shift-l - move focus to logs
    • Control-shift-c - move focus to cues
    • Control-shift-p - move focus to preferences
    • Control-shift-h - move focus to help listing (e.g. the list of available help section)
    • Control-shift-d - move focus to help details (e.g. the contents of the chosen help section)
    • Control-shift-w - move focus to syntax/runtime error warnings
  • Once focus is in the help listing, the up and down arrow keys now navigate up and down in the list and the left and right arrow keys switch tabs to work through the different help categories.

  • When an error occurs, focus is now placed on the error pop-up window. Focus can be easily returned back to the editor by pressing either the Escape key or Control-g.

  • Minor improvements for Catalan, Greek, Chinese, Russian, French and Romanian translations.

Bugfixes

  • Upgraded the Ruby process library which improves/fixes process shutdown behaviour on some Linux systems.
  • Fixed a number of memory leaks which resulted in the memory requirements of the app increasing over time until it was closed and opened again. This was particularly noticeable and potentially problematic on machines with small memory footprints.
  • General memory usage has been significantly reduced due to the introduction of further caching in hot areas of the code that created many unnecessary object allocations.
  • The Windows installer now works on more Windows 10 systems thanks to additional libraries now being included in the installer.

Releases

macOS
Link sonic-pi-for-mac-v3.2.1.zip
Size 127M
MD5 06caad40bc7f9fae0ecc3013d0f6ada8
SHA256 17e32ea392b3f324022bbdab8ecdb7d7f159b06e922ca65cf26ed41090c349cd
Windows 10 64bit Portable
Link sonic-pi-for-win-x64-portable-v3.2.1.paf.exe
Size 93M
MD5 522759f8af4db195ba96736e8c63f045
SHA256 e8176b1e04873346c78dc1e7ed358712a2f07560596b0144c3ee686b7042a2de
Windows 10 64bit Installer
Link sonic-pi-for-win-x64-v3.2.1.msi
Size 162M
MD5 2ca51be91bba360b5a26baa8f7b24b06
SHA256 9e5400ce1f3c71c27e7d211251a78e54ccd9adc653e091019efd24ec0a218e25

v3.2.0

4 years ago

Version 3.2.0 - 'Tau'

28th Feb, 2020

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!

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

GUI

  • 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: https://hosted.weblate.org/projects/sonic-pi/
  • 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.

Improvements

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

Bugfixes

  • 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 whether 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.

Releases

Mac
Link sonic-pi-for-mac-v3.2.0.zip
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

v2.2.0

6 years ago

Thursday 18th December, 2014

This release brings a number of nice enhancements. However the main feature is the accurate timing for triggering FX. This means you can now reliably use FX for accurate rhythmic purposes such as wobbling, slicing and echoes.

Breaking Changes

  • use_sample_pack_as now uses a double underscore __ as a separator between the user-specified alias and the sample name.

API Changes

  • Teach synth args to take prefixed maps: play 50, {amp: 0.5}, {release: 2}, amp: 2
  • Don't round Floats when user specifically prints them to log with puts
  • with_fx FX synths are now triggered using virtual time rather than real time. This means that FX can now be used for rhythmical purposes.
  • Work on new RingArray datastructure. This is essentially an array that wraps its indexes so you can use indexes larger than the array size.
  • New fn ring - (ring 1, 2, 3) creates a new ring array.
  • New fn knit - (knit :a1, 2, :c1, 1) returns (ring :a1, :a1, :c1)
  • New fn bools - (bools 1, 0, 1) returns (ring true, false, true)
  • New fn range - (range 70, 100, 10) returns (ring 70, 80, 90, 100)
  • New fn sample_loaded? - to detect whether a specific sample has been loaded

Synth & FX

  • Fixed regression in :tb303 synth - sound is reverted to v2.0 behaviour
  • New Synth - :square - Pure square wave

GUI

  • Help system now autodocks on close
  • Preferences are now remembered across sessions
  • On Raspberry Pi, previous volume and audio output options are forced on boot.

New Samples

  • bd_tek - Bass drum

Bug fixes

  • one_in now returns false if num is < 1
  • Ensure live_loop's no-sleep detector works within nested with_fx blocks
  • chord now returns a ring.

Releases

Mac
Link Sonic-Pi-for-Mac-v2.2.0.dmg
Size 61M
MD5 188422323f62afb290770b1bb59df2a9
SHA256 26a45a75fb045e82f85c1e616af304ee60d462febebedf9219b68ce23db6f715
Raspberry Pi (Wheezy)
Link Sonic-Pi-for-RPi-Wheezy-v2.2.0.tgz
Size 36M
MD5 7329f1ac31c846d92bbaba70e08e9587
SHA256 c03cdafc5f12b606ebbe11e2025d2242638931ba48a22cf1be6d390e45f1654b

v2.3.0

6 years ago

Version 2.3 - 'Bitcrush'

Wednesday 28th January, 2015

Breaking Changes

  • Playing chords with the fn chord now divides the amplitiude of each resulting synth by the number of notes in the chord. This ensures the resulting amplitude isn't excessive and is normalised.
  • Chords now evaluate their args once and those args are used for all synth triggers. This means random values are only generated once and are similar across all notes in the chord. Previous behaviour can be obtained by calling play multiple times with no interleaved sleeps.
  • Ensure each new thread's random number generator is unique yet seeded in a deterministic manner. This stops random vals across at from being identical.
  • range is now exclusive: (range 1, 5) #=> (ring 1, 2, 3, 4)

New

  • New fn density for compressing and repeating time Dr Who style. For example, wrapping some code with a call to density of 2 will double the bpm for that block as well as repeating it twice. This ensures the block takes the same amount of time to execute while doing double the work.
  • New fns with_bpm_mul and use_bpm_mul which will multiply the current bpm by a specified amount. Useful for slowing down and speeding up the execution of a specific thread or live_loop.
  • New fn rdist - generate a random number with a centred distribution
  • New examples: square skit, shufflit and tilburg

Improvements

  • Teach control to ignore nil nodes i.e. control nil, amp: 3 will do nothing.
  • Teach Float#times to yield a float to the block. For example, 3.4.times {|v| puts v} will yield 0.0, 1.0 and 2.0.
  • Synth, Sample and FX args now handle bools and nil correctly. true resolves to 1.0 and false, nil resolve to 0.0. This allows you to write code such as: play :e3, invert_wave: true
  • Teach at to handle varying block arities differently. See docs for more detail. Original behaviour is preserved and only extended.
  • App now checks for updates (at most once every 2 weeks). This may be disabled in the prefs.
  • Teach :reverb FX to extend its kill delay time with larger room sizes to reduce the chance of clipping.

Synths & FX

  • New FX bitcrusher - for crunching and destroying those hi-fi sounds.
  • New FX flanger - a classic swhooshing effect typically used with vocals and guitars.
  • New FX ring - ring modulation for that friendly Dalek sound
  • New FX bpf - a band pass filter
  • New FX rbpf - a resonant band pass filter
  • New FX nbpf - a normalised band pass filter
  • New FX nrbpf - a normalised resonant band pass filter

New Samples

  • perc_snap - a finger snap
  • perc_snap2 - another finger snap
  • bd_ada - a bass drum
  • guit_em9 - a lovely guitar arpegio over Em9

Bug Fixes

  • Namespace live_loop fn and thread names to stop them clashing with standard user defined threads and fns.
  • GUI no longer crashes when you start a line with a symbol.
  • with_fx now returns the result of the block
  • Kill zombie scsynth servers on startup for better crash recovery.
  • Handle paths with UTF8 characters gracefully
  • Force sample rate for output and input to 44k on OS X. This stops scsynth from crashing when output and input sample rates are different.

Releases

Mac
Link Sonic-Pi-for-Mac-v2.3.0.dmg
Size 56M
MD5 06981df501907faf2b5285d0772a05fb
SHA256 1408aa3c34627ba8436676fcf9f889fd0f51ab0bfd43131f476dd87f94714993
Raspberry Pi (Wheezy)
Link Sonic-Pi-for-RPi-Wheezy-v2.3.0.tgz
Size 35M
MD5 51a9357a56d208905668358efe8bf457
SHA256 20a49e26f4279d90bbc35cc0f26b9c19d8578332d1df733a1924dfa0631b0ba2
Windows
Link Sonic-Pi-for-Win-v2.3.0.msi
Size 69M
MD5 d781404353faa673161f4383a4f4c05c
SHA256 3f95e899eca5e727b5e8fae07889beeee1c6dfef32160ed9e3b493e084bf5f40

v2.4.0

6 years ago

Version 2.4 - 'Defrost'

Wednesday 11th February, 2015

A quick release following v2.3 to address an issue with the GUI freezing on specific CPUs. However, although this release has had a small development cycle, it ships with three fantastic features. Firstly we now have the spread fn which provides an amazing way to create interesting rhythms with very little code. Secondly we can now use cutoff: on any sample massively increasing their timbral range and finally we have three exciting new synths for you to play with. Have fun!

Breaking Changes

  • Unfortunately 5 pre-release synths accidentally slipped into v2.3. Three of them have been polished up and are in this release (one with major changes including a name change). However, the other two have been removed.

New

  • New fn spread for creating rings of Euclidean distributions. Great for quickly creating interesting rhythms.
  • GUI now automatically appends a : to the FX param autocomplete list
  • Synths and FX now raise an exception if any of their non-modulatable params are modulated. This is disabled when the pref 'check synth args' is unchecked.
  • GUI now renders pretty UTF-8 └─ ├─ characters when printing in the log on RP.
  • Improve docstrings for sample player.

Synths & FX

  • New Synth :dark_ambience, an ambient bass trying to escape the darkness.
  • New Synth :hollow, a hollow breathy sound.
  • New Synth :growl, a deep rumbling growl.
  • Sampler synths now sport built-in rlpf and normaliser FX. These are disabled by default (i.e. won't affect sound of the sample) and can by enabled via the new cutoff:, res: and norm: params.

Bug Fixes

  • Fix insanely obscure bug which caused the GUI to freeze on certain platforms (32 bit Windows and RP2 with 2G/2G kernel).
  • Remove DC Bias offset from Prophet synth (see http://en.wikipedia.org/wiki/DC_bias)

Releases

Mac
Link Sonic-Pi-for-Mac-v2.4.0.dmg
Size 52M
MD5 3860dac368cea0dd44d56a6dd414c099
SHA256 290288724cf0812628d3f97f4ec722093d70d21ace937d378e093a74f904eea6
Raspberry Pi (Wheezy)
Link Sonic-Pi-for-RPi-Wheezy-v2.4.0.tgz
Size 32M
MD5 600b8dba1f87cdaf86f384d3305c53ce
SHA256 dd6541a02e636bc8cfc65c9b2a124a7a3e41c79ae635227afb1c7754daa9b91a
Windows
Link Sonic-Pi-for-Win-v2.4.0.msi
Size 66M
MD5 e09dd83127f6bb560be258c26bf084ac
SHA256 43a1f357e77716f5b75f8affaedd62194d0b82fb49c3e6d98992a15d71e31bdc