Sonic Pi v2.6.0 Release Notes

Release Date: 2018-02-21 // about 6 years ago
  • The laser beams sliced through the wafts of smoke as the subwoofer pumped bass deep into the bodies of the crowd. The atmosphere was ripe with a heady mix of synths and dancing. However something wasn't quite right in this nightclub. Projected in bright colours above the DJ booth was futuristic text, moving, dancing, flashing. This wasn't fancy visuals, it was merely a projection of Sonic Pi running on a Raspberry Pi. The occupant of the DJ booth wasn't spinning disks or playing MP3s, she was writing, editing and evaluating code. She was live coding and this was an Algorave.

    This release is codenamed Algorave to celebrate that Sonic Pi is now ready to be performed within nightclubs as well as still being a fantastic tool for learning how to code creatively. There are many improvements as detailed below. However, let's just take a brief look at some of the most fun. Firstly we have the new error reporting system to make it easier to find and debug your errors. Syntax errors are now blue and runtime errors pink. We also have a new look and feel including a new dark mode for performing in dark places. We also have some fantastic new synths, FX and have even improved the standard synths. For example, sample now lets you stretch to match the beat with the beat_stretch: opt and change pitch with pitch:. The slicer FX now sports a fantastic deterministic probability: opt for creating and manipulating rhythmic structures with ease. Finally there's the new thread local tick/look system which will revolutionise the way you work with rings within live_loops. Of course there's so much more too!

    ๐Ÿš€ Enjoy this release and happy Algoraving!

    ๐Ÿ’ฅ Breaking Changes

    • The res: opt for all synths and FX now has range 0->1 rather than
      1->0. This means that a higher res value results in more
      resonance. This will hopefully be more intuitive to beginners and less
      surprising for people with existing synth knowledge.
    • The fn stop has been renamed to kill for killing specific
      synths. In its place a new fn stop has been added to stop a given
      thread or live_loop.
    • 0๏ธโƒฃ invert_wave opts are now inverted. The default is now 0 which
      has the same behaviour as the old 1. This means that it's more
      intuitive to use the opt as to invert the current wave, you now
      specify: invert_wave: true, rather than invert_wave: false. This
      shouldn't affect any code which doesn't explicitly set the invert_wave:
      opt. Pieces which have explicit inversion need to swap all 0s for 1s
      and vice versa.
    • The res: opt for rrand and rdist has been renamed to step: to
      avoid confusion with the resonance opt for cutoff filters.
    • Rename pitch_ratio to pitch_to_ratio to keep in line with other
      similar fns such as midi_to_hz.

    ๐Ÿ†• New Fns

    • ๐Ÿ†• New thread-local (i.e. live_loop local) counter system via fns tick
      and look.
    • ๐Ÿ†• New fn vector which creates a new kind of Array - an immutable
      0๏ธโƒฃ vector (SPVector) which is now the default base class for all rings.
    • New fns use_sample_defaults and with_sample_defaults which act
      similarly as their *_synth_defaults counterparts but for samples not
      synths.
    • New fns use_tuning and with_tuning for exploring other tuning
      systems such as :just, :pythagorean, and :meantone.
    • ๐Ÿ†• New fn invert_chord for chord inversions.
    • New fn current_beat_duration for returning the duration of the
      current beat in seconds.
    • ๐Ÿ†• New fn note_range for returning a range of notes between two notes
      with a pitches: opt for constraining the choice of filler notes.
    • New fns scale_names and chord_names for returning a ring of all
      chords and scales.
    • ๐Ÿ†• New example rerezzed - strongly influenced by Daft Punk's track
      derezzed.
    • ๐Ÿ†• New example reich phase - a nice way of combining live_loops and
      tick to create sophisticated polyrhythms.
    • New fns use_cue_logging and with_cue_logging for enabling and
      ๐ŸŒฒ disabling the logging of cue messages.
    • It is now possible to set the block type in the Minecraft API.

    GUI

    • ๐Ÿ†• New visual look and feel including a new Dark Mode for live coding in
      night clubs.
    • ๐Ÿ†• New preferences for hiding/showing aspects of the GUI such as the
      ๐ŸŒฒ buttons, log, tabs etc.
    • ๐Ÿ†• New preference for full screen mode.
    • ๐Ÿ‘Œ Improve error message reporting. Syntax errors are now made distinct
      from runtime errors with colour-coded messages. Also, the line number
      of the error is much more visible, and the line of the error is
      highlighted with an arrow in the left-hand margin.
    • Workspaces are now named buffers. This is a smaller word which works
      ๐Ÿ‘ better on lower res screens and is also a lovely term used by a number
      of wonderful programming editors such as Emacs.
    • ๐Ÿ–จ Print friendly messages to the log on boot.
    • โž• Add pref option to check for updates now.

    Synths, Samples & FX

    • ๐Ÿ†• New FX - krush for krushing the sound.
    • ๐Ÿ†• New FX - panslicer similar to slicer and wobble but modulates
      the stereo panning of the audio.
    • ๐Ÿ†• New synth subpulse for a full range pulse with extra bass.
    • ๐Ÿ†• New synth blade - a moody Blade Runner-esque synth violin
    • ๐Ÿ†• New synth piano - a basic piano emulation. Only capable of whole notes.
    • FXs slicer and wobble now have a wonderful new probability: opt
      which will only slice on (or off depending on wave inversion) with the
      specified probability. The behaviour is deterministic, so repeated
      ๐Ÿ‘€ calls with the same seed: and probability: opts will result in the
      same behaviour. Great for adding interesting rhythmic variation to
      sound.
    • FXs slicer and wobble now have smoothing opts for even more
      control over the resulting wave form.
    • Teach sample the opt beat_stretch: for modifying the rate of the
      sample to make sure the duration of the sample is n beats long (with
      respect to the current bpm). Note: stretching the beat does change
      the pitch.
    • Teach sample the opt pitch to enable pitch shifting on any sample.
    • FX flanger's feedback mixing is now more fair and is less likely to
      hike up the amplitude.

    ๐Ÿ‘Œ Improvements

    • Teach note_info to also handle a number as its param.
    • Teach factor? to handle division by 0.
    • ๐Ÿ‘ป Teach load_sample to throw exception when passed an empty path.
    • ๐Ÿ‘ป Now throws an exception when you attempt to create an empty ring.
    • Rings are now immutable (in the Clojure sense) which means they can be
      safely passed to multiple threads/live_loops without any issues.
    • Teach use_sample_bpm the opt num_beats: to indicate that a given
      sample consists of a specific number of beats.
    • Teach comment and uncomment to require blocks.
    • Teach synth chord groups to allow their notes to be controlled
      individually to allow transitions between chords.
    • ๐Ÿ‘ป Throw nicer exception when unable to normalise synth args
    • Teach chord the new opt invert: as a shortcut to the new
      invert_chord fn.
    • Teach sample_duration about the opts start: and finish: and
      ๐Ÿš€ envelope opts such as attack: and release:. This allows you to
      replace any call to sample with sample_duration to get the exact
      duration of that call.
    • Teach chord the opt num_octaves to enable the easy creation of
      arpeggios.

    ๐Ÿ› Bug Fixes

    • Fix bug in with_sample_pack_as to now correctly accept a block.
    • mx_surface_teleport no longer throws an error.
    • ๐Ÿ‘€ Array#shuffle now works correctly with the random seeds for
      deterministic behaviour.
    • Fix broken behaviour with multiple nested calls to *_sample_bpm.

    ๐Ÿš€ Releases

    Mac
    ๐Ÿš€ Link
    Size 62M
    MD5 c6249a7b2e8de4f3eaf96fa0fb33bac4
    SHA256 15d8a495959e7e50554feec21b18b796065dd954072a7fdc279effc0caa863d2
    Raspberry Pi (Wheezy)
    ๐Ÿš€ Link
    Size 41M
    MD5 10092dc1edee2fd4d3624c1ab3326e83
    SHA256 261f14b654957b5e476ba04641287c517d9ab4c363b067d9bb137c6ecac21904
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 71M
    MD5 548e5bad15ee48498778f671abbb7ee8
    SHA256 f5de95575fe190e12d180bf83ec26ea06a36e2b023a5d9aa0bf0467b8a2c139a