我正在使用web音頻api和requestAnimationFrame來顯示來自麥克風的音頻輸入。我可以成功地將時域頻率數據可視化,但問題是,由於網絡音頻API會以秒爲單位計算時間,因此每隔一秒,我的界面就會根據輸入的內容而變化。實時處理web音頻api
所以我的問題是,我如何可視化聲音並使圖形保持在屏幕上,因此我可以在一定的時間內看到我的所有頻率數據(假設我說話,同時在畫布上可視化爲5秒)。
我使用下面的代碼(從花例子here):
MicrophoneSample.prototype.visualize = function() {
this.canvas.width = this.WIDTH;
this.canvas.height = this.HEIGHT;
var drawContext = this.canvas.getContext('2d');
var times = new Uint8Array(this.analyser.frequencyBinCount);
this.analyser.getByteTimeDomainData(times);
for (var i = 0; i < times.length; i++) {
var value = times[i];
var percent = value/256;
var height = this.HEIGHT * percent;
var offset = this.HEIGHT - height - 1;
var barWidth = this.WIDTH/times.length;
drawContext.fillStyle = 'purple';
drawContext.fillRect(i * barWidth, offset, 1, 1);
}
requestAnimFrame(this.visualize.bind(this));
}
Rq:調整畫布大小/獲取每次調用的上下文是一個矯枉過正的做法:做一次並存儲ctx。是否需要將聲源連接到分析儀以獲取頻率? – GameAlchemist 2013-03-28 09:52:45
輸入已連接到分析儀,我也可以獲取波形值可以提取或其他聲音屬性。主要問題是如何讓他們的居民可視化? – user2039789 2013-03-28 10:07:37