我从未理解过音频数据是如何存储的。但我想知道一种找到PCM数据音高的方法。比如说,我录制了钢琴上敲击单个键的声音,在给定采样率下以16位单声道PCM格式进行录制。那么我该如何找到这段音频的频率(以赫兹为单位)?对我来说,获取平均频率的简单代码就足够了,但更详细的解释如何更好地理解这种格式会更理想。
谢谢!
谢谢!
PCM音频并不是以一系列音高的形式存储的。要计算出这个,您需要进行快速傅里叶变换(FFT)。请参见https://stackoverflow.com/search?q=pitch+detection,已经有数十篇关于此的帖子。
想象一下音频波形。PCM编码只是按每秒特定次数对该波形进行采样,并使用特定数量的采样位数。
图片来自http://en.wikipedia.org/wiki/Pulse-code_modulation
44.1kHz的16位单声道PCM意味着每秒将存储44100次表示在采样时刻波形的16位值(2字节)。 44.1kHz足够快,可以存储接近22kHz的频率(请参见奈奎斯特频率)。
FFT将这些样本从时间域转换为频率域。也就是说,您可以找到特定时间段内所有频率的级别。查看的频段越多,计算强度就越大。