// title: Ship Horn // author: Nóslo Tredamus // description: // An imitation of a ship's horn. // code: ( // by Nóslo Tredamus // SynthDef(\Bocina3, { arg freq = 200, out = 0, amp = 1, gate = 1, bend = 21, relTime = 0.05, pitchRelTime = 0.015; var sig, env, mod, noise, pitchEnv; env = EnvGen.kr(Env.asr(0.1, 1, relTime), gate, doneAction: 0); pitchEnv = EnvGen.kr( Env( levels: [freq - bend, freq, freq, freq - bend], times: [0.3, 0, pitchRelTime], curve: [\sine, 0, -8], releaseNode: 2 ), gate ); mod = LFNoise1.kr(3).exprange(pitchEnv * 1.5, pitchEnv * 3); sig = Mix([ Saw.ar(pitchEnv, mul: amp), SinOsc.ar(pitchEnv * 2.098, mul: amp * 0.3), SinOsc.ar(pitchEnv * 2.3814, mul: amp * 0.3), SinOsc.ar(pitchEnv * 0.996, mul: amp * 0.3), Saw.ar(pitchEnv * 1.015, mul: amp * 0.8), Saw.ar(pitchEnv * 1.1907, mul: amp * 0.7), SinOsc.ar(pitchEnv * 1.503, mul: amp * 0.7), Saw.ar(pitchEnv * 0.498, mul: amp) ]); noise = PinkNoise.ar(amp * 0.9) * env; sig = sig + noise; sig = HPF.ar(sig, freq * 0.5); sig = LPF.ar(sig, mod); sig = sig * env; sig = GVerb.ar(sig, roomsize: 300, revtime: 0.6, drylevel: 1, mul: 0.9); sig = Limiter.ar(sig, 0.99); DetectSilence.ar(sig, amp: 0.001, time: 0.05, doneAction: 2); Out.ar(out, sig); }).add; ) ~claxon3 = Synth(\Bocina3); ~claxon3.set(\gate, 0); s.record; s.stopRecording;