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 thebeat_stretch:
opt and change pitch withpitch:
. Theslicer
FX now sports a fantastic deterministicprobability:
opt for creating and manipulating rhythmic structures with ease. Finally there's the new thread localtick
/look
system which will revolutionise the way you work withring
s withinlive_loop
s. 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 tokill
for killing specific
synths. In its place a new fnstop
has been added to stop a given
thread orlive_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 thaninvert_wave: false
. This
shouldn't affect any code which doesn't explicitly set theinvert_wave:
opt. Pieces which have explicit inversion need to swap all 0s for 1s
and vice versa. - The
res:
opt forrrand
andrdist
has been renamed tostep:
to
avoid confusion with the resonance opt for cutoff filters. - Rename
pitch_ratio
topitch_to_ratio
to keep in line with other
similar fns such asmidi_to_hz
.
๐ New Fns
- ๐ New thread-local (i.e. live_loop local) counter system via fns
tick
andlook
. - ๐ 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
andwith_sample_defaults
which act
similarly as their*_synth_defaults
counterparts but for samples not
synths. - New fns
use_tuning
andwith_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 apitches:
opt for constraining the choice of filler notes. - New fns
scale_names
andchord_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 combininglive_loop
s and
tick
to create sophisticated polyrhythms. - New fns
use_cue_logging
andwith_cue_logging
for enabling and
๐ฒ disabling the logging ofcue
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 toslicer
andwobble
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
andwobble
now have a wonderful newprobability:
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 sameseed:
andprobability:
opts will result in the
same behaviour. Great for adding interesting rhythmic variation to
sound. - FXs
slicer
andwobble
now have smoothing opts for even more
control over the resulting wave form. - Teach
sample
the optbeat_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 optpitch
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 optnum_beats:
to indicate that a given
sample consists of a specific number of beats. - Teach
comment
anduncomment
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 optinvert:
as a shortcut to the new
invert_chord
fn. - Teach
sample_duration
about the optsstart:
andfinish:
and
๐ envelope opts such asattack:
andrelease:
. This allows you to
replace any call tosample
withsample_duration
to get the exact
duration of that call. - Teach
chord
the optnum_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
- The