Sonic Pi v2.1 Release Notes

  • Friday 21st November, 2014 (view commits)

    ๐Ÿš€ The focus of release is very much on technical improvements, efficiency ๐Ÿ’… and general polish.

    The most obvious and exciting change is the introduction of the live_loop which will change the way you work with Sonic Pi. For more information on live_loop take a look at the new section in the tutorial. Another very exciting development is that v2.1 marks the ๐Ÿ official support for Windows thanks to the excellent work by Jeremy ๐Ÿš€ Weatherford. Finally, this release is also the first release where Sonic Pi has a Core Team of developers. Please give a warm welcome to Xavier Riley, Jeremy Weatherford and Joseph Wilk.

    API Changes

    • ๐Ÿ†• New fn live_loop - A loop for live coding
    • ๐Ÿ†• New fn inc - increment
    • ๐Ÿ†• New fn dec - decrement
    • ๐Ÿ†• New fn quantise - quantise a value to resolution
    • ๐Ÿ†• New fn factor? - Factor test
    • ๐Ÿ†• New fn at - Run a block at the given times
    • ๐Ÿ†• New fn degree - for resolving a note in a scale by degree such as :i, :iv
    • ๐Ÿ†• New fn chord_degree - Construct chords based on scale degrees
    • New TL fn use_sample_bpm - for changing the BPM based on a sample's duration
    • ๐Ÿ†• New fn rest? - Determine if note or args is a rest
    • ๐Ÿ†• New fn vt - Get virtual time
    • New fn set_control_delta! - Set control delta globally
    • ๐Ÿ”€ wait now handles both sleep and sync functionality
    • ๐Ÿ‘ Allow first arg to play to be a proc or lambda. In which case simple call it and use the result as the note
    • Teach play to accept a single map argument (in which case it will extract :note key out if it exists.
    • Fns play and synth now treat 'notes' nil, :r and :rest as rests and don't trigger any synths.

    GUI Modifications

    • โšก๏ธ Updated and improved tutorial
    • Much improved autocompletion
    • โž• Add HPF, LPF, mono forcer and stereo swapping preferences to new studio section for use when performing with Sonic Pi through an external PA.
    • ๐Ÿ’… Shortcuts overhauled - now supports basic Emacs-style Ctrl-* navigation.
    • Shortcuts Alt-[ and Alt-] now cycle through workspaces
    • Shortcuts now work when toolbar is hidden
    • Font sizes for individual workspaces are now stored between sessions
    • ๐Ÿ Ctl-Mouse-wheel zooms font on Windows
    • ๐Ÿ”— Links are now clickable (opening external browser)
    • ๐Ÿ“š Entries in docsystem's synth arg table are now clickable and will take focus down to arg documentation
    • Stop users accidentally clearing entire workspace if they type quickly after hitting run
    • Hitting F1 or C-i over a function name now opens up the doc system at the relevant place

    ๐Ÿ› Bugs/Improvements

    • Reworked examples.
    • Much improved efficiency in many areas - especially for Raspberry Pi.
    • Avoid occasional clicking sound when stopping runs
    • Note Cb is now correctly resolved to be a semitone lower than C
    • Non RP systems now start with more audio busses (1024)
    • ๐Ÿ‘€ Array#sample and Array#shuffle are now correctly seeded with thread local random generator
    • ๐ŸŒฒ Log files are now placed into ~/.sonic-pi/log
    • Chords and scales now wrap around when accessed from indexes outside of their range.
    • rand_i and rrand_i now correctly return integers rather than floats
    • rrand arguments now correctly handle a range of 0 (i.e. min == max)
    • Line offset in error messages is now correct
    • ๐Ÿ When saving files on Windows, CRLF line endings are used
    • Stop users defining functions with same name as core API fns

    Synths, Samples & FX

    • ๐Ÿ†• New samples (bass drums, snares and loops)
    • ๐Ÿ‘ Allow mod_range: opt to have negative values (for oscillating with lower notes)
    • Change slide mechanism to default to linear sliding with support for changing the curve type. All modifiable args now have corresponding _slide_shape and _slide_curve args.
    • ๐Ÿ‘Œ Improve TB303 synth - now supports separate cutoff ADSR envelopes. New opts:
      • cutoff_attack:,
      • cutoff_sustain:,
      • cutoff_decay:,
      • cutoff_release:,
      • cutoff_min_slide:,
      • cutoff_attack_level:,
      • cutoff_sustain_level:,
      • cutoff_env_curve: