使用PCM波数据进行可视化

时间:2011-11-04 17:05:29

标签: c# .net audio xna pcm

我有一个API,可以给我PCM波数据:

http://msdn.microsoft.com/en-us/library/ff966424.aspx

  

byte []缓冲区格式用作SoundEffect的参数   构造函数,Microphone.GetData方法和   DynamicSoundEffectInstance.SubmitBuffer方法是PCM波数据。   另外,PCM格式是交错的并且是小端的。

     

音频格式具有以下限制:

     
      
  • 音频通道可以是单声道(1)或立体声(2)。
  •   
  • PCM波形文件   每个样本必须有16位。
  •   
  • 采样率必须介于8,000 Hz之间   和48,000赫兹。
  •   
  • 立体声数据的交错是左声道   右通道。
  •   

我想根据这些数据进行可视化。

我想将声音音高分成3rds,并获得每个音量/音量。

所以,如果我低声说话,我会得到一个高值,然后是2个低值,如果我正常说话,我会得到一个低值,一个高值和一个低值,如果我说话高声音我得到2个低值和高值。

我怎样才能做到这一点?我从来没有尝试任何处理声音的事情,所以我处于1级,不知道从哪里开始。

1 个答案:

答案 0 :(得分:4)

完整答案可能过于复杂而无法在此处给出,但您需要获取时域,PCM样本数据并从中获取频域表示,以便您可以随后评估不同信号的电平频率范围。这样做的技术称为Fast Fourier Transfer (FFT)。自己实现这一点需要大量的DSP知识,因此最好的方法可能是提供一个可以使用的开箱即用的FFT实现库。