【问题标题】:JS Audio - audioBuffer getChannelData to frequencyJS Audio - audioBuffer getChannelData 到频率
【发布时间】:2017-07-30 07:13:52
【问题描述】:
bsd
我正在尝试实现音高检测,此外还在学习一些基本的音频物理,实际上我对此很陌生,只是想了解整个事情是如何工作的......
我的问题是,audioBuffer 到底是什么,来自 getChannelData 的数据与频率有何关系。以及如何从audioBuffer中提取频率数据...
另外,如果有人能解释一下采样率等,那也太好了。
谢谢!
【问题讨论】:
标签:
javascript
audio
html5-audio
getusermedia
audiobuffer
【解决方案1】:
AudioBuffer 仅表示音频资源,即音频样本和关于音频的附加信息。
例如,您可以访问AudioBuffer 对象的sampleRate 属性以了解AudioBuffer 中包含的音频的sampling frequency。
使用getChannelData 将返回一组音频样本。在采样率给定的每个间隔,您都有一个与样本的音频幅度相对应的数字(对于 IEEE 32 浮点音频样本,包含在 -1.0 和 +1.0 之间)。因此,这个样本数组包含时域音频信息。
要进行音高检测,您需要在频域中工作,从时域到频域,您需要使用Fourier transform。如果您想了解底层 DSP(数字信号处理)原理,可以使用纯 FFT 库(例如,node-fft)。如果你只是想实现音高检测,使用像pitch.js这样的交钥匙解决方案会更容易。