我有以下代码:
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的输入?
答案 0 :(得分:2)
在NAudio演示中查看波形绘制的完成情况,因为这听起来正是您想要做的。它基本上拦截了Read,并且每n个样本都可以订阅一个事件。
更新读取的字节数是播放延迟的函数 - 较低的延迟=读取的字节数较少。如果您的源流只能以8192的块大小读取,我很想介绍一个中间缓冲流。