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

本文关键字:音频 数据 文件 处理 | 更新日期: 2023-09-27 18:16:50

我试图迭代一个波文件,并发送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包含整个音频数据。

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

任何帮助都很感激,谢谢。

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

问题与blockcopy操作有关

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

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

参见BlockCopy文档