我正在研究html5音频API。
我注意到分析模块在处理高频时遇到了问题。
好像里面有一个构建过滤器。
例如,如果我发出20Khz音并绘制getFloatFrequencyData
的结果,我会看到以下频谱:
但是,如果我使用Audacity,相同的信号如下所示:(注意峰值@ 20khz)
我可以禁用分析模型的内置过滤器吗? 附:根据上下文画布,采样率足够高,所以我不会怀疑别名问题。
答案 0 :(得分:2)
@cwilso有它,输入默认过滤,你需要将一个正确形成的约束对象传递给getUserMedia。格式有点繁琐,但考虑到它的职权范围,这是不可避免的。规范还没有完全由每个人实现,每个浏览器都有自己的一组前缀未记录的预处理器。这就是我用来获得最新音频的消息(2016年10月中旬)。这个列表可能也不完整 - 到目前为止我只看过FF和Ch。有没有其他人?
let constraints = {
audio: {
optional: [
{echoCancellation: false},
{mozAutoGainControl: false},
{mozNoiseSuppression: false},
{googEchoCancellation: false},
{googAutoGainControl: false},
{googNoiseSuppression: false},
{googHighpassFilter: false}
]
}
};
let mediaInput = navigator.mediaDevices.getUserMedia( constraints );
答案 1 :(得分:0)
听起来你正在使用音频(例如麦克风)输入?如果是这样,请确保关闭回声消除 - 将约束对象传递给getUserMedia,并将回声消除设置为false,la https://github.com/cwilso/Audio-Input-Effects/blob/master/js/effects.js#L52-L57和https://github.com/cwilso/Audio-Input-Effects/blob/master/js/effects.js#L160-L163。否则,内置处理将剥离一些东西,包括高频。
答案 2 :(得分:0)
2018年更新:Chrome不再需要goog前缀,高通滤波器也消失了(我已通过支持DC输入的声卡对此进行了验证):
let constraints = {
audio: {
echoCancellation: false,
autoGainControl: false,
noiseSuppression: false
}
};
let mediaInput = navigator.mediaDevices.getUserMedia( constraints );