{
   "description" : "A \"computer babble\" sound and a FM Synthesizer for computer noises. Based on pure data code from the book \"Designing Sound\" by Andy Farnell.",
   "ancestor_list" : [],
   "name" : "R2D2",
   "author" : "DSastre",
   "code" : "//****************************************\r\n// Fig 57.3: Babbling R2D2 computer noises\r\n\r\n// \"[...] it might not even make any good noises for a while, \r\n// but sometimes it makes great computer babble sounds\". (Andy Farnell)\r\n\r\n(\r\nw = {   |period=0|\r\n        var change, rate, sig, carrierFreq, cfRamp, carrierLvl, clRamp, \r\n        modulatorRatio, mrRamp, modulatorIndex, miRamp, outputAmplitude, oaRamp;\r\n \r\n        period = period * 600 + 100;\r\n \r\n        // Calculation of a recursive working metronome (Impulse.kr) that generates its \r\n        // changing frequency out of its own impulses.\r\n        change = Impulse.kr(LocalIn.kr(1,10));\r\n        rate = CoinGate.kr(1/3, change);\r\n        rate = (TChoose.kr(rate, period/((0..1) + 1))/1000).reciprocal; \r\n        LocalOut.kr(rate);\r\n \r\n        # carrierFreq, cfRamp = TIRand.kr(0, [1000, 1], change);\r\n        carrierFreq = Ramp.kr( carrierFreq / 1000, (cfRamp * period) / 1000 ) * 0.6;\r\n \r\n        # carrierLvl, clRamp = TIRand.kr(0, [9000, 1], CoinGate.kr(1/3, change));\r\n        carrierLvl = Ramp.kr( carrierLvl, (clRamp * period) / 1000) + 100;\r\n \r\n        # modulatorRatio, mrRamp = TIRand.kr([800,1], CoinGate.kr(1/4, change));\r\n        modulatorRatio = Ramp.kr(modulatorRatio, (mrRamp * period) / 1000) + 20;\r\n \r\n        # modulatorIndex, miRamp = TIRand.kr(0, [100, 1], CoinGate.kr(1/4, change));\r\n        modulatorIndex = Ramp.kr(modulatorIndex / 200, (miRamp * period) / 1000) + 0.2;\r\n \r\n        # outputAmplitude, oaRamp = TIRand.kr(0!2, 1!2, CoinGate.kr(1/2, change));\r\n        outputAmplitude = Ramp.kr(outputAmplitude, (oaRamp * period + 3) / 1000);\r\n \r\n        // jointed FM Synthesizer \r\n        sig = LFSaw.ar(carrierFreq, 1, 0.5, 0.5) * carrierLvl;\r\n        sig = sig + SinOsc.ar(carrierFreq * modulatorRatio) * modulatorIndex;\r\n        sig = cos(sig * 2pi) * outputAmplitude;\r\n \r\n        // One pole filters:\r\n        sig = OnePole.ar(sig, exp(-2pi * (10000 * SampleDur.ir)));\r\n        sig = OnePole.ar(sig, exp(-2pi * (10000 * SampleDur.ir)));\r\n        sig = (sig - OnePole.ar(sig, exp(-2pi * (100 * SampleDur.ir))));\r\n        sig = (sig - OnePole.ar(sig, exp(-2pi * (100 * SampleDur.ir))));\r\n        sig = sig!2 * 0.06;     \r\n}.play;\r\n)\r\n \r\n// period controls the talk-speed. range: 0-1. 0 matches to fast, 1 to slow:\r\nw.set(\\period, 1);\r\nw.set(\\period, 0);\r\nw.set(\\period, 0.5);\r\nw.set(\\period, 0.7);\r\nw.set(\\period, 0.3);\r\n \r\n// To stop:\r\nw.free;\r\n\r\n\r\n\r\n//*********************************************\r\n// Fig 57.2: FM synthesiser for computer noises\r\n\r\n(\r\nSynthDef(\\fmSynth, { |carrierFreq=100, carrierLvl=0.5, modulatorRatio=5, modulatorIndex=1.5, outputAmp=0.2, sig, out=0|\r\n \r\n        // the simple FM core\r\n        sig = LFSaw.ar(carrierFreq, 1, 0.5, 0.5) * carrierLvl;\r\n        sig = sig + SinOsc.ar(carrierFreq * modulatorRatio) * modulatorIndex;\r\n        sig = cos( sig * 2pi) * outputAmp * 0.06;\r\n        Out.ar(out, sig);\r\n},1!5).add;\r\n)\r\n \r\n// At first start the synth:\r\ng = Synth(\\fmSynth);\r\n \r\n// Play with the parameters:\r\ng.set(\\carrierFreq, 800);\r\ng.set(\\carrierFreq, 50);\r\ng.set(\\carrierFreq, 100, \\modulatorRatio, 5, \\modulatorIndex, 0.5);\r\ng.set(\\carrierFreq, 40, \\modulatorRatio, 7, \\modulatorIndex, 1.5);\r\ng.set(\\carrierFreq, 955, \\carrierLvl, 0.4, \\modulatorRatio, 3, \\modulatorIndex, 4);\r\n// ... etc.\r\n \r\n// To stop:\r\ng.free;\r\n\r\n// code also available here: \r\n// http://en.wikibooks.org/wiki/Designing_Sound_in_SuperCollider/R2D2",
   "id" : "1-4QH",
   "is_private" : null,
   "labels" : [
      "scifi",
      "star wars",
      "fm",
      "r2d2"
   ]
}
