diff --git a/Goose.sc b/Goose.sc new file mode 100644 index 00000000..0b05f9e0 --- /dev/null +++ b/Goose.sc @@ -0,0 +1,68 @@ +( +// Ensure the SuperCollider server is booted +s.boot; + +// Define the Goose class +Goose = { + var server = s; + + // honk method to synthesize the sound of 74 geese honking + honk: { + var honks = []; + 74.do({ + var freq = Rand(500, 600); // Random frequency for each goose + var amp = Rand(0.1, 0.3); // Random amplitude for each goose + var pan = Rand(-1.0, 1.0); // Random panning for each goose + var dur = Rand(0.5, 1.0); // Random duration for each goose honk + + var honk = { arg freq=500, amp=0.2, dur=0.75, pan=0; + var env = EnvGen.kr(Env.perc(0.01, 0.1), doneAction: 2); + SinOsc.ar(freq: freq, mul: env * amp).pan2(pan: pan) * env + }; + + honks = honks.add(honk.(freq, amp, dur, pan)); + }); + + Mix.ar(honks); + }; + + // honkify method to morph an audio input into a goose honk + honkify: { arg input; + + var pitch = input.pitch.kr(lag: 0.1); + var loudness = input.dbamp.kr(lag: 0.1); + + // Create a goose honk template with spectral modeling + var gooseHonkTemplate = { + var freq = pitch; + var env = EnvGen.kr(Env.perc(0.01, 0.1), doneAction: 2); + var noise = WhiteNoise.ar(env * 0.1); + var honk = SinOsc.ar(freq: freq, mul: env * 0.2); + + // Apply spectral modeling to input + var spectralModel = input.fft(1024); + var gooseSpectrum = SinOsc.ar(freq: freq, mul: 0.2); + gooseSpectrum = gooseSpectrum.dup.collect({ arg x; x * spectralModel }); + + Mix.ar([honk, noise, gooseSpectrum.sum]) * DBtoAmp.ar(loudness) + }; + + gooseHonkTemplate; + }; +}.(); + +// Example usage of the Goose class +( + // Synthesize 74 geese honking + var gooseHonk = { Goose.honk.() }; + gooseHonk.play; + + // Load an audio file and honkify it + var audioFile = Buffer.read(s, Platform.resourceDir ++ "/sounds/a11wlk01.wav"); + var honkifiedAudio = { arg bufnum; + var input = PlayBuf.ar(1, bufnum, rate: 1.0, loop: 0); + Goose.honkify.(input) + }; + honkifiedAudio.(audioFile).play; +) +) \ No newline at end of file