Chapter 5 - Recreating the beep Synth
A simple beep synthesiser - third version in SuperCollider
This synth accepts the following parameters:
notea midi notenote_slidethe time in beats it takes for a note to change when controlling a synth (0 means a step change)note_slide_shapethe shape of the transition of the notenote_slide_curvefor custom shapes whether the transition curves up or downpana location to pan to (Sonic Pi should ensure it is between -1.0 and 1.0)pan_slide- likenote_slidebut forpanpan_slide_shape- likenote_slide_shapebut forpanpan_slide_curve- likenote_slide_curvebut forpanampa volumeamp_slide- likenote_slidebut forampamp_slide_shape- likenote_slide_shapebut forampamp_slide_curve- likenote_slide_curvebut forampsustainthe time the sound lasts - WATCH OUT! - see the 2nd synth for why this isn’tduration
(SynthDef('sonic-pi-mythirdsynth', {| out_bus = 0,
note = 52.0, note_slide = 0, note_slide_shape = 1, note_slide_curve = 0,
pan = 0, pan_slide = 0, pan_slide_shape = 1, pan_slide_curve = 0,
amp = 1, amp_slide = 0, amp_slide_shape = 1, amp_slide_curve = 0,
sustain = 1|
define the variables that we will use later
var snd, env, freq, slid_note, slid_amp, slid_pan;
set up an envelope that last as long as the sustain value
env = Line.kr(0.1, 0.0, sustain, doneAction: 2);
slide the note
slid_note = VarLag.kr(note, note_slide, note_slide_curve, note_slide_shape);
slid_amp = VarLag.kr(amp, amp_slide, amp_slide_curve, amp_slide_shape);
slid_pan = VarLag.kr(pan, pan_slide, pan_slide_curve, pan_slide_shape);
convert the midi note to frequency
freq = midicps(slid_note);
get a beep from the Sin Oscillator and then place it in the Pan and set the volume
snd = Pan2.ar(SinOsc.ar(freq, 0, env), pos: slid_pan, level: slid_amp);
play
Out.ar(out_bus, snd)
}).writeDefFile("/home/gordon/.synthdefs"))
