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