Javascript 音频 - createAnalyser Select 频率范围
Javascript Audio - createAnalyser Select frequency range
我正在 javascript 中创建一个音频可视化器,但我找不到将我正在收听的频率从 20Hz 限制到 8K Hz 的解决方案。这是代码示例:
这是初始化函数:
var _context = new AudioContext();
var _analyser = _context.createAnalyser();
_analyser.fftSize = 512;
var _frequencyData = new Uint8Array( _analyser.frequencyBinCount );
这是一个表示频率增益的条形图。但是在图表的一半之后我什么都没有,因为我的声音在 8k Hz 之后没有发出任何声音(我认为)。
如果我对你的问题的理解正确,你希望可视化 FFT,但不希望它显示任何高于 8kHz 的频率。有 2 个选项:
1) 您可以尝试将采样率设置为 16kHz,这将为您提供 8kHz 的音频带宽。我不确定浏览器是否支持这个。详情请参阅 https://github.com/WebAudio/web-audio-api/issues/300。
2) 忽略超出所需频率的任何频率仓。可以通过将 bin 索引乘以 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
因此 8kHz 将出现在 48kHz 的 512 点 FFT 的 _analyzer.getFloatFrequencyData()[170]
中。
您可以根据 _context.sampleRate
确定采样率
我正在 javascript 中创建一个音频可视化器,但我找不到将我正在收听的频率从 20Hz 限制到 8K Hz 的解决方案。这是代码示例: 这是初始化函数:
var _context = new AudioContext();
var _analyser = _context.createAnalyser();
_analyser.fftSize = 512;
var _frequencyData = new Uint8Array( _analyser.frequencyBinCount );
这是一个表示频率增益的条形图。但是在图表的一半之后我什么都没有,因为我的声音在 8k Hz 之后没有发出任何声音(我认为)。
如果我对你的问题的理解正确,你希望可视化 FFT,但不希望它显示任何高于 8kHz 的频率。有 2 个选项:
1) 您可以尝试将采样率设置为 16kHz,这将为您提供 8kHz 的音频带宽。我不确定浏览器是否支持这个。详情请参阅 https://github.com/WebAudio/web-audio-api/issues/300。
2) 忽略超出所需频率的任何频率仓。可以通过将 bin 索引乘以 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
因此 8kHz 将出现在 48kHz 的 512 点 FFT 的 _analyzer.getFloatFrequencyData()[170]
中。
您可以根据 _context.sampleRate