2017-08-08 55 views
0

我使用n音訊編碼使用BufferedWaveProvider如何知道緩衝區在n音訊

var bufferedWaveProvider = new BufferedWaveProvider(new WaveFormat(16000, 16, 2)); 
// AddSamples here 
WaveOut wavPlayer = new WaveOut(); 
wavPlayer.Init(bufferedWaveProvider); 
wavPlayer.Play(); 

我怎麼能知道在C#和IM軟件的緩衝區完全正確讀取,或者準確位置完全讀取現在。 由於wavPlayer.Play()已被調用,我怎樣才能獲得當前位置。 謝謝。

回答

0

IWavePosition接口,可以用來告訴你有多少音頻(以字節爲單位)迄今所發揮WaveOut - 只需調用GetPosition()

至於BufferedWaveProvider,如果您設置了ReadFully=false,那麼當您到達緩衝音頻結尾時,播放會自動停止。您還可以檢查BufferedBytes屬性以查看有多少音頻正在排隊等待播放

+0

嗨,馬克。謝謝您的回答。我使用IWavePosition,但我遇到了一個問題,雖然當AddSamples,我只添加4096字節,這意味着BufferedBytes是4096,但當我調用GetPosition()函數時,返回值是9600.我認爲返回的值必須總是小於4096. 每次我添加4096字節的樣本,但返回的GetPosition()值太大。或者我的想法是錯誤的。請證實。謝謝。 –

+0

BufferedWaveProvider默認設置爲在用完後繼續播放靜音。無論您是否打電話給AddSamples –

+0

Hi Mark,GetPosition都會返回不斷增加的金額。我正在執行2個任務(異步)。第一個用於處理數據並使用AddSample將數據添加到緩衝區。每次4096字節。另一個用於播放聲音。第一次當我用4096添加樣本時,當波形讀取到第3000個字節時,我將添加4096個字節。該過程是Add-Read-Add-Read ...,但聲音必須平滑。所以我需要waveout.Play()的完全位置(當wave out讀到第3000個字節時添加更多4096字節)的waveout。所以,用NAudio,我可以解決這個問題。謝謝。 –