NAudio C#如何制作/控制从IWavePlayer读取的字节数?

时间:2011-02-26 13:29:34

标签: c# naudio

我有以下代码:

IWavePlayer player = new WaveOut();
WaveStream reader = new WaveFileReader(filePath);
WaveChannel32 input = new WaveChannel32(reader);

AmplitudeStream ampStream = new AmplitudeStream(input);
ampStream.AmplitudeEventHandler += new EventHandler<AmplitudeArgs>(AmplitudeStreamHandler);

player.Init(ampStream);
player.Play();

AmplitudeStream是我制作的一个实现WaveStream的类,这样我就可以“跟踪”并在从文件中读取数据时发送事件。但是,我的问题是我想控制读取多少字节。由于AmplitudeStream的Read函数是由Play()函数调用的,我不知道如何限制读取的字节数(总是35,280)。

怎么做?我正在使用Play()命令,因为我希望我的文件可以播放,以便我可以观察。因此,如果在Read()命令期间有另一种播放文件的方式,它将类似于:

byte[] buffer = byte[8192]
int bytesRead = 0;

do{

bytesRead = ampStream.Read(buffer,0,buffer.Length);

}while(bytesRead != 0);

@override
private int Read(byte[] buffer, int offset, int count)
{

//some command to play the file here

}

我想知道。谢谢!除此之外,有没有办法不使用WaveChannel32类作为我的AmplitudeStream的输入?

1 个答案:

答案 0 :(得分:2)

在NAudio演示中查看波形绘制的完成情况,因为这听起来正是您想要做的。它基本上拦截了Read,并且每n个样本都可以订阅一个事件。

更新读取的字节数是播放延迟的函数 - 较低的延迟=读取的字节数较少。如果您的源流只能以8192的块大小读取,我很想介绍一个中间缓冲流。