Skip to main content

  | मौसम…

411 समाचार
Public archive edition · Attributed source reporting with original dates · AI drafts are excluded

411 REFERENCE · Wikibooks

Designing Sound in SuperCollider/Alarms

Reference material by Wikibooks contributors. This retains its source identity and is not 411 news reporting.

Fig 27.2: Alarm with two alternating tones Note that we have separated this into multiple lines for clarity. Exercise: rewrite it as a single line - and use array expansion rather than writing "SinOsc" twice. ( Ndef(\alarm, { var tone1 = SinOsc.ar(600); var tone2 = SinOsc.ar(800); // We switch between the tones using LFPulse, but soften the crossfade with the low-pass: var control = LPF.kr(LFPulse.kr(2), 70); var out = SelectX.ar(control, [tone1, tone2]); Pan2.ar(out * 0.1) }).play ) Fig 27.3: Alarm with three alternating tones ( Ndef(\alarm, { var tone1 = SinOsc.ar(723); var tone2 = SinOsc.ar(932); var tone3 = SinOsc.ar(1012); // Stepper is perfect for stepping through the options: var control = LPF.kr(Stepper.kr(Impulse.kr(2), 0, 0, 2), 70); var out = SelectX.ar(control, [tone1, tone2, tone3]); Pan2.ar(out * 0.1) }).play ) Or we can write exactly the same thing a bit more generically using Demand units. The frequencies are simply given as an Array - change the values, or add new ones to the end: ( Ndef(\alarm, { var freq, out; freq = Duty.kr(0.5, 0, Dseq([723, 932, 1012], inf)); freq = LPF.kr(freq, 70); out = SinOsc.ar(freq); Pan2.ar(out * 0.1) }).play ) Fig 27.4: A choice of timbral settings This using .cos and .sin to perform waveshaping - move the mouse left and right to choose from our 4 timbral options. ( Ndef(\alarm, { var freq, out, operations; freq = Duty.kr(0.05, 0, Dseq([723, 932, 1012], inf)); freq = LPF.kr(freq, 70); out = SinOsc.ar(freq); operations = [out, (out * pi).sin, (out * pi).cos, ((out+0.25) * pi).cos]; out = Select.ar(MouseX.kr(0,4).poll, operations); Pan2.ar(out * 0.1) }).play ) Exercise: alter the "Duty" line so that you can have different durations for each of the notes.(Hint: you can use Dseq to specify times just as easily as to specify frequencies.) Fig 27.7: A multi-ringer This SynthDef is capable of a wide variety of sequences, as you'll see below: ( SynthDef(\dsaf_multialarm, { |length=0.05, freqs=#[600,800,600,800], timbre=1, repeats=inf| var freq, out, operations; freq = Duty.ar(length, 0, Dseq(freqs, repeats), doneAction: 2); freq = LPF.ar(freq, 70); out = LeakDC.ar(SinOsc.ar(freq)); out = Select.ar(timbre, [out, (out * pi).sin, (out * pi).cos, ((out+0.25) * pi).cos]); // NOTE: when writing a synthdef always remember the Out ugen! // (Handy shortcuts like Ndef and {}.play often add Out on your behalf) Out.ar(0, Pan2.ar(out * 0.1)) }).add; ) ...and now we can play it, using the sequences used in the book: // happy blips Synth(\dsaf_multialarm, [\length, 0.1, \freqs, [349, 0, 349, 0], \timbre, 1, \repeats, 1]); // affirmative Synth(\dsaf_multialarm, [\length, 0.1, \freqs, [238, 0, 317, 0], \timbre, 2, \repeats, 1]); // activate Synth(\dsaf_multialarm, [\length, 0.02, \freqs, [300, 125, 0, 0], \timbre, 2, \repeats, 10]); // invaders? Synth(\dsaf_multialarm, [\length, 0.03, \freqs, [360, 238, 174, 158], \timbre, 1]); // information Synth(\dsaf_multialarm, [\length, 0.05, \freqs, [2000, 2010, 2000, 2010], \timbre, 1, \repeats, 6]); // message alert Synth(\dsaf_multialarm, [\length, 0.15, \freqs, [619, 571, 365, 206], \timbre, 1, \repeats, 2]); // finished Synth(\dsaf_multialarm, [\length, 0.15, \freqs, [365, 571, 619, 206], \timbre, 3, \repeats, 1]); // error code Synth(\dsaf_multialarm, [\length, 0.01, \freqs, [1000, 0, 1000, 0], \timbre, 3, \repeats, 30]); // wronnnnnnnnnng ( Pbind( \instrument, \dsaf_multialarm, \freqs, [[1000, 476, 159, 0]], \timbre, 2, \repeats, 25, \length, Pseq([0.003, 0.005]), \dur, 0.5 ).play ) Exercise: work out why some of these multialarm examples don't quite sound like Andy's audio examples! ;)