There is a newer version of the record available.

Published November 3, 2016 | Version v2.11.0

samaaron/sonic-pi: Version 2.11.0 - 'Time Warp'

Description

Version 2.11 - Time Warp'

3rd Nov, 2016 (view commits)

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 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.
  • 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 fn reboot is still supported and may still be triggered manually if required.
  • Calls to 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.
  • 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 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*other
  • set_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 (unlike mix: 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 the amp: opt of the last triggered synth to 3. However, control foo, amp: 3 will still specifically control synth foo.
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. The slice: opt also works with pick 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. 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.
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's onset: and slice: 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'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.
  • Limit :piano synth to notes less than 231 as higher values crash the audio server.

Files

samaaron/sonic-pi-v2.11.0.zip

Files (84.1 MB)

Name Size Download all
md5:7e92e1779ac65ac3fbca20b6e5057691
84.1 MB Preview Download

Additional details

Related works