波文件处理特定的音频数据块
本文关键字:音频 数据 文件 处理 | 更新日期: 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文档