Sonic Pi v2.3 Release Notes

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