Wave文件 - 处理特定的音频数据块

时间:2016-11-08 09:25:48

标签: c# arrays naudio wave

我正在尝试遍历wave文件并在每次迭代时发送 20ms 。 假设我使用 8khz,1通道,16位音频文件,我使用NAudio获得以下代码:

WaveFileReader wHeader = new WaveFileReader(fullFileName);

byte[] data = new byte[wHeader.Length];
int read = wHeader.Read(data, 0, data.Length);
short[] sampleBuffer = new short[read / 2];
short[] InpBuf;

for (int i = 0; i < read; i += 2)
{
InpBuf = new short[159]; //20ms?

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);
InpBuf = sampleBuffer;

Process20(InpBuf); //Send 20ms of audio data which inside InpBuf 

}

我可以看到完整的音频数据现在位于 sampleBuffer 内(生成波正弦)但是我不能将这20ms分成 InpBuf ,我看到 InpBuf 包含整个音频数据。

一旦我理解了这个问题,我就可以继续使用立体声和不同的音频格式了。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

问题与blockcopy操作有关

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);

您每次都从开始复制整个输入缓冲区,因为您没有定义任何偏移量

请参阅BlockCopy文档