// ===================================================================== // SuperCollider Workspace // ===================================================================== //////////////////////////////////////////////////////////////////////// ( ~tempo = 2; ~tempoSynth = { |tempo=2| Impulse.ar(tempo)*1 }.play; ~myClock = TempoBusClock.new(~tempoSynth); SynthDef(\beep, { Out.ar(0, Impulse.ar(\freq.kr(440), mul:\amp.kr)!2*EnvGate()) }).add; { Ndef(\a).proxyspace.clock = ~myClock; Ndef(\a).proxyspace.quant = 1; Ndef(\b).proxyspace.clock = ~myClock; Ndef(\b).proxyspace.quant = 1; Ndef(\a, Pbind(\instrument, \beep, \dur, 1, \freq, ~tempo, \amp, 1)); Ndef(\b, {Impulse.ar(~tempo, 1, mul:1)!2}); Ndef(\a).play; Ndef(\b).play; }.fork(~myClock); ) s.record /* https://scsynth.org/t/how-to-sync-between-clock-and-running-synth/2979 The code above causes Pulses and notes from Pbind to go out of sync, which to me is unexpected. I read Scheduling and Server timing doc, but I’m not sure I understand how to force clock on the lang be in sync with an oscilation on the server. Could anyone provide any insight? Is this drift inherent in the architecture and needs to be overcome in a different way - Synth on server controling events in the lang? I might getting some things completely wrong. */ ( { WhiteNoise.ar([1,1]) //* LFPulse.ar(LFTri.ar(0.1).range(10,1),1, width:0.1) * EnvGen.ar( envelope: Env.adsr([0.001,0.0001], 0.2, MouseX.kr(0,01), 0.1), gate: LFPulse.ar(LFTri.ar(0.1).range(10,1), width:0.1) ) }.play //}.plot(1) ) s.scope ([ Env.adsr(0.00001, 0.2, 0.5, 0.2),Env.adsr(0.001, 0.2, 0.5, 0.2)]).plot 50.do({"whatever you want to do, you can do, but ".post;}) s.meter s.plotTree ////////////////////////////////////////////////////////////////////////////////////////////// // lcm and gcd code tennis // https://www.listarc.bham.ac.uk/lists/sc-users/msg68907.html ~clklcm = TempoClock.new(1); Ndef(\lcmnoise).play(~clklcm) Ndef(\lcmnoise).fadeTime = 10; ( Ndef(\lcmnoise, { var snd, revchain; snd = [ tanh(lcm(SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),SinOsc.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001), tanh(lcm(Saw.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1),LFCub.ar( LFNoise0.kr(LFNoise0.kr(1/10).exprange(0.1,1)).exprange(1,15000) ).range(-100,100).round(1))*0.0001) ] ; snd = BHiPass.ar(snd, 180); snd = snd.softclip * 0.8; snd = Splay.ar(snd, spread:1); revchain = snd * Lag.ar( LFPulse.ar( LFNoise0.ar(1).exprange(0.01,2), width:0.001), 0.1) * LFNoise1.ar(1).range(10,10000); revchain = Greyhole.ar( in: revchain, delayTime: LFNoise1.ar(1).range(0.0001,0.2), damp: 0.5, size: LFNoise1.ar(0.1).exprange(0.0001,5), feedback: 0.95); revchain = LeakDC.ar(revchain); revchain = Limiter.ar(revchain) * LFNoise1.ar([1,1]).range(0,0.9); snd = snd * LFNoise0.ar([0.9,0.8]).range(0,2); snd = snd + revchain; snd = LPF.ar(snd.softclip, LFNoise1.ar(0.1).exprange(100,20000)) * 1; }) ) {tanh(lcm(SinOsc.ar(LFNoise0.ar(5).range(0.5,1000)).range(MouseX.kr(-100,100),100).round(1),SinOsc.ar.range(MouseY.kr(-100,100),100).round(1))*0.001)!2}.scope {tanh(gcd(SinOsc.ar(MouseX.kr(1,1000,'exponential')).range(1,100).round(1),SinOsc.ar(MouseY.kr(1,1000,'exponential')).range(1,100).round(1))*0.1)!2}.scope {tanh(lcm(Saw.ar(MouseX.kr(1,1000,'exponential')).range(-100,100).round(1),LFCub.ar(MouseY.kr(1,1000,'exponential')).range(-100,100).round(1))*0.001) * [1,0]}.scope /////////////////////////////////////////////////////////////// // https://www.listarc.bham.ac.uk/lists/sc-users/msg68916.html ( { var a = LFSaw.ar(2) * 100; var b = LFSaw.ar(1.2) * 100; SinOsc.ar(lcm(a, b).poll + 300) * 0.1 }.play; ) ( { var a = LFSaw.ar(0.02) * 300 + 1; var b = LFSaw.ar(1.24 + [0, 0.1]) * 200 + 1; SinOsc.ar(gcd(a, b).poll * 30 + 300) * 0.1 }.play; ) ( { var a = LFSaw.ar(0.012) * 300 + 1; var b = LFSaw.ar(0.24 + [0, 0.01]) * 200 + 1; SinOsc.ar(gcd(a, b).poll * 30 + 300) * 0.1 }.play; ) ( { var a = LFSaw.kr(0.002) * 300 + 1; var b = LFSaw.kr(0.024 + [0, 0.001]) * 200 + 1; var freq = ((gcd(a, b) * 43 + 300).cpsmidi - 0).midicps; var snd; freq = [freq, freq/2]; snd = SinOsc.ar(freq) * 0.1; //snd = snd + Saw.ar(freq*1.01, mul:0.08) * 1; //snd = RLPF.ar(snd, LFNoise1.ar(0.7).exprange(500, 20000), rq:0.7); //snd = snd + CombN.ar(snd, 1, LFNoise1.ar(1).range(0.01,0.7), 7, mul:0.4); snd = snd * 2; }.play; ) /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// ( x = play { var t = PulseCount.ar(Impulse.ar(3000)) % 200; var u = PulseCount.ar(Impulse.ar(3000)) % 201; var sig = gcd(t, u + [30, 20]); Limiter.ar(LPF.ar(HPF.ar(sig, 50), 5000), 0.3) } ) x.release ( x = play { var t = PulseCount.ar(Impulse.ar(3000)) % 100; var u = PulseCount.ar(Impulse.ar(2995)) % 100; var sig = gcd(t, u + [30, 25]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) x.release ( x = play { var a = TDuty.ar(Dseq((1..20), inf) + 41 * SampleDur.ir); var b = TDuty.ar(Dseq((21..1), inf) + 40 * SampleDur.ir); var t = PulseCount.ar(a) % 20; var u = PulseCount.ar(b) % 20; var sig = gcd(t, u + [3, 7]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) x.release ( x = play { var a = TDuty.ar(Dseq((1..10), inf) + 102 * SampleDur.ir); var b = TDuty.ar(Dseq((1..10), inf) + 101 * SampleDur.ir); var c = TDuty.ar(Dseq((1..10), inf) + 100 * SampleDur.ir); var t = PulseCount.ar(a) % 100; var u = PulseCount.ar(b) % 101; var v = PulseCount.ar(c) % 102; var sig = gcd(gcd(t + [0, 0], u + [0, 10]), v + [0, 20]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) x.release ( x = play { var a = TDuty.ar(Dseq((1..10), inf) + 52 * SampleDur.ir); var b = TDuty.ar(Dseq((1..11), inf) + 51 * SampleDur.ir); var c = TDuty.ar(Dseq((1..12), inf) + 50 * SampleDur.ir); var t = PulseCount.ar(a) % 200; var u = PulseCount.ar(b) % 201; var v = PulseCount.ar(c) % 202; var sig = gcd(gcd(t + [0, 0], u + [0, 1]), v + [0, 2]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) x.release ( x = play { var a = TDuty.ar(Dseq((1..10), inf) + 152 * SampleDur.ir); var b = TDuty.ar(Dseq((1..11), inf) + 151 * SampleDur.ir); var c = TDuty.ar(Dseq((1..12), inf) + 150 * SampleDur.ir); var t = PulseCount.ar(a) % 100; var u = PulseCount.ar(b) % 101; var v = PulseCount.ar(c) % 102; var sig = gcd(gcd(t + [0, 0], u + [0, 1]), v + [0, 2]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) x.release //////////////////////////////////// //distorted amplitude mod (a is unipolar) ( x = scope { var a = SinOsc.ar(MouseX.kr(1,300)).range(1,100); var b = SinOsc.ar(MouseY.kr(1,300))*40; var sig = gcd(a,b)%100; //distort var sig2 = lcm(a,b)%300; //distort tanh([sig*sig2,a*b]*0.0001) } ) ( x = play { var c = TDuty.ar(Dseq((51..77), inf) * XLine.kr(100,0.1,100)* SampleDur.ir); var t = PulseCount.ar(Impulse.ar(10)) % 300; var u = PulseCount.ar(c) % 101; var sig = gcd(t, u + [0, 2]); var sig2 = gcd(lcm(t+ [0, 2], u ),sig); sig = SinOsc.ar(sig * 443 + 600) * 0.1; sig2 = SinOsc.ar(sig2 * 43 + 61) * 0.4; Limiter.ar(LPF.ar(HPF.ar(sig, 50)+sig2, 5000), 0.3) } ) ( x = play { var c = TDuty.ar(Dseq((1..99), inf) * XLine.kr(10,0.01,100)* SampleDur.ir); var t = PulseCount.ar(Impulse.ar(MouseX.kr(1,100))) % 500; var u = PulseCount.ar(c) % 501; var sig = gcd(t, u + [0, 2]); var sig2 = gcd(lcm(t+ [1, 3], u ),sig); sig = SinOsc.ar(sig * 443 + 400) * 0.1; sig2 = SinOsc.ar(sig2 * 53 + MouseY.kr(1,99)) * 0.3; Limiter.ar(LPF.ar(HPF.ar(sig, 50)+sig2, 5000), 0.3) } ) ( x.release; x = play { var a = TDuty.ar(Dseq((1..20), inf) + 41 * SampleDur.ir); var b = TDuty.ar(Dseq((21..1), inf) + 40 * SampleDur.ir); var t = PulseCount.ar(a) % 20; var u = PulseCount.ar(b) % 20; var daniel_sig = gcd(t, u + [3, 7]); var julian_a = LFSaw.kr(0.002) * 300 + 1; var julian_b = LFSaw.kr(0.024 + [0, 0.001]) * 200 + 1; var julian_sig = SinOsc.ar(gcd(julian_a, julian_b).poll * 43 + 300) * 0.1; var sig = Mix.new([daniel_sig * 0.125, julian_sig * 7, SinOsc.ar(daniel_sig * 17 + 200) ]); Limiter.ar(LPF.ar(HPF.ar(sig, 20), 10000), 0.3) } ) /////////////////////////////////////////////////////////////////// ( x = play { var a = TDuty.ar(Dseq((0..3), inf) + 50 * SampleDur.ir); var b = TDuty.ar(Dseq((3..0), inf) + 50.1 * SampleDur.ir); var mod = 50; var t = PulseCount.ar(a) % mod; var u = PulseCount.ar(b) % mod; var n, j, d, e; d = LocalIn.ar(2); n = gcd(t, u + [0, 1]); e = n.linexp(0, mod, 70, 10000); j = SinOsc.ar(e, 0, d / 2); LocalOut.ar(e.reverse); Out.ar(0, Limiter.ar(LPF.ar(HPF.ar(j, 20), 10000), 0.3) * EnvGate()) } ) x.release // gcd feedback used for FM ( x = play { var a = TDuty.ar(Dseq((0..3), inf) + 50 * SampleDur.ir); var b = TDuty.ar(Dseq((3..0), inf) + 50.1 * SampleDur.ir); var mod = 50; var t = PulseCount.ar(a) % mod; var u = PulseCount.ar(b) % mod; var n, j, d, e; d = LocalIn.ar(2); n = gcd(t, u + [0, 1]); e = n.linexp(0, mod, 70, 10000); j = SinOsc.ar(e * (d / 10 + 1)); LocalOut.ar(d.reverse); Out.ar(0, Limiter.ar(LPF.ar(HPF.ar(j, 20), 10000), 0.3) * EnvGate()) } ) x.release // GCD SINMODFEED ///////////////////////////////////////////////////////////////////////////////////////// // feedback of modulated SinOsc ( x = play { var a = TDuty.ar(Dseq((0..3), inf) + 5 * SampleDur.ir); var b = TDuty.ar(Dseq((3..0), inf) + 5.01 * SampleDur.ir); var mod = 50; var t = PulseCount.ar(a) % mod; var u = PulseCount.ar(b) % mod; var n, j, d, e, c; d = LocalIn.ar(2); n = gcd(t, u + [0, 1]); e = n.linexp(0, mod, 70, 10000); j = SinOsc.ar(e); LocalOut.ar(j * d); c = CombC.ar(j, 1, [0.009,0.007,0.008, 0.006] * LFNoise1.ar([0.01,0.01]).range(1.3,0.7), 30, mul:0.05); j = j * LFNoise1.ar(0.2).range(0,0.5) + Splay.ar(c); j = Greyhole.ar(j, damp:0.5, diff:0.5 size:4); j = Limiter.ar(LPF.ar(HPF.ar(j, 20), LFNoise1.kr(0.1).exprange(200,18000)), 0.5, 0.2); j = j * LFPulse.ar([2.2,4.4]*2, width:LFNoise1.ar(0.2).range(0.8,0.95)).range(LFNoise1.ar(0.1).range(0,1),1); j = j + LFPulse.ar([2.2,4.4], mul: LFNoise1.kr(1/10).range(0,0.5) * Line.kr(0,1,10)); j = LeakDC.ar(j); Out.ar(0, j * EnvGate()) } ) x.release ( x = play { var a = TDuty.ar(Dseq((0..3), inf) + 50 * SampleDur.ir); var b = TDuty.ar(Dseq((4..0), inf) + 50 * SampleDur.ir); var mod = 100; var t = PulseCount.ar(a) % mod; var u = PulseCount.ar(b) % mod; var n, j, d, e; d = LocalIn.ar(2); n = gcd(t, u + [0, 1]); e = n.linexp(0, mod, 70, 10000); j = SinOsc.ar(e); LocalOut.ar(j * d); Out.ar(0, Limiter.ar(LPF.ar(HPF.ar(j, 20), 10000), 0.3) * EnvGate()) } ) x.release ////////////////////////////// ( { var freq,time, ex, delay, filter, local; freq = 440; time = freq.reciprocal; ex = WhiteNoise.ar * (Pulse.ar(1,time).abs); local = LocalIn.ar(1); filter = ex+local; delay = DelayN.ar(filter, time, time-ControlDur.ir); //LocalOut.ar(LeakDC.ar(gcd((delay*120),120)/Line.kr(120,12000,10))*0.9); LocalOut.ar(LeakDC.ar(gcd((delay*120),120)/MouseX.kr(120,12000))*MouseY.kr(0.1,0.97,'exponential')); Out.ar(0, tanh(filter)) }.scope ) ////////////////////////////////////////////////////////////////// ( { var factors = [2,3,5,7]; var fprod = factors.product; var m; var input = SinOscFB.ar(440,MouseX.kr(0,2pi)); //PMOsc //either 1 or factor randomly over time m = factors.collect{|f| (ToggleFF.ar(Dust.ar(LFNoise0.kr(f).range(0.2,2))) * (f-1)) + 1 }; (gcd(input * fprod,m.product)/(fprod))!2; }.scope ) ( { var factorfunc; var f1 = [2,3,5]; //[2,2,2,3,5,7]; var f2 = [2,3,5]; //[2,2,3,7]; var scaling = gcd(f1.product,f2.product); var gcdoutput; factorfunc = {|factors| var fprod = factors.product; //either 1 or factor randomly over time factors.collect{|f| (ToggleFF.ar(Dust.ar(LFNoise0.kr(f).range(1,MouseX.kr(16,440,'exponential')))) * (f-1)) + 1 }; }; gcdoutput = gcd(factorfunc.(f1).product,factorfunc.(f2).product)/scaling; (SinOsc.ar(MouseX.kr(20,2000)*gcdoutput)*0.3)!2 }.scope ) ( { var factorfunc; var f1 = [2,2,2,3,5,7,11]; var f2 = [2,2,3,7,13]; var scaling = gcd(f1.product,f2.product); var scaling2 = lcm(f1.product,f2.product); var gcdoutput,lcmoutput; factorfunc = {|factors| var fprod = factors.product; //either 1 or factor randomly over time factors.collect{|f| (ToggleFF.ar(Dust.ar(LFNoise0.kr(f).range(1,MouseY.kr(1,440,'exponential')))) * (f-1)) + 1 }; }; f1 = factorfunc.(f1).product; f2 = factorfunc.(f2).product; gcdoutput = gcd(f1,f2)/scaling; lcmoutput = lcm(f1,f2)/scaling2; //SinOsc.ar(MouseX.kr(20,[2000,4001])*[gcdoutput,lcmoutput])*0.3 //SinOsc.ar(([gcdoutput,lcmoutput]*2000) + (gcdoutput*MouseX.kr(0.1,10,'exponential')*SinOsc.ar(lcmoutput)))*0.3 PMOsc.ar(lcmoutput*[5000,5001],gcdoutput*[700,703],MouseX.kr(1,10)) }.scope ) ///////////////////////////////////// ( Ndef(\x, { var in, d, a; var z1, z2, m, freq, freq2; m = MouseX.kr(-10, 10); in = LFSaw.kr(0.062).range(-10, 10) ; in = in + (MouseY.kr(0, 5) * (0..8)); d = in.frac; a = 0.8 - d.moddif(0.5, 1); z1 = gcd(in, m) + d; z2 = lcm(in, m) + d; freq = 120 * ([z1, z2].flop.abs + 1); (SinOsc.ar(freq) * AmpComp.kr(freq) * a).mean * 0.6 }).play )