// title: fm generated melody // author: grirgz // description: // I'm sure it's a well known technique, but I found this by accident and I'm amazed by the cool jazzy basslines generated from nowhere // code: // base concept { arg freq = 74; SinOsc.ar(freq * [1,1.000001] * ( 1 + ( SinOsc.ar(freq * LFPulse.kr(2,0, 1/8).range(0,1) * 1.20 )))) * 0.2; }.play { arg freq = 90; SinOsc.ar(freq * [1,1.000001] * ( 1 + ( SinOsc.ar(freq * LFPulse.kr(4,0, 0.5).range(0,1) * 1.50 )))) * 0.2; }.play { arg freq = 74; SinOsc.ar(freq * [1,1.000001] * ( 1 + ( SinOsc.ar(freq * LFPulse.kr(2,0, 1/8).range(0,1) * 1.50 )))) * 0.2; }.play { arg freq = 77; SinOsc.ar(freq * [1,1.000001] * ( 1 + ( SinOsc.ar(freq * LFPulse.kr(4,0, 1/3).range(0,1) * 1.60 )))) * 0.2; }.play // play with it ( Ndef(\eyes, { arg freq=483, pan=0, amp=0.1; var sig; var env1, env2, env3, env4, env5, env6, env7, env8; var fmfreq; env1 = Duty.kr(1/8, 0, Dseq([ 1,0,1,0, 1,0,0,0, 1,0,0,0, 1,0,0,0, ],inf)).lag(0.01); fmfreq = freq * ( 1 + ( SinOsc.ar(freq * 4 * env1) * 1 )); sig = LFSaw.ar(fmfreq * [1,1.0001]); sig = RLPF.ar(sig, freq*2 * [1,2 * SinOsc.kr(1/8).range(2,1),1], 0.2 * SinOsc.kr(1/4).range(2,1)); sig = Pan2.ar(sig, 0, amp).flop; }).play ); ( Ndef(\eyes, { arg freq=70, pan=0, amp=0.1; var sig; var env1, env2, env3, env4, env5, env6, env7, env8; var fmfreq; env1 = Duty.kr(1/8, 0, Dseq([ 1,0,0,0, 1,0,1,1, 1,0,0,1, 1,0,0,0, ],inf)).lag(0.01); fmfreq = freq * ( 1 + ( SinOsc.ar(freq * 1 * env1) * 2.2 )); sig = LFSaw.ar(fmfreq * [1,1.0001]); sig = RLPF.ar(sig, freq*2 * [1,2 * SinOsc.kr(1/8).range(2,1),1], 0.2 * SinOsc.kr(1/4).range(2,1)); sig = Pan2.ar(sig, 0, amp).flop; }).play ); ( Ndef(\eyes, { arg freq=80, pan=0, amp=0.1; var sig; var env1, env2, env3, env4, env5, env6, env7, env8; env1 = Duty.kr(1/8, 0, Dseq([ 1,0,0,0, 1,0,0,0, 0,0,0,0, 0,0,0,0, ],inf)).lag(0.31); sig = LFSaw.ar(freq * [1,1.001]); sig = 0; sig = sig + LFSaw.ar(freq * ( 1 + ( SinOsc.ar(freq*2 * 1.0 * env1) * 1.91 ))); //sig = sig + SinOsc.ar(freq * ( 1 + ( SinOsc.ar(freq*2 * 1.0 * LFPulse.kr(2)) * 0.91 ))); sig = RLPF.ar(sig, ( [4000, 4001, 8000 ] * ( [1.07,1,1.0001 * SinOsc.kr(1/8).range(0.1,4)] * 1.1 * Amplitude.kr(sig)**1.8 ) ).clip(5,18000)); sig = (sig * 40).tanh / 2; sig = Pan2.ar(sig, SinOsc.kr([1,2,3]/10).range(-1,1) * 0.3, amp).flop; }).play );