Submit
Browse
Anonymous
Login
RSS
SuperCollider Code
Fork Code: How to tempo-sync LFOs in Patterns across multiple instances of a Synth
name
code content
SynthDef(\temposync, { | gate=1 tempo=1 tbeat=0 amp=0.5 pan=0 out=0 | var env, mult, sel, tmult, output; env = Env.asr(0.05, 1, 0.05).kr(2, gate); mult = 1; sel = MouseY.kr(6, 0).round; tmult = tempo*mult; output = Select.ar(sel, [ Impulse.ar(tmult, (tbeat*mult)%1), SinOsc.ar(tmult, (tbeat*mult*2pi)%2pi), LFTri.ar(tmult, (tbeat*mult*4)%4), // 2 LFSaw.ar(tmult, (tbeat*mult*2)%2), Saw.ar(tmult), // 4. LFPulse.ar(tmult, (tbeat*mult)%1)*2-1, Pulse.ar(tmult), // 6. ]); // NOTE: Saw and Pulse are not syncable because they have no phase inputs... output = LPF.ar(BrownNoise.ar, output.exprange(20,20000)); Out.ar(out, Pan2.ar(output, pan, env * amp)); }).add; Pdef(\lfo_demo, Pbind(\instrument, \temposync, \dur, Pwhite(0.1, 1.0, inf), \legato, 1, \tbeat, Pfunc({thisThread.clock.beats}), \tempo, Pfunc({thisThread.clock.tempo}), ));
code description
This code shows you how to tempo-sync the various oscillator types in SuperCollider. When you play the pattern, you should be able to hear that the output will sound fairly consistent, even though the pattern's \dur is totally random. That is because the \tbeat and \tempo parameters are provided to the Synth via the pattern. It is possible to calculate what the starting phase of the oscillator should be no matter when the synth is scheduled to start if you provide these parameters and use the math examples in the SynthDef. The modulo (%) operation is required because otherwise, high values of \tbeat will cause the oscillators to take a while to actually start.
use markdown for formating
category tags
comma separated, i.g. "wild, siren" (do not enter default SC class names, please)
ancestor(s)
comma separated identificators, i.g. "1-C,1-1,1-4M,1-x"
Private?
the code will be accessible by direct url and not visible in public activity
signup to submit public code without captcha
comment of change