Sonic Pi v2.11.0 Release Notes

Release Date: 2018-02-21 // about 6 years ago
  • 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
      0๏ธโƒฃ 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
      0๏ธโƒฃ 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
      0๏ธโƒฃ 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).
    • 0๏ธโƒฃ 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
      0๏ธโƒฃ 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
      0๏ธโƒฃ 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.
    • 0๏ธโƒฃ 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
      0๏ธโƒฃ 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.

    ๐Ÿš€ Releases

    Mac
    ๐Ÿš€ Link
    Size 61M
    MD5 7306829cb4594ee39001a6cedb0390b3
    SHA256 f1d260bf40fe0ad29c7b119d36cac6dca8ebe234fcbb48711466ae32f6bd0d71
    ๐Ÿ Windows Portable
    ๐Ÿš€ Link
    Size 92M
    MD5 ebb3c7f3db51bb7dea370a4f6fc4b1b2
    SHA256 fe89f1eadceb1a79c0db9e0777d20005d045875ccca027e888fc73c88f38285f
    ๐Ÿ Windows
    ๐Ÿš€ Link
    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