Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Wave文件-处理特定的音频数据块_C#_Arrays_Naudio_Wave - Fatal编程技术网

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

C# Wave文件-处理特定的音频数据块,c#,arrays,naudio,wave,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[

我试图迭代一个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 

}
waveilereader wHeader=新的waveilereader(fullFileName);
字节[]数据=新字节[wHeader.Length];
int read=wHeader.read(数据,0,数据.长度);
short[]sampleBuffer=新的short[read/2];
短[]InpBuf;
对于(int i=0;i
我可以看到完整的音频数据现在在sampleBuffer中(生成的波形正弦),但我不能将这20ms划分为InpBuf,我看到InpBuf包含整个音频数据

一旦我了解了这个问题,我将能够转向立体声和不同的音频格式


谢谢你的帮助

问题与区块复制操作有关

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);
由于未定义任何偏移量,因此每次都从开始复制整个输入缓冲区


请参阅文档

该问题与区块复制操作有关

Buffer.BlockCopy(data, 0, sampleBuffer, 0, read);
由于未定义任何偏移量,因此每次都从开始复制整个输入缓冲区


请参阅文档

谢谢。在这里做什么最好?应该是这样还是有其他有效的方法<代码>代码int offst=0;对于(inti=0;i对于第一种方法很好。。。也许只要你确信它能像预期的那样正常工作,就可以稍微调整一下,这会带来一个非常混乱的结果。。。我的原始音频数据位于“byte[]data=new byte[wHeader.Length];”当我循环音频数据时,它看起来是这样的:'for(int I=0;I代码int offst=0;对于(inti=0;i对于第一种方法很好。。。也许只要你确信它能像预期的那样正常工作,就可以稍微调整一下,这会带来一个非常混乱的结果。。。我的原始音频数据位于“byte[]data=new byte[wHeader.Length];”当我循环音频数据时,它看起来是这样的:'for(int I=0;I