Time Warp
Version 2.11 - 'Time Warp'
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.
Breaking Changes
sample
now supports the optpath:
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 forsample
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.- Remove SuperCollider server automatic reboot system as it was badly
conflicting with machines that went into a 'sleep state' (for example,
when a laptop is closed). The fnreboot
is still supported and may
still be triggered manually if required. - Calls to
play
,synth
andsample
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
orrand_skip
to re-align the stream if necessary. - New threads now start with a fresh set of tick counters and a new
random stream. - It is no longer possible to use lambdas as values for synth
defaults. This is because synth defaults are shared across thread
boundaries and there is now a new safety system that only allows
immutable/serialisable values to be used. Unfortunately Ruby has no
notion of a 'pure' function and each lambda captures over its
environment and therefore may contain free variables pointing to
mutable data. A replacement system for describing a simple set of pure
functions is being designed.
New Fns
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 ofcurrent_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.
Synths & FX
- New synth
:tech_saws
- an implementation of a slightly modified
supersaw. - New synth
:sound_in
- reads audio from the sound card. - New synth
:sound_in_stereo
- reads audio from the sound card. - All FX now have a
pre_mix:
opt. This allows the audio flow to
completely bypass a given FX (unlikemix:
which passes the audio
through the FX but modifies the amplitude afterwards). - Teach
control
to manipulate the last triggered synth by default. For
example,control amp: 3
will set theamp:
opt of the last
triggered synth to 3. However,control foo, amp: 3
will still
specifically control synthfoo
.
Samples
- New opt
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. Theslice:
opt
also works withpick
for triggering random sample slices:sample :loop_amen, slice: pick
. - New opt
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. Unlikeslice:
,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.
GUI
- New scope visualisers.
- Allow files to be dragged from the OS into the text area. This inserts
the file/folder name as a string. - GUI now remembers the last directory you saved or opened a file
to/from as the default location for next time. - Swap align button for a scope button. Given that alignment now happens
automatically, a specific button seems somewhat redundant. Instead we
now have a button for toggling the visibility of the scope(s). - Loading multiple samples simultaneously is now much faster.
- Preferences have been slightly re-organised.
- Preferences now has a Master volume slider which controls Sonic Pi's
audio amplitude independently from the system volume. - All buttons now display status message + shortcut where available.
- Enable app transparency slider for Windows.
- Dark and light theme colours have been slightly polished and unified
to use the same logic. - On multi-screen systems, fullscreen mode now defaults to the app's
current screen.
Documentation
- Translations are now crowd-sourced. See:
https://hosted.weblate.org/projects/sonic-pi/
- Improve docstring for
live_loop
. - Add 3 new MagPi articles on amplitude modulation, performance and practice techniques.
- Add missing
pulse_width:
opt to flanger FX doc.
Improvements
- Improve log messages written to
~/.sonic-pi/log
- Improve booting on Mac in the case that the audio card's rate can't be
determined. - Massively improve boot stability on Windows.
- Improve error message for
play_chord
when notes isn't list like. - The number of samples that may be loaded at any one time has been
increased from 1000 to 4000. However, memory limitations still apply
(4000 1MB samples will require 4000MB of free system memory) pick
now returns a lambda if no list is given as the first argument
(which makes it useful for using with sample'sonset:
andslice:
opts.- Audio server is now paused when app is not in use - reducing CPU load
and battery consumption. - Error messages now report names matching the editor tabs such as
buffer 0
.
Bugfixes
- Decrease duration of
:loop_tabla
so that it correctly loops. (Length
reduced to 10.674 seconds). - Enforce UTF-8 encoding of all incoming text.
- Fix
:reverb
FX'smix:
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
'sskip:
opt now works as expected:pick(5).drop(1) == pick(5, skip: 1)
sample
now prints a 'no sample found' message with bothsample nil
andsample []
rather than incorrectly playing the first built-in wav file.- Limit
:piano
synth to notes less than 231 as higher values crash the audio server.
Releases
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 |