Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions Goose.sc
Original file line number Diff line number Diff line change
@@ -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;
)
)
Loading