gpt4 book ai didi

javascript - 过滤网络音频

转载 作者:行者123 更新时间:2023-11-30 00:10:36 29 4
gpt4 key购买 nike

我正在通过 Tone.js 的播放器播放 mp3 文件,我只需要播放该文件中特定范围的频率。该范围由用户动态选择,用户应该能够在不停止播放的情况下更改它。同时 Tone.js 播放合成音符。目前,我正在使用带通/低通/高通滤波器,但据我了解,它们并没有严格削减选定范围之外的频率,而是平滑地降低了它们的增益,如下图中的红线所示在一些教程中找到了。这是我的一段代码:

function applyLimits([min,max]) {
minFreq = min > max ? Number.NEGATIVE_INFINITY : min;
maxFreq = min > max ? Number.POSITIVE_INFINITY : max;
if (mp3Player) {
if (minFreq == Number.NEGATIVE_INFINITY && maxFreq == Number.POSITIVE_INFINITY) {
if (mp3Filter) {
mp3Filter.dispose();
mp3Player.toMaster();
mp3Filter = null;
}
}
else {
if (!mp3Filter) {
mp3Player.disconnect();
mp3Filter = new Tone.Filter();
mp3Player.chain(mp3Filter, Tone.Master);
}
if (minFreq != Number.NEGATIVE_INFINITY && maxFreq != Number.POSITIVE_INFINITY) {
let centerFrequency = Math.sqrt(maxFreq * minFreq);
let q = centerFrequency / (maxFreq - minFreq);
mp3Filter.set({frequency: centerFrequency, Q: q, type: 'bandpass', rolloff: -96});
}
else if (minFreq != Number.NEGATIVE_INFINITY) {
mp3Filter.set({frequency: minFreq, Q: 1, type: 'highpass', rolloff: -96});
}
else {
mp3Filter.set({frequency: maxFreq, Q: 1, type: 'lowpass', rolloff: -96});
}
}
}
}

我需要的是用绿线表示的。查看 Tone.js 源代码,我可以看到 Tone.js 使用级联双二阶滤波器。但即使使用 10 个级联滤波器也会产生曲线,而不是精确切割。此外,根据该图,范围内的频率也会受到影响。

The graph

如何使用 Tone.js、Web Audio API 或任何其他 js 库实现这种效果?

最佳答案

绿线,如果它真的是垂直的,在物理上是不可实现的。你能做的最好的事情就是将一堆双二阶(小心地)级联在一起以产生近似值。或者使用 IIRFilterNode(如果可用)进行过滤。

关于javascript - 过滤网络音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36662709/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com