Releases: sonic-pi-net/sonic-pi
Cowbell
Version 2.10 - 'Cowbell'
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!
Breaking Changes
use_sample_pack_as
andwith_sample_pack_as
have been removed.- A synth opt value of
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 viause_synth_defaults
for a given synth
trigger. - Default schedule ahead time is now 0.5s on all platforms for
consistency (except for Raspberry Pi 1 which remains at 1s).
New Fns
current_random_seed
- Get the current seed value of the random generator.set_cent_tuning!
- global tuning.on
- similar toif
but behaves the same as theon:
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.
Synths & FX
- New synth
:dtri
- detuned triangle waves. - New synth
:pluck
- a lovely synthesised plucked string. - New synth
:chiplead
- retro NES style lead synth. - New synth
:chipbass
- retro NES style bass synth. - New synth
:chipnoise
- retro NES style noise synth. - New FX
:whammy
- low-tech transposition effect similar to the
Digitech Whammy guitar pedal. - New FX
:octaver
- low-tech octave effect similar to early guitar
pedals. - New FX
:vowel
- modifies incoming signal to match human vowel
sounds. - New FX
:mono
- mono effect for summing stereo channels. :tanh
FX is now more crunchy by default.:compressor
and:krush
FX now correctly honour themix:
opt.
Samples
- Samples in FLAC format (Free Lossless Audio Codec) are now supported!
- The
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. - Samplers now have
hpf:
andlpf:
opts. Anycutoff:
opts are
automatically switched tolpf:
and any errors will be reported with
anlpf:
prefix. - The sampler synth gained a compressor enabled via the
compress:
opt. This means you can now compress any triggered sample directly
without the need to reach for an FX. - Samplers gained the
pre_amp:
opt which applies the amp at the
beginning of its internal signal chain. You can use this to overload
the new compressor. - Samplers now have both high pass and low pass filter envelopes which
behave similarly to the amplitude envelope but control internal hpf
and lpf FX. These are available via new opts which mirror the standard
envelope opts but with ahpf_
andlpf_
prefix (such as
hpf_attack
,lpf_decay_level
and friends). - Passing a directory path to
load_samples
will now load all the
samples within that directory. - Passing a directory path to
free_samples
will now free all the
loaded samples within that directory. - Samples are now loaded asynchronously in a separate thread. This
therefore doesn't block the current thread and cause any subsequent
synth/sample triggers to be late. - Sample trigger logging now includes the directory of the contained
sample. - Samples are now reloaded asynchronously after a server reboot (and
therefore no longer block execution). - Add new
:tabla_
sample group with a range of tabla drum sounds. - Add new
:vinyl_
sample group with a range of vinyl scratches and
hisses. - Add new samples:
:drum_cowbell
,:drum_roll
,:misc_cros
,
:misc_cineboom
,:perc_swash
,:perc_till
,:loop_safari
,
:loop_tabla
.
GUI
- Add new preference to enforce strict synth/FX timing. When enabled
synths and samples no longer trigger if it is too late - instead they
are silent and print a warning message. This behaviour ensures samples
or synths are never triggered out of time. - New load button which will load the contents of a file into the
current buffer. - The vertical bars which help visualise nesting now render in a
contiguous fashion over blank lines. C-k
now nukes over trailing whitespace.load_sample
now has sample autocompletion.- GUI now correctly reports if the host is a Raspberry Pi 3.
- New editor preference - Log Auto Scroll. When enabled will always
scroll log to the bottom after printing every new message. - Whitespace at top and bottom of buffer is no longer trimmed.
- Hitting
RETURN
now auto-indents the buffer - ensuring that the
cursor is moved to the correct indentation on the following line. - Added Chinese Simplified GUI translation.
- Log visibility now correctly matches GUI preference.
Documentation
- New tutorial section 3.7 on Sample Pack Filters.
- New appendix sections.
- Examples for
sample
fn have been completely rewritten and extended.
Improvements
scale
andchord
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
- The ring's
.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)
- Rings may now be added or subtracted from each other e.g.
(ring 1, 2, 3) + (ring 4) #=> (ring 1, 2, 3, 4)
- Adding or subtracting a number from a ring will create a new ring with
the number added or subtracted from each of the original ring's
elements:(ring 1, 2, 3) - 1 #=> (ring 0.0, 1.0, 2.0)
- Calling
(ring 1, 2, 3).take(0)
will now return an empty ring. density
now complains if it isn't passed a do/end block.- Improve error messages for
use/with_synth
when accidentally passed opts.
Bugfixes
- On OS X only raise an error on boot if it's clear the sound card's in
and out rates are different. - Improve robustness of boot process on Windows.
- Rest notes are no longer printed if synth logging is disabled.
- No longer apply synth defaults to FX.
- You may now control opts that have no associated info (previously it
would raise a 'not modulatable' error). - Fix index lookup of Vectors.
- Fix
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).- Sliding between chords now works correctly
- Windows version will now boot mutiple networked machines logged in
with the same account.
Releases
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 |
Venster
Version 2.9 - 'Venster'
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!
Breaking Changes
- Rename fn
invert_chord
tochord_invert
- Sampler no longer mixes
rate:
andpitch_stretch:
opts. It's now
possible to set therate:
independent of thepitch:
modification
caused bypitch_stretch
.
New Fns
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 touse_transpose
but for whole octaves.with_octave
- similar towith_transpose
but for whole octaves.use_merged_sample_defaults
- similar touse_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 block
Synths & FX
- New FX
tanh
- for more distortion goodness. - New FX
gverb
- a different reverb FX to play with.
GUI
- Synths and samples now also log defaults set by
use_synth_defaults
and friends. - Opts are logged in the order they were defined with local opts first
followed by inherited opts. - BPM scaling is now accounted for in logging vals.
- Log metadata such as run number and time is now printed in a more
code-like way: as a hash of key value pairs. C-k
will now kill multiple lines if lines end with,
.- When saving a buffer a
.txt
extension is automatically added to the
file name if none specified. - Add Hungarian and Norwegian translations of GUI.
- Add Spanish translation of tutorial.
- Add title to main window - enables Sonic Pi to be selected in
screensharing app lists such as Google Hangouts and OBS. - Add autocompletion for tuning systems.
Documentation
- Add 8 complete MagPi magazine articles to the tutorial in appendix A.
- Add new example 'ambient experiment' by Darin Wilson.
- Add new example 'chord inversions' by Adrian Cheater.
- Change tutorial license to CC-BY-SA 4.0.
- Add instructions for compiling and building on Windows.
- Many, many minor tweaks and improvements.
Improvements
- Add
sync:
opt tolive_loop
andin_thread
. This now syncs the
live loop once on creation. Similar to thedelay:
opt. If both
sync:
anddelay:
are specified then the delay happens before the
sync. - The
synth
fn can now play chords with thenotes:
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
. - BPM scaling and other normalisation is now honoured when controlling nodes
- The
on:
opt is now honoured when playing chords. - Samplers sound signal now bypasses filter envelope when not used.
- It is now possible to use externally defined FX synths by passing a
string as the FX name:with_fx "my_shiny_effect"
. This needs to be
loaded manually viaload_synthdefs
. - OS X now supports rates other than 44.1k provided they are similar for
both audio in and out. - Run code in
~/.sonic-pi/init.rb
on launch if it exists. - If environment variable
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). - Default sound card selection is now honoured on Raspberry Pi - so you
may now use your IQaudIO hat (or similar) out of the box.
Bugfixes
- Fix number of synth validation errors.
- Fix sporadically failing boot issues on Windows
- Add auto-reboot functionality for audio server. This now detects
errors in the server (such as a killed or zombied process) and
automatically reboots it to enable Sonic Pi to continue without a full
restart. Reboots automatically reload all loaded samples and
synthdefs. sample_duration
now correctly takes account of TL defaults set by
use_sample_defaults
.- Sampler opts
pitch_stretch
,beat_stretch
andrpitch
can now be
used in TL defaults.
Releases
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 |
v2.8.0 - Karlsruhe
Version 2.8 - 'Karlsruhe'
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.
Breaking Changes
- Shortcuts for switching buffers have changed. They are now
M-{
and
M-}
for switching left and right respectively. sync
no longer inherits BPM by default. Set thebpm_sync:
opt to
true to enable BPM inheritance.- Random seed generation for new threads is now reset on calls to
use_random_seed
.
New Fns
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 toprint
but prints the inspected version of the argument.
GUI
- New translations for Polish, Japanese and French.
- Improve efficiency of logging panel.
M-RET
is now a duplicate shortcut for running the code.- Log title bar is now hidden in full-screen mode.
- Log - don't display └ or ├ if the line is blank, instead display │
- Add sample name autocompletion to more fns such as
sample_duration
.
Documentation
- New tutorial section on ring chains (chainable functions for modifying rings)
- Tilburg 2 example slightly tweaked for Raspberry Pi 1 compatibility.
- Many minor tweaks and improvements in all areas.
Synths & FX
- New FX - Band EQ for attenuating or boosting a specific frequency band.
- New synth - DPulse - a detuned pulse wave.
- Sampler now has a cutoff envelope which can be accessed via new opts
which mirror the standard envelope opts but with acutoff_
prefix
(such ascutoff_attack
,cutoff_decay_level
and friends). - Sampler now correctly handles samples with different sample rates.
- Bitcrusher FX now has an internal low pass filter modifiable via a new
cutoff
opt. - Panslicer now correctly honours min and max pan values.
- New default opt
on:
for bothsample
andsynth
. 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. - MIDI opts such as
cutoff:
can now accept note names such as:c4
. - FX learned the global
slide:
opt to match synths.
Improvements
- Massive performance improvements.
- Teach
play_pattern_timed
to handle rings. current_transpose
now returns 0 if there is no current
transposition.- BPM scaling is now honoured when controlling synths and FX
- All
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
andmc_message
now handle multiple message arguments
Bug Fixes
- Ensure
with_fx
doesn't swallow TL modifications such as
transposition, current synth etc. - Ensure
with_fx
doesn't affect random seed. - Improve reliability of boot process on Mac and Windows.
- The FX
pre_amp:
opt is no longer scaled w.r.t. the current BPM. - Fixed GUI side of update checking system.
Releases
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 |
Rerezzed
Version 2.7 - 'Rerezzed'
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!
Breaking Changes
- Complete rewrite of random number system. This means if you've been
combining calls touse_random_seed
with randomisation to create
predictable melodies/rhythms/timbral manipulations you will
unfortunately get different results inv2.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 viarand_back
. sync
now causes the BPM to be inherited from the thread calling the
matchingcue
. This may be disabled with the newbpm_sync:
opt.rrand
andrand
now return 0 if called with 0.invert_chord
now handles negative inversions in a more musically
appropriate manner..
New Fns
ratio_to_pitch
which provides the inverse ofpitch_to_ratio
midi_notes
- returns a ring of numbers (mapping the source
ring/array through the fnnote
).rand_back
- reverse the random stream and 'undo' calls torand
rand_skip
- skip forward through the random stream.rand_reset
- reset the random stream to the last seed.
GUI
- It is now possible to toggle the commenting of whole selections or
individual lines with the shortcutM-/
. - Added Icelandic translation.
Synths & FX
- All synths learned the
decay_level
opt to allow the sustain phase to
shift between two distinct values. The default value fordecay_level
is to mirrorsustain_level:
thus preserving current behaviour. play
andsynth
have now learned thepitch:
opt to match
sample
. This just increments or decrements the final note.sample
now correctly validates opts.sample
learned thepitch_stretch:
opt which combinesrate:
modification (similar tobeat_stretch:
withpitch:
. Attempts to
maintain the pitch whilst simultaneously changing the rate. The
underlying implementation is very basic and can easily destroy the
sound.sample
learned therpitch:
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, arpitch:
of 12 would double the rate.- The unit of the FX
:echo
'sdecay:
opt is now beats and the value
is scaled with the BPM.
Examples
- Most examples have been tweaked to sound good with the new random
generator. - Tilburg has been replaced with Tilburg 2. Play it and get your
Algorave on!
Improvements
- Auto-align code on Run.
live_loop
learned theseed:
opt which will set the new thread with
the specified seed prior to initial run.- Add check to ensure BPM is a positive value.
density
has now been taught to handle values between 0 and 1 which
will now stretch time for the specified block.- Errors now no longer print out crazy print version of context object
i.e. #SonicPiSpiderUser1:0x007fc82e1f79a0 - Both
in_thread
andlive_loop
have now learned thedelay:
opt
which will delay the initial execution by the specified number of
beats. - Buffer and thread name are now printed on error.
sample_duration
now understands all the opts that you can pass tosample
- It is now possible to do basic arithmetic on symbols representing
rests::r + 3
returns:r
(a rest plus any MIDI note shift is still
a rest).
Bug Fixes
- Fixed crash when synth args were specified as Rationals.
note_info
now correctly handles octaves.- Fix windows paste shortcut
C-v
. - Teach
invert_chord
how to properly handle out of range index ranges.
Releases
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 |
Algorave
Version 2.6 - 'Algorave'
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!
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
. 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
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 | 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 |
Craft
Version 2.5 - 'Craft'
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.
Breaking Changes
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.- The
flanger
FX now defaults the optional argstereo_invert_wave
to
1. - Renamed FX
ring
toring_mod
to reduce the potential for confusion
with thering
datastructure. Tab
now indents current line or selection rather than inserting a
useless tab character.
New
- Support for programming Minecraft Pi Edition.
sync
now accepts multiple cue ids and will sync on the first matching id.- New fn
pitch_ratio
for converting a midio note to a frequency
ratio. Useful for tuning samples. - New fn
line
for creating a line from start to finish with a specific
number of slices. - New fn
spark
for displaying lists of numbers in a fancy text-graph
(▁▃▅▇
) in the log. - On stop, amplitude of output slides down over 1s to silence for a
smoother transition. sample_duration
now scales result based on current BPM.range
now accepts optional args:inclusive:
andstep:
.
GUI
- German translation of GUI and tutorial. Simply open Sonic Pi with a
machine with a German localisation setting. - Display GUI fully maximised when opening for first ever time.
- Workpace indexing now starts at 0 to match standard programming indexes.
- New shortcuts -
M-<
andM->
for switching workspaces. - Many new Emacs-based code navigation and editing shortcuts. See
the shortcut cheatsheet in the built-in tutorial for more information. - Increase height of doc and error panes.
- Improve error pane colour scheme.
- Auto-align now trims whitespace from start and end of buffer.
- Add preference toggle to hide/show line numbers.
- Documentation now supports semantic formatting and highlighting.
- Docsystem tabs are now positioned at the bottom for better navigation.
- New preference to hide/show line numbers in editor.
Synths & FX
- New FX -
:pitch_shift
Bug Fixes
- Fix OSC lib to properly encode multibyte chars such as UTF8
- Fix sporadic issue on some platforms when trigging percussive sounds
within areverb
FX caused a serious audio overload. - Add missing fn metadata for
*_sample_bpm
- Fix synth metadata for FX
:bpf
. - Fix arg metadata for
use_sample_pack_as
- Rings now pretty print themselves as
(ring 1, 2, 3)
rather than[1, 2, 3]
. C-k
keyboard shortcut now copies text into the clipboard.- Scales and chords now return actual
ring
s rather thanring
-like
things. - Improve Ring Mod FX arguments
- Exceptions created within
with_fx
are now raised correctly.
Releases
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 |
Defrost
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
andnormaliser
FX. These
are disabled by default (i.e. won't affect sound of the sample) and
can by enabled via the newcutoff:
,res:
andnorm:
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 |
Bitcrush
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 acrossat
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
anduse_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
andtilburg
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 yield0.0
,1.0
and2.0
. - Synth, Sample and FX args now handle bools and nil correctly.
true
resolves to1.0
andfalse
,nil
resolve to0.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 snapperc_snap2
- another finger snapbd_ada
- a bass drumguit_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.2.0 - 'Slicer'
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 nestedwith_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 |
Firewall
- Windows version no longer needs special firewall exceptions to run
- Added license information to info window
- Minor grammar and spelling tweaks to tutorial
Full Changelog: v2.1.0...v2.1.1