All Versions
24
Latest Version
Avg Release Cycle
4 days
Latest Release
-

Changelog History
Page 2

  • v2.11.0 Changes

    February 21, 2018

    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
  • v2.10.0 Changes

    February 21, 2018

    Friday 15th April, 2016
    (view commits)

    "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 and with_sample_pack_as have been removed.
    • A synth opt value of nil now no longer resolves to 0.0. Instead it
      0๏ธโƒฃ 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.
    • โฑ 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 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.

    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.
    • 0๏ธโƒฃ :tanh FX is now more crunchy by default.
    • :compressor and :krush FX now correctly honour the mix: 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: and lpf: opts. Any cutoff: opts are
      automatically switched to lpf: and any errors will be reported with
      an lpf: 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 a hpf_ and lpf_ 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 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
    • 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.
    • 0๏ธโƒฃ 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
    Size 59M
    MD5 db2888bbcc5fb5406ec9c54f74fbb049
    SHA256 4539cbd70f1e0d347c27231f741a245551c0d50f10e987761b9b7567ba0d82fe
    Raspberry Pi (Jessie)
    ๐Ÿš€ Link
    Size 48M
    MD5 3eebecf9363dfa8df6599cab6d98da55
    SHA256 7ac3d97a288ea670d3ad8a683b60009fa5737faa59f924cc5f8b462797982e63
    ๐Ÿ Windows Portable
    ๐Ÿš€ Link
    Size 51M
    MD5 fbf67315b0d99e9523d7b06bfca5a680
    SHA256 e08f3ec43cdc879175dca1682d0e33b933daf4975b189ffe2e468785206c9d43
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 73M
    MD5 3368579b82c6ebfbe5995d2c9b22acfe
    SHA256 b79e7c20a20cc83aa752a12c2b5b7ab497c9dc4c3db3024ddce0b5ac73328e99
  • v2.9.0 Changes

    February 21, 2018

    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 to chord_invert
    • Sampler no longer mixes rate: and pitch_stretch: opts. It's now
      possible to set the rate: independent of the pitch: modification
      caused by pitch_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 synths
    • 0๏ธโƒฃ reset_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 samples
    • ๐Ÿ”€ with_merged_sample_defaults - similar to
      ๐Ÿ”€ with_merged_synth_defaults but for samples
    • use_cent_tuning - uniformly tune all subsequent notes in cents
    • with_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 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.
    • The 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.
    • 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 via load_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).
    • 0๏ธโƒฃ 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.
    • 0๏ธโƒฃ sample_duration now correctly takes account of TL defaults set by
      use_sample_defaults.
    • Sampler opts pitch_stretch, beat_stretch and rpitch can now be
      0๏ธโƒฃ used in TL defaults.

    ๐Ÿš€ Releases

    Mac
    ๐Ÿš€ Link
    Size 93M
    MD5 c74d393043e2acf97a03430e824ecbf2
    SHA256 c9dcf6a9d05204b8cb51244f51f083ed5e68d36428814c768af752f4ff3686fa
    Raspberry Pi (Jessie)
    ๐Ÿš€ Link
    Size 61M
    MD5 d14eaf49b9c38a4afe4906ebc1b413b2
    SHA256 6406a92be127c50d1592ee1a3408f73fff77aa6290764f27a7a6cf273fc10e2e
    Raspberry Pi (Wheezy)
    ๐Ÿš€ Link
    Size 61M
    MD5 d63390b4167cee8a87632fbd7e22f04b
    SHA256 5f98c803c432f684382b24e9105fc6dfdc7b46fd7b6fd74c4fc5ac5ae59c2a05
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 79M
    MD5 0311ce18b1ba35e343e1b4de533899c9
    SHA256 392fe3b1d5b8b651c86af2526e8add0b44e806207ee2ca90871fa6bbb7705b9c
  • v2.8.0 Changes

    February 21, 2018

    ๐Ÿš€ 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 the bpm_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 to print 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 a cutoff_ prefix
      (such as cutoff_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 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.
    • 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 and mc_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
    Size 61M
    MD5 2e6d91fd777900782492ca3b38245723
    SHA256 2e6cceb30d2c464e38810d2e8baadde315fc196aff75f0bb4d445c46a02a9a74
    Raspberry Pi (Jessie)
    ๐Ÿš€ Link
    Size 66M
    MD5 b47111d04dceb2997540f9e7764b9faa
    SHA256 58aa121a24c9d06b958199bdf62aab990c6f424c1e1651de453981788b18ec87
    Raspberry Pi (Wheezy)
    ๐Ÿš€ Link
    Size 66M
    MD5 e2f8de24afb93618ffb0f4ca787cfcc1
    SHA256 3f252a7714a5a71d8a03d3d115340c616fa6116acf29f1ae7000d27995333e0d
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 75M
    MD5 26dda533ab64bffa67049f4a50616027
    SHA256 6c427110af73ca396a274f5f5dbcab682634694daef9d7a99fca2fa22ab8c226
  • v2.7.0 Changes

    February 21, 2018

    ๐Ÿš€ 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 to 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..

    ๐Ÿ†• New Fns

    • 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.

    GUI

    • It is now possible to toggle the commenting of whole selections or
      individual lines with the shortcut M-/.
    • โž• Added Icelandic translation.

    Synths & FX

    • All synths learned the decay_level opt to allow the sustain phase to
      0๏ธโƒฃ 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.
    • The unit of the FX :echo's decay: 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 the seed: 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 and live_loop have now learned the delay: 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 to sample
    • 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
    Size 93M
    MD5 9bf75c57995c4d91a13cbeb6dbe5f4b8
    SHA256 8a02d029273a3906b4761e2d36d64d34f0c4aff4fed4253658f0dc1c0f219ff9
    Raspberry Pi (Jessie)
    ๐Ÿš€ Link
    Size 65M
    MD5 5b69a9fa9dc572e5b624ddc922ea30a6
    SHA256 742a66407b2150ef648e577f24c4790431cc7e12e373aa9fbf892253b22a536b
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 71M
    MD5 51c2626ce2dd886bebc270416396312d
    SHA256 8d3cd925f73d2a6159a757ea9c0d21697a16b3a921ed70b377317fae7e43e9f2
  • v2.6.0 Changes

    February 21, 2018

    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 rings within live_loops. 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 to kill for killing specific
      synths. In its place a new fn stop has been added to stop a given
      thread or live_loop.
    • 0๏ธโƒฃ 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.
    • The res: opt for rrand and rdist has been renamed to step: to
      avoid confusion with the resonance opt for cutoff filters.
    • Rename pitch_ratio to pitch_to_ratio to keep in line with other
      similar fns such as midi_to_hz.

    ๐Ÿ†• New Fns

    • ๐Ÿ†• New thread-local (i.e. live_loop local) counter system via fns tick
      and look.
    • ๐Ÿ†• New fn vector which creates a new kind of Array - an immutable
      0๏ธโƒฃ vector (SPVector) which is now the default base class for all rings.
    • New fns use_sample_defaults and with_sample_defaults which act
      similarly as their *_synth_defaults counterparts but for samples not
      synths.
    • New fns use_tuning and with_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 a pitches: opt for constraining the choice of filler notes.
    • New fns scale_names and chord_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 combining live_loops and
      tick to create sophisticated polyrhythms.
    • New fns use_cue_logging and with_cue_logging for enabling and
      ๐ŸŒฒ disabling the logging of cue 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 to slicer and wobble 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 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.
    • FXs slicer and wobble now have smoothing opts for even more
      control over the resulting wave form.
    • Teach 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.
    • Teach sample the opt pitch 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 opt num_beats: to indicate that a given
      sample consists of a specific number of beats.
    • Teach comment and uncomment 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 opt invert: as a shortcut to the new
      invert_chord fn.
    • Teach 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.
    • Teach chord the opt num_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
    Size 62M
    MD5 c6249a7b2e8de4f3eaf96fa0fb33bac4
    SHA256 15d8a495959e7e50554feec21b18b796065dd954072a7fdc279effc0caa863d2
    Raspberry Pi (Wheezy)
    ๐Ÿš€ Link
    Size 41M
    MD5 10092dc1edee2fd4d3624c1ab3326e83
    SHA256 261f14b654957b5e476ba04641287c517d9ab4c363b067d9bb137c6ecac21904
    ๐Ÿ Windows
    ๐Ÿš€ Link
    Size 71M
    MD5 548e5bad15ee48498778f671abbb7ee8
    SHA256 f5de95575fe190e12d180bf83ec26ea06a36e2b023a5d9aa0bf0467b8a2c139a
  • v2.5 Changes

    Monday 13th April, 2015 (view commits)

    ๐Ÿš€ 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

    • 0๏ธโƒฃ 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 arg stereo_invert_wave to 1.
    • ๐Ÿ“‡ Renamed FX 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.

    ๐Ÿ†• 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 midi 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: and step:.

    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.
    • Workspace indexing now starts at 0 to match standard programming indexes.
    • ๐Ÿ†• New shortcuts - M-< and M-> 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 a reverb 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 rings rather than ring-like things.
    • ๐Ÿ‘Œ Improve Ring Mod FX arguments
    • Exceptions created within with_fx are now raised correctly.
  • v2.4 Changes

    Wednesday 11th February, 2015 (view commits)

    ๐Ÿš€ 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 opt autocomplete list
    • ๐Ÿ‘ป Synths and FX now raise an exception if any of their non-modulatable opts 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 and normaliser FX. These are disabled by default (i.e. won't affect sound of the sample) and can by enabled via the new cutoff:, res: and norm: opts.

    ๐Ÿ› 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)
  • v2.3 Changes

    Wednesday 28th January, 2015 (view commits)

    ๐Ÿ’ฅ Breaking Changes

    • Playing chords with the fn chord now divides the amplitude 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 across at 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 and use_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 and tilburg

    ๐Ÿ‘Œ 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 yield 0.0, 1.0 and 2.0.
    • Synth, Sample and FX args now handle bools and nil correctly. true resolves to 1.0 and false, nil resolve to 0.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 snap
    • perc_snap2 - another finger snap
    • bd_ada - a bass drum
    • guit_em9 - a lovely guitar arpeggio 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.
  • v2.2 Changes

    Thursday 18th December, 2014 (view commits)

    ๐Ÿš€ 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

    Synths & 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 nested with_fx blocks
    • chord now returns a ring.