【发布时间】:2014-11-02 08:50:22
【问题描述】:
我的目标是生成某个频率的音频,然后使用 FFT 的结果检查它的频率。
function speak() {
gb.src = gb.ctx.createOscillator();
gb.src.connect(gb.ctx.destination);
gb.src.start(gb.ctx.currentTime);
gb.src.frequency.value = 1000;
}
function listen() {
navigator.getUserMedia = (navigator.getUserMedia
|| navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);
navigator.getUserMedia({
audio : true,
video : false
}, function(stream) {
gb.stream = stream;
var input = gb.ctx.createMediaStreamSource(stream);
gb.analyser = gb.ctx.createAnalyser();
gb.analyser.fftSize = gb.FFT_SIZE;
input.connect(gb.analyser);
gb.freqs = new Uint8Array(gb.analyser.frequencyBinCount);
setInterval(detect, gb.BIT_RATE / 2);
}, function(err) {
console.log('The following gUM error occured: ' + err);
});
}
请参阅 http://codepen.io/Ovilia/full/hFtrA/ 的工作示例。您可能需要将麦克风放在扬声器附近才能看到效果。
问题是,当频率大于 15000(例如 16000)时,高频区域似乎不再有任何响应。
网络音频是否有频率限制,还是我的设备有限制?
我从getByteFrequencyData得到的每个元素的单位是什么?
【问题讨论】:
-
大多数消费级麦克风和扬声器的频率响应通常在 15 kHz 及以上时开始下降。
标签: javascript html audio fft web-audio-api