【发布时间】:2020-11-03 21:30:50
【问题描述】:
我正在使用 Web Audio API 创建一个简单的频谱分析仪,使用计算机麦克风作为输入信号。我当前实现的基本功能工作正常,使用默认采样率(通常为 48KHz,但可能为 44.1KHz,具体取决于浏览器)。
对于某些应用,我想为 FFT 使用较低的采样率 (~8KHz)。
Web Audio API 似乎正在增加对自定义采样率的支持,目前仅在 FireFox (https://developer.mozilla.org/en-US/docs/Web/API/AudioContextOptions/sampleRate) 上可用。
向上下文构造函数添加采样率:
// create AudioContext object named 'audioCtx'
var audioCtx = new (AudioContext || webkitAudioContext)({sampleRate: 8000,});
console.log(audioCtx.sampleRate)
控制台输出“8000”(在 FireFox 中),所以它似乎一直在工作。
用户使用下拉菜单打开麦克风。这是为下拉服务提供服务的函数:
var microphone;
function getMicInputState()
{
let selectedValue = document.getElementById("micOffOn").value;
if (selectedValue === "on") {
navigator.mediaDevices.getUserMedia({audio: true})
.then(stream => {
microphone = audioCtx.createMediaStreamSource(stream);
microphone.connect(analyserNode);
})
.catch(err => { alert("Microphone is required."); });
} else {
microphone.disconnect();
}
}
在 FireFox 中,使用下拉菜单激活麦克风会显示一个请求访问麦克风的弹出窗口(如通常预期的那样)。点击允许麦克风后,控制台显示:
“当前不支持从具有不同采样率的 AudioContexts 连接 AudioNodes”。
频谱分析仪的显示屏保持空白。
任何想法如何克服这个错误?如果我们能解决这个问题,在用户声卡采样率未知时如何指定 sampleRate 的任何指导?
【问题讨论】:
-
我很好奇是什么原因。您可以简单地丢弃输出中高于 4 kHz 的所有内容。