Code. Music. Live.
Monday 13th April, 2015
This release comes with support for Minecraft: Pi Edition installed on the Raspberry Pi. You can now create music with Minecraft visuals or even code up a synth score in Minecraft blocks and read and play the score from Sonic Pi! Another exciting aspect of this release is much improved editor functionality for navigating around and manipulating code via keyboard shortcuts. This means that live coding just got a lot more fun. The keyboard shortcuts are based on the standard shortcuts provided by GNU Emacs - the oldest and most powerful text editor in use by wizard programmers today.
invert_wave
now defaults to 1 everywhere. I found I always inverted
the wave every time I used a synth/fx where wave inversion was
key. This seemed like such a better default I've broken compatibility
for it. Apologies if this has affected you.flanger
FX now defaults the optional arg stereo_invert_wave
to
1.ring
to ring_mod
to reduce the potential for confusion
with the ring
datastructure.Tab
now indents current line or selection rather than inserting a
useless tab character.sync
now accepts multiple cue ids and will sync on the first matching id.pitch_ratio
for converting a midio note to a frequency
ratio. Useful for tuning samples.line
for creating a line from start to finish with a specific
number of slices.spark
for displaying lists of numbers in a fancy text-graph
(▁▃▅▇
) in the log.sample_duration
now scales result based on current BPM.range
now accepts optional args: inclusive:
and step:
.M-<
and M->
for switching workspaces.:pitch_shift
reverb
FX caused a serious audio overload.*_sample_bpm
:bpf
.use_sample_pack_as
(ring 1, 2, 3)
rather than [1, 2, 3]
.C-k
keyboard shortcut now copies text into the clipboard.ring
s rather than ring
-like
things.with_fx
are now raised correctly.Mac | |
Link | Sonic-Pi-for-Mac-v2.5.0.dmg |
Size | 60M |
MD5 | ef722751937eea80be9a70f88bcc217e |
SHA256 | ad8338c6a1f75b65832435c44ac6faa2080827b1b63d03c14036885b4f95289b |
Raspberry Pi (Wheezy) | |
Link | Sonic-Pi-for-RPi-Wheezy-v2.5.0.tgz |
Size | 36M |
MD5 | 5230ea8907ffeb4509e632dce774a308 |
SHA256 | a5d49dac32b3a91ee9de7e010988b3c2055a5e2a368496892b7befb696d375a2 |
Windows | |
Link | Sonic-Pi-for-Win-v2.5.0.msi |
Size | 66M |
MD5 | b0ee8754b5d2fdabb376601f7c8e8b1e |
SHA256 | 7cc13810e49e291b08718914911c24af23e165262679189f4e239578d64d50b2 |
Thursday 30th July, 2015
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 ring
s within live_loop
s. Of course there's so much more too!
Enjoy this release and happy Algoraving!
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.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
.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.res:
opt for rrand
and rdist
has been renamed to step:
to
avoid confusion with the resonance opt for cutoff filters.pitch_ratio
to pitch_to_ratio
to keep in line with other
similar fns such as midi_to_hz
.tick
and look
.vector
which creates a new kind of Array - an immutable
vector (SPVector
) which is now the default base class for all rings.use_sample_defaults
and with_sample_defaults
which act
similarly as their *_synth_defaults
counterparts but for samples not
synths.use_tuning
and with_tuning
for exploring other tuning
systems such as :just
, :pythagorean
, and :meantone
.invert_chord
for chord inversions.current_beat_duration
for returning the duration of the
current beat in seconds.note_range
for returning a range of notes between two notes
with a pitches:
opt for constraining the choice of filler notes.scale_names
and chord_names
for returning a ring of all
chords and scales.rerezzed
- strongly influenced by Daft Punk's track
derezzed
.reich phase
- a nice way of combining live_loop
s and
tick
to create sophisticated polyrhythms.use_cue_logging
and with_cue_logging
for enabling and
disabling the logging of cue
messages.krush
for krushing the sound.panslicer
similar to slicer
and wobble
but modulates
the stereo panning of the audio.subpulse
for a full range pulse with extra bass.blade
- a moody Blade Runner-esque synth violinpiano
- a basic piano emulation. Only capable of whole notes.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.slicer
and wobble
now have smoothing opts for even more
control over the resulting wave form.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.sample
the opt pitch
to enable pitch shifting on any sample.flanger
's feedback mixing is now more fair and is less likely to
hike up the amplitude.note_info
to also handle a number as its param.factor?
to handle division by 0.load_sample
to throw exception when passed an empty path.use_sample_bpm
the opt num_beats:
to indicate that a given
sample consists of a specific number of beats.comment
and uncomment
to require blocks.chord
the new opt invert:
as a shortcut to the new
invert_chord
fn.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.chord
the opt num_octaves
to enable the easy creation of
arpeggios.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.*_sample_bpm
.Mac | |
Link | Sonic-Pi-for-Mac-v2.6.0.dmg |
Size | 62M |
MD5 | c6249a7b2e8de4f3eaf96fa0fb33bac4 |
SHA256 | 15d8a495959e7e50554feec21b18b796065dd954072a7fdc279effc0caa863d2 |
Raspberry Pi (Wheezy) | |
Link | Sonic-Pi-for-RPi-Wheezy-v2.6.0.tgz |
Size | 41M |
MD5 | 10092dc1edee2fd4d3624c1ab3326e83 |
SHA256 | 261f14b654957b5e476ba04641287c517d9ab4c363b067d9bb137c6ecac21904 |
Windows | |
Link | Sonic-Pi-for-Win-v2.6.0.msi |
Size | 71M |
MD5 | 548e5bad15ee48498778f671abbb7ee8 |
SHA256 | f5de95575fe190e12d180bf83ec26ea06a36e2b023a5d9aa0bf0467b8a2c139a |
Thursday 10th September, 2015
This release brings a substantial change to the random number
generator. This has the unfortunate side effect of breaking backwards
compatibility. If you have been using rand
, choose
, shuffle
and
friends to create predictable patterns for your riffs, your code will
produce different results in this release. Please let me apologise and
say it's for a good cause. So what is this good cause? Well, you can
now jump backwards and forwards through the random stream giving you way
more creative control than before! The random stream is now also unified
with the random stream on the synthesis server allowing you to sync
behaviour between synths and code. Exciting times.
The sampler has also been super charged. We can now easily change the
rate via MIDI note intervals with rpitch:
and stretch the sample whilst
preserving pitch via pitch_stretch:
(although with variable results
;-)
).
Finally you can now control the global mixer with set_mixer_control!
for those full filter sweeps over the entire sound...
Have fun and happy live coding!
use_random_seed
with randomisation to create
predictable melodies/rhythms/timbral manipulations you will
unfortunately get different results in v2.7
. This change is to
synchronise both the Ruby rand stream with the one in SuperCollider as
well as enabling the reversal of calls to rand via rand_back
.sync
now causes the BPM to be inherited from the thread calling the
matching cue
. This may be disabled with the new bpm_sync:
opt.rrand
and rand
now return 0 if called with 0.invert_chord
now handles negative inversions in a more musically
appropriate manner..ratio_to_pitch
which provides the inverse of pitch_to_ratio
midi_notes
- returns a ring of numbers (mapping the source
ring/array through the fn note
).rand_back
- reverse the random stream and 'undo' calls to rand
rand_skip
- skip forward through the random stream.rand_reset
- reset the random stream to the last seed.M-/
.decay_level
opt to allow the sustain phase to
shift between two distinct values. The default value for decay_level
is to mirror sustain_level:
thus preserving current behaviour.play
and synth
have now learned the pitch:
opt to match
sample
. This just increments or decrements the final note.sample
now correctly validates opts.sample
learned the pitch_stretch:
opt which combines rate:
modification (similar to beat_stretch:
with pitch:
. Attempts to
maintain the pitch whilst simultaneously changing the rate. The
underlying implementation is very basic and can easily destroy the
sound.sample
learned the rpitch:
opt for simple rate pitch
modulation. This modifies the rate to match the specified number of
MIDI notes relative from the current pitch. For example, a rpitch:
of 12 would double the rate.:echo
's decay:
opt is now beats and the value
is scaled with the BPM.live_loop
learned the seed:
opt which will set the new thread with
the specified seed prior to initial run.density
has now been taught to handle values between 0 and 1 which
will now stretch time for the specified block.in_thread
and live_loop
have now learned the delay:
opt
which will delay the initial execution by the specified number of
beats.sample_duration
now understands all the opts that you can pass to sample
:r + 3
returns :r
(a rest plus any MIDI note shift is still
a rest).note_info
now correctly handles octaves.C-v
.invert_chord
how to properly handle out of range index ranges.Mac | |
Link | Sonic-Pi-for-Mac-v2.7.0.dmg |
Size | 93M |
MD5 | 9bf75c57995c4d91a13cbeb6dbe5f4b8 |
SHA256 | 8a02d029273a3906b4761e2d36d64d34f0c4aff4fed4253658f0dc1c0f219ff9 |
Raspberry Pi (Jessie) | |
Link | Sonic-Pi-for-RPi-Jessie-v2.7.0.tgz |
Size | 65M |
MD5 | 5b69a9fa9dc572e5b624ddc922ea30a6 |
SHA256 | 742a66407b2150ef648e577f24c4790431cc7e12e373aa9fbf892253b22a536b |
Windows | |
Link | Sonic-Pi-for-Win-v2.7.0.msi |
Size | 71M |
MD5 | 51c2626ce2dd886bebc270416396312d |
SHA256 | 8d3cd925f73d2a6159a757ea9c0d21697a16b3a921ed70b377317fae7e43e9f2 |
Friday 20th November, 2015
This release, named after Karlsruhe, one of the home cities of live coding, is mainly a maintenance release with a strong focus on both performance, stability and documentation. This is therefore the fastest and most stable release of Sonic Pi ever with a massive 10% performance improvement on the original Raspberry Pi 1. It also ships with new translations in Polish, Japanese and French. Many of these improvements (such as the complete rewrite of the OSC stack) are not documented in this release list but can instead be found in the commit logs over on Github.
However, not to go unnoticed are a number of exciting new features. For
example we now have a new Band EQ FX, the ability to use MIDI note names
such as :e5
as values for opts such as cutoff:
, and new powerful
cutoff envelopes on the sampler.
M-{
and
M-}
for switching left and right respectively.sync
no longer inherits BPM by default. Set the bpm_sync:
opt to
true to enable BPM inheritance.use_random_seed
.octs
- returns a ring of successive octaves.assert
- for raising an exception if the argument is not true.assert_equal
- for raising an exception if the two arguments are not
equal.bt
- converts the specified time w.r.t. the current BPM.inspect
- similar to print
but prints the inspected version of the argument.M-RET
is now a duplicate shortcut for running the code.sample_duration
.cutoff_
prefix
(such as cutoff_attack
, cutoff_decay_level
and friends).cutoff
opt.on:
for both sample
and synth
. This acts like
if
but ensures all the opt vals are evaluated (useful if wanting to
keep the consumption of random streams or ticks consistent even when
not triggering a synth.cutoff:
can now accept note names such as :c4
.slide:
opt to match synths.play_pattern_timed
to handle rings.current_transpose
now returns 0 if there is no current
transposition.with_fx*
fns now return the result of their block.spark
now handles rings correctly.spark
now treats booleans as 1s and 0s so you can now spark rings of bools.puts
, print
and mc_message
now handle multiple message argumentswith_fx
doesn't swallow TL modifications such as
transposition, current synth etc.with_fx
doesn't affect random seed.pre_amp:
opt is no longer scaled w.r.t. the current BPM.Mac | |
Link | Sonic-Pi-for-Mac-v2.8.0.dmg |
Size | 61M |
MD5 | 2e6d91fd777900782492ca3b38245723 |
SHA256 | 2e6cceb30d2c464e38810d2e8baadde315fc196aff75f0bb4d445c46a02a9a74 |
Raspberry Pi (Jessie) | |
Link | Sonic-Pi-for-RPi-Jessie-v2.8.0.tgz |
Size | 66M |
MD5 | b47111d04dceb2997540f9e7764b9faa |
SHA256 | 58aa121a24c9d06b958199bdf62aab990c6f424c1e1651de453981788b18ec87 |
Raspberry Pi (Wheezy) | |
Link | Sonic-Pi-for-RPi-Wheezy-v2.8.0.tgz |
Size | 66M |
MD5 | e2f8de24afb93618ffb0f4ca787cfcc1 |
SHA256 | 3f252a7714a5a71d8a03d3d115340c616fa6116acf29f1ae7000d27995333e0d |
Windows | |
Link | Sonic-Pi-for-Win-v2.8.0.msi |
Size | 75M |
MD5 | 26dda533ab64bffa67049f4a50616027 |
SHA256 | 6c427110af73ca396a274f5f5dbcab682634694daef9d7a99fca2fa22ab8c226 |
Thursday 31st December, 2015
Hot on the heels of the previous release comes v2.9
codenamed
Venster
(Dutch for window). This release has a specific focus on
fixing all the known issues with Sonic Pi running on Windows. If you've
tried Sonic Pi on Windows before and had issues, make sure to try it
again with v2.9
. If you're still having issues on Windows please do
let us know so we can fix it as soon as possible.
For all you Raspberry Pi and Mac OS X users - you're not left out. Sonic
Pi is just as stable as it was before (if not more stable) and v2.9
comes with a surprising amount of tweaks and features for its short 1
month development cycle. There's two new FX to play with: tanh
and
gverb
as well as a heavily revamped logging system which is much
clearer about printing which opts are actually being used for your
synths and samples. Finally, we now include of all the published MagPi
magazine articles in the tutorial. We also now have Hungarian and
Norwegian translations of the GUI.
Happy Live Coding!
invert_chord
to chord_invert
rate:
and pitch_stretch:
opts. It's now
possible to set the rate:
independent of the pitch:
modification
caused by pitch_stretch
.block_duration
- returns the duration of the given block in seconds (not scaled with the BPM).block_slept?
- returns true if the contents of the block slept or synced.synth_names
- returns a list of all the available synthsreset_mixer!
- resets the main mixer back to its default values.sample_free
- unload a sample from memory to free up memory usage.sample_free_all
- unload all samples from memory.use_octave
- similar to use_transpose
but for whole octaves.with_octave
- similar to with_transpose
but for whole octaves.use_merged_sample_defaults
- similar to use_merged_synth_defaults
but for sampleswith_merged_sample_defaults
- similar to
with_merged_synth_defaults
but for samplesuse_cent_tuning
- uniformly tune all subsequent notes in centswith_cent_tuning
- uniformly tune all notes in cents within the blocktanh
- for more distortion goodness.gverb
- a different reverb FX to play with.use_synth_defaults
and friends.C-k
will now kill multiple lines if lines end with ,
..txt
extension is automatically added to the
file name if none specified.sync:
opt to live_loop
and in_thread
. This now syncs the
live loop once on creation. Similar to the delay:
opt. If both
sync:
and delay:
are specified then the delay happens before the
sync.synth
fn can now play chords with the notes:
opt such as:
synth :dsaw, notes: (chord :e3, :minor)
. This will return a single
controllable synth node representing all the notes similar to
play_chord
.on:
opt is now honoured when playing chords.with_fx "my_shiny_effect"
. This needs to be
loaded manually via load_synthdefs
.~/.sonic-pi/init.rb
on launch if it exists.SONIC_PI_HOME
is set it will be used over
~
as the root of the user's .sonic-pi
directory (used to auto-save
files and store logs).sample_duration
now correctly takes account of TL defaults set by
use_sample_defaults
.pitch_stretch
, beat_stretch
and rpitch
can now be
used in TL defaults.Mac | |
Link | Sonic-Pi-for-Mac-v2.9.0.dmg |
Size | 93M |
MD5 | c74d393043e2acf97a03430e824ecbf2 |
SHA256 | c9dcf6a9d05204b8cb51244f51f083ed5e68d36428814c768af752f4ff3686fa |
Raspberry Pi (Jessie) | |
Link | Sonic-Pi-for-RPi-Jessie-v2.9.0.tgz |
Size | 61M |
MD5 | d14eaf49b9c38a4afe4906ebc1b413b2 |
SHA256 | 6406a92be127c50d1592ee1a3408f73fff77aa6290764f27a7a6cf273fc10e2e |
Raspberry Pi (Wheezy) | |
Link | Sonic-Pi-for-RPi-Wheezy-v2.9.0.tgz |
Size | 61M |
MD5 | d63390b4167cee8a87632fbd7e22f04b |
SHA256 | 5f98c803c432f684382b24e9105fc6dfdc7b46fd7b6fd74c4fc5ac5ae59c2a05 |
Windows | |
Link | Sonic-Pi-for-Win-v2.9.0.msi |
Size | 79M |
MD5 | 0311ce18b1ba35e343e1b4de533899c9 |
SHA256 | 392fe3b1d5b8b651c86af2526e8add0b44e806207ee2ca90871fa6bbb7705b9c |
Friday 15th April, 2016
"I gotta have more cowbell!" - The Bruce Dickinson
The main feature in this release is the completely new sample system for
working with large folders of samples. You can now easily index into and
filter over whole folders of samples with a simple yet powerful filter
system. This system has been in development for over a year now and has
been tuned and tweaked over many performances and practice sessions. See
the documentation and examples for sample
as well as the new tutorial
section 3.7 for details.
We also have a number of exciting new sounds to play with including some beautifully sounding chiptune synths, fun retro FX and new drum samples including a full tabla set and a cowbell.
Finally, even more boot issues on both OS X and Windows have been fixed making this the most polished and stable release to date.
Now go and get your live code on!
use_sample_pack_as
and with_sample_pack_as
have been removed.nil
now no longer resolves to 0.0. Instead it
masks any defaults and ensures the downstream default (for the actual
synthdef itself) is honoured. This allows you to override any existing
synth defaults specified via use_synth_defaults
for a given synth
trigger.current_random_seed
- Get the current seed value of the random generator.set_cent_tuning!
- global tuning.on
- similar to if
but behaves the same as the on:
opt for
synths and samples.halves
- create a ring of successive halves.doubles
- create a ring of successive doubles.pick
- similar to shuffle but allows duplicates. You may also
specify how many items to pick.fx_names
- create a ring of all available FX.:dtri
- detuned triangle waves.:pluck
- a lovely synthesised plucked string.:chiplead
- retro NES style lead synth.:chipbass
- retro NES style bass synth.:chipnoise
- retro NES style noise synth.:whammy
- low-tech transposition effect similar to the
Digitech Whammy guitar pedal.:octaver
- low-tech octave effect similar to early guitar
pedals.:vowel
- modifies incoming signal to match human vowel
sounds.:mono
- mono effect for summing stereo channels.:tanh
FX is now more crunchy by default.:compressor
and :krush
FX now correctly honour the mix:
opt.sample
fn gained source and filter pre-opts. You may now specify
a number of parameters directly before the opts which describe both
folders containing samples and filters over those folders to allow you
to easily and quickly work with large sample sets. See Section 3.7 of
the tutorial for more information.hpf:
and lpf:
opts. Any cutoff:
opts are
automatically switched to lpf:
and any errors will be reported with
an lpf:
prefix.compress:
opt. This means you can now compress any triggered sample directly
without the need to reach for an FX.pre_amp:
opt which applies the amp at the
beginning of its internal signal chain. You can use this to overload
the new compressor.hpf_
and lpf_
prefix (such as
hpf_attack
, lpf_decay_level
and friends).load_samples
will now load all the
samples within that directory.free_samples
will now free all the
loaded samples within that directory.:tabla_
sample group with a range of tabla drum sounds.:vinyl_
sample group with a range of vinyl scratches and
hisses.:drum_cowbell
, :drum_roll
, :misc_cros
,
:misc_cineboom
, :perc_swash
, :perc_till
, :loop_safari
,
:loop_tabla
.C-k
now nukes over trailing whitespace.load_sample
now has sample autocompletion.RETURN
now auto-indents the buffer - ensuring that the
cursor is moved to the correct indentation on the following line.sample
fn have been completely rewritten and extended.scale
and chord
can now handle being passed no tonic such as:
(chord :minor)
which will return a ring of offsets from 0.chord
learned new variants: add2
, add4
, add9
, add11
,
add13
, madd2
, madd4
, madd9
, madd11
, madd13
.take
method can now take more elements than the original
ring by wrapping around:
(ring 1, 2, 3).take(5) #=> (ring 1, 2, 3, 1, 2)
(ring 1, 2, 3) + (ring 4) #=> (ring 1, 2, 3, 4)
(ring 1, 2, 3) - 1 #=> (ring 0.0, 1.0, 2.0)
(ring 1, 2, 3).take(0)
will now return an empty ring.density
now complains if it isn't passed a do/end block.use/with_synth
when accidentally passed opts.C-i
doc lookup shortcut to work with :tb303
synth docs.C-i
now always displays docs where available (previously it was
possible for docs not to be displayed).Mac | |
Link | Sonic-Pi-for-Mac-v2.10.0.dmg |
Size | 59M |
MD5 | db2888bbcc5fb5406ec9c54f74fbb049 |
SHA256 | 4539cbd70f1e0d347c27231f741a245551c0d50f10e987761b9b7567ba0d82fe |
Raspberry Pi (Jessie) | |
Link | Sonic-Pi-for-RPi-Jessie-v2.10.0.tgz |
Size | 48M |
MD5 | 3eebecf9363dfa8df6599cab6d98da55 |
SHA256 | 7ac3d97a288ea670d3ad8a683b60009fa5737faa59f924cc5f8b462797982e63 |
Windows Portable | |
Link | Sonic-Pi-for-Win-Portable-v2.10.0.paf.exe |
Size | 51M |
MD5 | fbf67315b0d99e9523d7b06bfca5a680 |
SHA256 | e08f3ec43cdc879175dca1682d0e33b933daf4975b189ffe2e468785206c9d43 |
Windows | |
Link | Sonic-Pi-for-Win-v2.10.0.msi |
Size | 73M |
MD5 | 3368579b82c6ebfbe5995d2c9b22acfe |
SHA256 | b79e7c20a20cc83aa752a12c2b5b7ab497c9dc4c3db3024ddce0b5ac73328e99 |
3rd Nov, 2016
This release is the biggest and most adventurous release yet. There are as many (invisible) modifications and improvements to the internal systems as there are new external features that you can see and play with. The aim was to create a solid foundation for new and exciting features both in this release and in preparation for future releases.
We also open our arms to welcome two new Core Team members - Luis Lloret and Adrian Cheater. Both have made generous and substantial contributions to this release. Thank-you. Sadly we also say farewell to Jeremy Weatherford. Please extend your kind thoughts and gratitude to Jeremy for all of his contributions - in particular for turning the Windows release from a possibility into a reality. Luckily Luis has kindly stepped in to maintain the Windows installer.
The main visible feature is the new scope visualisers. The overall audio output can now be visually monitored by one of three wave form visualisers. Firstly there is the individual left and right channels, next is a single mono scope which is mixed down from the stereo channels using RMS and finally there is a Lissajous scope which displays phase differences between the left and right channels. Typically the mono output will be most useful. Use the preferences pane to hide and show each of these scopes. All of them may be viewed at the same time if necessary. Thanks to Adrian Cheater for the core work behind this feature.
We now have support for multi-channel input (up to 16 channels) via the
new sound_in*
synths for systems that have audio in. This opens up the
possibility to use Sonic Pi as an FX unit for vocals, guitars and any
other audio source.
Another exciting new feature is the sample opt onset:
- which lets you
play a specific percussive part of a sample. This uses an automatic
onset detection algorithm to determine all the points in the sample that
go from quiet to loud quickly such as a drum, synth or bass hit. For
example, this allows you to take a complex drum sample and trigger each
of the individual drums in your own order and to your own timing.
Finally, translations are now crowd-sourced and small or large
contributions for any language can be made here:
https://hosted.weblate.org/projects/sonic-pi/
. If your language isn't
yet available or you would like to improve things, please join in the
effort. Thanks to Hanno Zulla for making this possible.
sample
now supports the opt path:
which enables the sample's path
to be overridden.use_sample_pack
is now deprecated and no longer available. Consider
using the new filter system. See documentation for sample
for more
details.current_sample_pack
is now deprecated and no longer available.inspect
has been removed. (Standard printing now calls
Object#inspect
by default)load_sample
now only loads the first matched sample. load_samples
now loads all matched samples.reboot
is still supported and may
still be triggered manually if required.play
, synth
and sample
now consume all their arguments
before testing to see if the synth should be triggered. This ensures
all declared rands are consumed. This change might therefore
potentially modify your random stream consumption. Consider using
rand_back
or rand_skip
to re-align the stream if necessary.reset
- resets the user's thread locals (such as ticks and rand
stream index) to the snapshot of the state as recorded at the start of
the current thread.clear
- clears all the user's thread locals to a blank state.time_warp
- allows whole blocks of code to be shifted forward or
backwards in time up to the value of current_sched_ahead_time
.rand_look
- generate a random number without consuming a rand by
looking ahead in the random stream.rand_i_look
- generate a random integer without consuming a rand by
looking ahead in the random stream.run_file
- Runs the contents of file at path as if it was in the
current buffer.run_code
- Runs the contents of the specified string as if it was in
the current buffer.Numeric#clamp
- max and minimum bound (will clamp self to a value <=
other and >= -1*otherset_recording_bit_depth!
- set the bit depth for WAV files generated
by recording the audio. Default is 16 bits, and can now be set to one
of 8, 16, 24 and 32. Larger bit depths will result in better quality
audio files but also much larger file sizes for the same duration.scsynth_info
- obtain information about the running audio synthesis
server SuperCollider such as the number of available busses and
buffers.:tech_saws
- an implementation of a slightly modified
supersaw.:sound_in
- reads audio from the sound card.:sound_in_stereo
- reads audio from the sound card.pre_mix:
opt. This allows the audio flow to
completely bypass a given FX (unlike mix:
which passes the audio
through the FX but modifies the amplitude afterwards).control
to manipulate the last triggered synth by default. For
example, control amp: 3
will set the amp:
opt of the last
triggered synth to 3. However, control foo, amp: 3
will still
specifically control synth foo
.slice:
- lets you play a specific slice of a sample. The
default number of slices is 16 which may be changed with the
num_slices:
opt. Sample is divided equally into the number of slices
without regard for audio content and onset points. The slice:
opt
also works with pick
for triggering random sample slices: sample :loop_amen, slice: pick
.onset:
- lets you play a specific percussive part of a
sample. Uses automatic onset detection to determine the points in the
sample that go from quiet to loud quickly. Unlike slice:
, onset:
does not necessarily divide a sample into equal onsets - some onsets
will be smaller or bigger than others and the number of onsets is
determined by the algorithm and isn't known in advance.https://hosted.weblate.org/projects/sonic-pi/
live_loop
.pulse_width:
opt to flanger FX doc.~/.sonic-pi/log
play_chord
when notes isn't list like.pick
now returns a lambda if no list is given as the first argument
(which makes it useful for using with sample's onset:
and slice:
opts.buffer 0
.:loop_tabla
so that it correctly loops. (Length
reduced to 10.674 seconds).:reverb
FX's mix:
opt to ensure it's in the range 0 to 1.sample nil
now no longer plays a sample - it was incorrectly
defaulting to the first built-in sample (:ambi_choir
)pick
's skip:
opt now works as expected: pick(5).drop(1) == pick(5, skip: 1)
sample
now prints a 'no sample found' message with both sample nil
and sample []
rather than incorrectly playing the first built-in wav file.:piano
synth to notes less than 231 as higher values crash the audio server.Mac | |
Link | Sonic-Pi-for-Mac-v2.11.0.dmg |
Size | 61M |
MD5 | 7306829cb4594ee39001a6cedb0390b3 |
SHA256 | f1d260bf40fe0ad29c7b119d36cac6dca8ebe234fcbb48711466ae32f6bd0d71 |
Windows Portable | |
Link | Sonic-Pi-for-Win-Portable-v2.11.0.paf.exe |
Size | 92M |
MD5 | ebb3c7f3db51bb7dea370a4f6fc4b1b2 |
SHA256 | fe89f1eadceb1a79c0db9e0777d20005d045875ccca027e888fc73c88f38285f |
Windows | |
Link | Sonic-Pi-for-Win-v2.11.0.msi |
Size | 142M |
MD5 | f71e823269995b683e189c44f2ea079b |
SHA256 | 19a77de15ce6a39539295ab2943d48460c99a20feebaa0a7cda1413e2dd38bf9 |
Raspberry Pi Deb (Jessie) | |
Link | sonic-pi_1-2.11.0-2_armhf.deb |
Size | 50M |
MD5 | 5b72557c500c665a3bb4feab75857fdd |
SHA256 | 4100f83f905716a47c5b7c68f8ba420c52b794fe8c549690ad1285dd8ebfa302 |
16th Dec, 2016
This is primarily a maintenance release containing a number of bug fixes and minor tweaks. The feature set remains unchanged from v2.11
.
One of the core bugs fixed in this release is an issue with the return key within some Japanese layouts. Another important change is the unification of the font on all platforms to Hack. This is from the same family as Menlo and Bitstream Vera (the previous fonts for Mac and Linux respectively) and a dramatic improvement to the Courier font previously used for Windows.
chord_invert
's shift value is a whole number - otherwise it
is possible to get into an infinite recursion.clear
. When a
run is created, the thread is given a set of default thread
locals. Previously clear
removed all thread locals. Now, we reset
the thread locals to the defaults for a brand new thread.sync
can once again handle multiple cues correctly.sample_duration
now handles onsets, slices and sustain.control
on a chord group.rand
and rand_i
to honour their arguments.Mac | |
Link | Sonic-Pi-for-Mac-v2.11.1.dmg |
Size | 63M |
MD5 | d3daa8fccf4f239686277caf86e85981 |
SHA256 | fbe9d5939d296b9ffae69432dffb6a6b1b4e06d5d89754d3c110a5cfdd5cd954 |
Windows Portable | |
Link | Sonic-Pi-for-Win-Portable-v2.11.1.paf.exe |
Size | 89M |
MD5 | 8fdfd0a982ace0ae9080d38749e5c9d3 |
SHA256 | 7cee0d581be73f72a5c5bc2979c9143e0bcff9f48a15feef1a2c929089042a40 |
Windows | |
Link | Sonic-Pi-for-Win-v2.11.1.msi |
Size | 139M |
MD5 | 17df9522d44422f8e12950bb2574eef8 |
SHA256 | a635cf257f3e0927f512d24dfee5b221caa8447acc2b049bf17c9f23484c4b2d |
18th July, 2017
This release is our most ambitious to date. The goal is to open up the code within Sonic Pi to the outside world. We want you to be able to both manipulate the real world to change the code and change the real world with the code. Input Output. IO.
We have therefore focussed on getting events and audio in and out of Sonic Pi in new ways whilst keeping to our philosophy of simple code, live manipulation, and strict, powerful timing. This release introduces a number of brand-new components:
It's important to mention that MIDI and OSC output functionality is possible due to a new well-timed scheduler. This was built in a remarkable programming language called Erlang which is now part of the Sonic Pi distribution. We have had the great honour of one of Erlang's co-creators, Joe Armstrong working directly with us on the implmentation of this scheduler and we look forward immensely to continuing to work with him on new functionality.
Another very important part of this release is the addition of Robin Newman to the core team. We have always been consistently impressed with his fearless and experimental attitude - pushing Sonic Pi into new areas with ease. We're excited that he's decided to join our core team and hope you're as excited by his future work with us as we are.
Finally, We're really very excited about what new kinds of instruments people will be able to create with this new technology both in the classroom and on stage at musical festivals. Sonic Pi has now become a fully programmable music studio. Have fun live coding!
.pick
now returns 1 element by default. Previously calling .pick
on a ring would pick n elements randomly from the ring (including duplicate picks) where n would be the size of the ring. With this change, .pick
only returns a single element. This makes it similar to choose.midi_*
- many new MIDI-specific fns such as midi_note_on
, midi_pitch_bend
, midi_cc
, midi_clock_tick
. See new tutorial section for more information. These fns send MIDI messages to connected MIDI devices. Incoming MIDI is received via the new event log.
with_swing
- add swing to successive calls to do/end block.
get
- get a named value from the Time State at the current time. This will return the last value entered. Previous values can be read when within a time_warp
. Has full support for OSC
set
- set a named value in the Time State at the current time. Future values can be set when within a time_warp
.
use_real_time
- convenience fn for setting the schedule ahead time to 0 for the current thread. Very useful for removing latency from live loops that are working with external cues (such as MIDI or OSC).
use_midi_defaults
- set defaults to be used for all subsequent MIDI calls. Similar to use_synth_defaults
. Also available: with_midi_defaults
.
use_osc
- set the default hostname and port number for subsequent outgoing OSC messages. See also with_osc
.
osc
- send Open Sound Control messages in time with the music to default hostname and port
osc_send
- similar to osc
but requires you to specify the hostname and port
use_sched_ahead_time
- set the schedule ahead time specifically for the current thread. Also available - with_sched_ahead_time
.
current_time
- return the current logical time.
assert_error
- An assertion to ensure the specified block of code raises the specified error.
New synth live_audio
- directly stream audio from your soundcard as a synth.
New FX record
- enables you to internally record any audio into named buffers. Perfect for building looper systems.
New FX :sound_out
- stream out audio to a specific output on your sound card. This enables multi-channel audio out.
New FX :sound_out_stereo
- similar to sound_out
but streams out to a pair of consecutive audio card (left and right) output channels.
New FX eq
- Parametric EQ with three centre freqs - low, mid & high - all with Q values and gain (-1 -> 1). Also has low and high shelves with centre freqs and slope adjustment.
New FX tremolo
- simple tremolo effect which modulates the volume within the do/end
block.
sync
, cue
and get
or set
time_warp
about input ranges. It now works similar to at
in that it can now take two lists of args - times and values - which represent a list of time destinations to be visited in turn.range
to work as expected with both floats and ints..scale
which will return a new ring with all elements multiplied by the scale value.control
now returns the node you're controlling.:slicer
, :wobble
and :panslicer
FX (i.e. via the probability:
opt).chord_invert
and sample
to work with floating point args.Mac | |
Link | Sonic-Pi-for-Mac-v3.dmg |
Size | 71M |
MD5 | 68fd047993778d08a3e384a4bd72d862 |
SHA256 | 824e822c797547067952a7579b2c881fc2b90b1435f9ab1c824bfc3564869310 |
Raspberry Pi Deb (Stretch) | |
Link | sonic-pi_1_3.0.0-armhf.deb |
Size | 58M |
MD5 | 4141e3029570ddababb1c1aab5d443b5 |
SHA256 | 92abd4044ae13d5d19eadd4250ce6182d2ccdfc1db86fed085cbd91ee3d078cd |
28th July, 2017
This is a minor release addressing a few bugs and includes a small number of modifications.
Mac | |
Link | Sonic-Pi-for-Mac-v3.0.1.dmg |
Size | 75M |
MD5 | ae2117e4bb6871fa464cc2143b1b79c0 |
SHA256 | d9eea57df86da3d39a2a068358fcc256e0dd0181a110fa2d83ad16ad153b10fd |
Raspberry Pi Deb (Stretch) | |
Link | sonic-pi_1_3.0.1-armhf.deb |
Size | 61M |
MD5 | 9f3fcf382b524497778f432dbf004cc8 |
SHA256 | 8cf87fe1b7cb90add870e2f204af03d36b186f51c32bc55053ba9598e6d6d480 |