2011-02-26 129 views
1

我有以下代碼:NAudio C#如何製作/控制從IWavePlayer讀取的字節數?

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的輸入?

回答

2

看看NAudio演示如何完成波形繪製,因爲這聽起來正是您想要做的。它基本上截取了Read,並且每n個樣本就可以發送一個事件給繪圖代碼。

更新讀取的字節數是播放延遲的函數 - 延遲更低=讀取的字節更少。如果你的源碼流只能以塊大小8192讀取,我會試圖引入一箇中間緩衝流。

+0

嗨馬克!實際上,我的意思是我希望能夠控制使用.play()函數讀取的字節數。目前,每當我使用播放功能時,它總是讀取35280字節。我希望它一次只能讀取8192個字節。 – user488792 2011-03-02 07:46:36