<bgsound src="missionimpossible.midi" loop="infinite" />
AudioContext
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var source = audioCtx.createMediaStreamSource(stream);
source.connect(analyser);
analyser.connect(distortion);
distortion.connect(biquadFilter);
biquadFilter.connect(convolver);
convolver.connect(gainNode);
gainNode.connect(audioCtx.destination);
// Get and decode asynchronously
var request = new XMLHttpRequest();
request.open('GET', url, true);
request.responseType = 'arraybuffer';
request.onload = () =>
context.decodeAudioData(request.response, playSound);
request.send();
function playSound(buffer) {
var source = context.createBufferSource();
source.buffer = buffer;
source.connect(context.destination);
source.start(0);
}
navigator.getUserMedia({ audio: true }, function (stream) {
var source = context.createMediaStreamSource(stream);
source.connect(context.destination);
}, console.error.bind(console));
var analyser = context.createAnalyser();
analyser.smoothingTimeConstant = SMOOTHING;
analyser.fftSize = FFT_SIZE;
var freqs = new Uint8Array(this.analyser.frequencyBinCount);
analyser.getByteFrequencyData(freqs);
navigator.getUserMedia({ audio: true }, function (stream) {
var source = context.createMediaStreamSource(stream);
source.connect(self.analyser);
requestAnimFrame(draw);
}, console.error.bind(console));
var maybeClap = filter(data, function (amp) {
return amp >= threshold;
}).length >= 20;
if (maybeClap) numberCrossingsInRow++;
if (!maybeClap && numberCrossingsInRow > 0 && numberCrossingsInRow < numTimes) {
numberCrossingsInRow = 0;
return fn.call(this, data);
}
if (!maybeClap && numberCrossingsInRow < numTimes) {
numberCrossingsInRow = 0;
}