-
-
Save drart/9573502 to your computer and use it in GitHub Desktop.
An example of combining flocking.js with the compressor in Web Audio.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
flock.init(); | |
var as = flock.enviro.shared.audioStrategy; | |
// Create the new gain node and set some parameters on it. | |
var compressor = as.context.createDynamicsCompressor(); | |
// Connect the Flocking jsNode up to it. | |
as.jsNode.connect(compressor); | |
// Monkey patch the Audio Strategy's start and stop methods. | |
// Cut and pasted from flocking-webaudio.js | |
as.startGeneratingSamples = function () { | |
as.jsNode.onaudioprocess = as.writeSamples; // TODO: When Firefox ships, is this still necessary? | |
compressor.connect(as.context.destination); | |
// Work around a bug in iOS Safari where it now requires a noteOn() | |
// message to be invoked before sound will work at all. Just connecting a | |
// ScriptProcessorNode inside a user event handler isn't sufficient. | |
if (as.model.shouldInitIOS) { | |
var s = as.source; | |
(s.start || s.noteOn).call(as.source, 0); | |
(s.stop || s.noteOff).call(as.source, 0); | |
as.model.shouldInitIOS = false; | |
} | |
}; | |
// Cut and pasted from flocking-webaudio.js | |
as.stopGeneratingSamples = function () { | |
compressor.disconnect(0); | |
as.jsNode.onaudioprocess = undefined; | |
}; | |
var synth = flock.synth({ | |
synthDef: { | |
ugen: "flock.ugen.filter.biquad.lp", | |
freq: { | |
ugen: "flock.ugen.sin", | |
rate: "control", | |
freq: 5, | |
phase: 0, | |
mul: 3600, | |
add: 4000 | |
}, | |
source: { | |
ugen: "flock.ugen.impulse", | |
freq: 4, | |
mul: 10, | |
} | |
} | |
}); | |
var synth2 = flock.synth({ | |
synthDef: [ | |
{ | |
id: "leftSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: 741, | |
mul: 0.05 | |
}, | |
{ | |
id: "rightSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: 740, | |
mul: 0.05 | |
} | |
] | |
}); | |
var synth3 = flock.synth({ | |
synthDef: [ | |
{ | |
id: "leftSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: 440, | |
mul: 0.05 | |
}, | |
{ | |
id: "rightSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: { | |
ugen: "flock.ugen.sinOsc", | |
freq: 0.125, | |
mul: 2, | |
add: 442, | |
}, | |
mul: 0.05 | |
} | |
] | |
}); | |
var synth4 = flock.synth({ | |
synthDef: [ | |
{ | |
id: "leftSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: 43.125, | |
mul: 0.1 | |
}, | |
{ | |
id: "rightSine", | |
ugen: "flock.ugen.sinOsc", | |
freq: 44, | |
mul: 0.1 | |
} | |
] | |
}); | |
compressor.threshold = -9; | |
compressor.ratio = 5; | |
compressor.attack = 0; | |
compressor.release = 200; | |
flock.enviro.shared.play(); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment