Sonic Pi is fun to play with, but its built-in editor relies a lot on
ctrl-i to get real stuff done.
With this plugin, you can livecode without having to worry about nitty things like which parameters can you slide or control, or what are the currently available parameters for all synths, fx, samples, and functions, or whether 1 stood for linear slide_shape for one parameter, or saw mod_wave for another.
Start up Sonic Pi or the Sonic Pi server (over UDP), and get live coding in Atom!
Note that the support for executing huge files with the
Play Huge File command,
will only work with Sonic Pi 2.11 excluding commit https://github.com/samaaron/sonic-pi/commit/16a55e7657ea5d457c70e7594adcdcbb2b9e1ccd
(meaning you'll have to compile it from source though, good luck!)
||Sends content of the currently open buffer to Sonic Pi for instant playback|
||Sends currently selected text to Sonic Pi for instant playback|
||Tells Sonic Pi to stop all playback|
||Plays a large file that can't be sent over a single OSC message|
adsr, and hit enter to use the snippet.
shift-tab to jump between the attack, decay, sustain and release values. Change them if you want!
Now key in
amp: 0.5, or some other slidable parameter. You'll know if it's slidable if
there's something on the right saying 'Slide Syn. Pms.' (Sliding Synth Parameters).
Now key in
slideshape, hit enter, and bam! There will now be
Key in the value for
amp_slide_shape... oh wait... was 1 a linear slide or a stepped slide?
Who cares! Just type in
cubic, or whatever you want, hit enter and you should have something like this:
play :c4, attack: 0.01, decay: 0, sustain: 1, release: 0.1, amp: 0.5, amp_slide: 1, amp_slide_shape: 1
x = in front to get something like this:
x = play :c4, attack: 0.01, ....
control on a new line, you should be able to see
x as a
:beep synth instance. Now you'll be able to see what parameters you can control or slide for
This works for all synths, the most recent
use_synth available in the current scope will determine the synth played. This also works if you use
x = synth :tb303, :c4, attack: 0.01 or whatever function that returns a synth instance.
Sometimes, you may want to use
control a lot, and you end up defining a helper function like this:
def c(*args)control *argsend
Now if you want to alias this shortened
c function with the original
control function, you can create a comment on a new line that goes like this:
#@ control c
And now whenever you are in scope of the alias comment, you will be able to get autocompletion for
c just as you would in
Here's another aliasing directive that can come in handy:
#@ play <alias_name> <optional: parameter index to start suggestions> <optional: synth_used>
This will let you control at which parameter of the aliased
alias_name function will autocompletions for the synth parameters appear for either the current synth, (or
synth_used, if provided). It doesn't have to be for the
play command, as demonstrated in the example below:
drone = synth :dark_ambience, :c2, sustain: 56, release: 8#@ play ctldrone 0 :dark_ambiencedefine :ctldrone do |*args|control drone, *argsendsleep 4ctldrone note: :eb2
It's also possible to alias identifiers with instances of synths by using
#@ :synthname identifier
Here's an example:
define :rndplay doreturn play rand * 120end
In the same way, if you have a function that changes synths, but the
use_synth is not in scope, you can use
#$ :synthname like this:
define :waw douse_synth :tb303endwaw#$ :tb303play :c4, cutoff: 80, cutoff_min: 60
to get autocompletions for the
sustain: 0, release
_slidesetting for the parameter just before the cursor
slidebut also adds a
slidebut also adds a
Play Huge File, but you can create your own keybindings.
amp_slide: 1, amp_slide_curve: 3
note_slide_shape, because memorizing
0: Step, 1: Linear, etc...won't cut
Good catch. Let us know what about this package looks wrong to you, and we'll investigate right away.