从PCM数据中获取音频信息

时间:2011-04-04 02:26:36

标签: c# audio frequency pcm

我从未理解音频数据的存储方式。但是,我想知道一种找到PCM数据间距的方法。比方说,例如,我以给定的采样率以16位单声道PCM格式录制了一个钢琴上的单个键。我怎么能找到音频的频率,以赫兹为单位?获得平均频率的简单代码对我有用,但更详细地解释如何更好地理解格式将是理想的。

谢谢!

1 个答案:

答案 0 :(得分:5)

PCM音频不会存储为一系列音高。要想出这一点,您需要快速傅立叶变换或FFT。请参阅https://stackoverflow.com/search?q=pitch+detection,已有10篇关于此事的帖子。

想一想音频波形。 PCM编码只是每秒对波进行一定次数的采样,并且每个采样使用特定的比特数。

Waveform

来自http://en.wikipedia.org/wiki/Pulse-code_modulation的图片

44.1kHz的16位单声道PCM意味着每秒44100次,将存储16位值(2个字节),表示采样时的特定时间的波形。 44.1kHz的速度足以存储接近22kHz的频率(见Nyquist Frequency)。

FFT将这些样本从时域转换到频域。也就是说,您可以找到特定时间段内所有频率的等级。您看到的频段越多,计算密集程度越高。