2
我刚开始查看Web Audio API,并试图对音频进行视觉同步。当音频中的音量(节拍?)增加时,我想在屏幕上闪烁白色。我到目前为止所做的:使用Web Audio API的音频反应式视觉
var mp3 = "08 - No More Sorrow.mp3";
var context = new AudioContext();
var request = new XMLHttpRequest();
request.open('GET', mp3, true);
request.responseType = "arraybuffer";
request.onload = function() {
context.decodeAudioData(request.response, function (buffer) {
var sourceBuffer = context.createBufferSource();
sourceBuffer.buffer = buffer;
sourceBuffer.connect(context.destination);
sourceBuffer.start(context.currentTime);
});
};
request.send();
......这只是使用Web Audio API播放音频。不知道下一步该怎么做。我已经选择了Beat Detection Using JavaScript and the Web Audio API和Making Audio Reactive Visuals页面,但是无法真正理解任何内容。
如果我告诉你什么是我想要做的,而不使用网络音频API,它会是这样的:
Array.prototype.pushIfExists = function(item) {
if (item) {
this.push(item);
}
}
function random(min, max) {
var min = min || 0;
var max = max || 100;
var num = Math.floor(Math.random() * max);
while (num < min) {
num = Math.floor(Math.random() * max);
}
return num;
}
function avarage(array) {
var sum = 0;
var avarage = 0;
for (var i = 0; i < array.length; i++) {
sum += array[i];
}
avarage = sum/array.length;
return avarage;
}
var beats = [];
var delay = 500;
var delayIncrement = 200;
var threshold = 50;
var thresholdLimit = 100;
var beatAvarageRange = 5;
var flashDuration = 100;
for (var i = 0; i < 100; i++) {
beats.push(random(0, thresholdLimit));
}
for (var i = 0; i < beats.length; i++) {
(function(i) {
setTimeout(function() {
var recentBeats = [];
for (var j = 1; j < beatAvarageRange + 1; j++) {
recentBeats.pushIfExists(beats[i - j]);
}
threshold = avarage(recentBeats);
if (beats[i] > threshold) {
document.body.style.backgroundColor = "white";
setTimeout(function() {
document.body.style.backgroundColor = "black";
}, flashDuration);
}
}, delay);
delay += delayIncrement;
})(i);
}
body {
background-color: black;
}
我喜欢在SO这里看到关于Web Audio API的好问题,并且只是在给你一些(小)帮助以获得答案的精神下进行一些副本编辑。 (和upvoted。) – sideshowbarker
@sideshowbarker看来这是我解决自己的问题之一。很高兴看到没有人回答。 – akinuri