This plugin allows remote controlling Sonic Pi via Atom.
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!)
Key Binding | Action | Description |
---|---|---|
alt-r |
sonic-pi-autocomplete:play-file |
Sends content of the currently open buffer to Sonic Pi for instant playback |
ctrl-alt-r |
sonic-pi-autocomplete:play-selection |
Sends currently selected text to Sonic Pi for instant playback |
alt-shift-r |
sonic-pi-autocomplete:stop |
Tells Sonic Pi to stop all playback |
unbinded | sonic-pi-autocomplete:play-huge-file |
Plays a large file that can't be sent over a single OSC message |
Try typing
play :c4,
Now type adsr
, and hit enter to use the snippet.
Use tab
and 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 amp_slide
and amp_slide_shape
parameters
Key in the value for amp_slide
, and amp_slide_shape
... oh wait... was 1 a linear slide or a stepped slide?
Who cares! Just type in linear
, 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
Add x =
in front to get something like this: x = play :c4, attack: 0.01, ....
Try typing 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 :beep
.
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.
#@
control
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 control
play
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 tb303
synth.
adsr
asr
pluck
sustain: 0
, releaseslide
_slide
setting for the parameter just before the cursorslidecurve
slide
but also adds a _slide_curve
parameterslideshape
slide
but also adds a _slide_shape
parameterstep
linear
sine
welch
squared
cubed
saw
pulse
triangle
sine
control
fn, with_fx
)Play Huge File
, but you can create your own keybindings.live_loop
s to amp_slide: 1, amp_slide_curve: 3
note_slide_shape
, because memorizing 0: Step, 1: Linear, etc...
won't cutcue
and sync
Good catch. Let us know what about this package looks wrong to you, and we'll investigate right away.