【发布时间】:2013-04-01 19:24:25
【问题描述】:
我正在使用网络音频 api 和 requestAnimationFrame 来可视化来自麦克风的音频输入。我可以成功地将时域频率数据可视化,但问题是由于网络音频 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。不需要将声源连接到分析仪来获取频率吗?
-
输入已经连接到分析仪,我也可以获取可以获取的波形值或其他声音属性。主要问题是如何使它们的可视化常驻?
标签: javascript html5-canvas html5-audio web-audio-api