我正在尝试遍历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 包含整个音频数据。
一旦我理解了这个问题,我就可以继续使用立体声和不同的音频格式了。
感谢任何帮助。
答案 0 :(得分:0)
问题与blockcopy操作有关
Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);
您每次都从开始复制整个输入缓冲区,因为您没有定义任何偏移量
请参阅BlockCopy文档