我正在用javascript创建一个视听器,我无法找到限制我正在收听的频率的解决方案,从20Hz到8K Hz。这是代码示例: 这是初始化函数:
var _context = new AudioContext();
var _analyser = _context.createAnalyser();
_analyser.fftSize = 512;
var _frequencyData = new Uint8Array( _analyser.frequencyBinCount );
它是表示频率增益的条形图。但是,由于我的声音在8k Hz(我认为)之后没有发出任何声音,所以在图表的一半之后我什么都没有。
答案 0 :(得分:1)
如果我正确理解你的问题,你想要想象一个FFT,但你不希望它显示任何高于8kHz的频率。有两个选项:
1)您可以尝试将采样率设置为16kHz,这将为您提供8kHz的音频带宽。我不确定浏览器对此的支持。有关详细信息,请参阅https://github.com/WebAudio/web-audio-api/issues/300。
2)忽略超出所需频率的任何频率分档。通过将bin索引乘以采样率的1/2,可以找到bin起始频率。例如,对于48000处的512点FFT:
bin 0: 0 * 48000.0/2/512 = 0 Hz
bin 511: 511 * 48000.0/2/512 = 23953.125 Hz
使用小代数,您可以求解包含任何所需频率的bin#:
startFreq = binNum * sr/2/numBins
因此:
binNum = startFreq * numBins / (sr/2)
8000 * 512 / (48000/2) = 170.67
因此,在48kHz的512点FFT的_analyzer.getFloatFrequencyData()[170]
中将出现8kHz。
您可以从_context.sampleRate