2012-06-30 6 views
3

NAudio 라이브러리를 사용하여 간단한 WinForms 오디오 레코더/플레이어를 작성하고 있습니다. 내 문제는 재생이 완료되었다는 것을 어떻게 알 수 있습니까? 그 후에 웨이브 스트림을 닫아야합니다. 누구든지 재생이 완료되었는지 확인하는 방법을 알고 않습니다Naudio, 재생 완료 방법을 알려드립니다.

wfr = new NAudio.Wave.WaveFileReader(this.outputFilename); 
audioOutput = new DirectSoundOut(); 
WaveChannel32 wc = new NAudio.Wave.WaveChannel32(wfr); 
audioOutput.Init(wc); 
audioOutput.PlaybackStopped += new EventHandler<StoppedEventArgs>(audioOutput_PlaybackStopped); 
audioOutput.Play(); 

그러나이 PlaybackStopped 이벤트는 audioOutput.stop()를 호출하여 트리거 될 수 있습니다 보인다 :

는 내가 거기 아래에 나열된 PlaybackStopped 이벤트는 알고 있었다?

나는이 질문에 대한 오픈 소스 프로젝트를 생성, 당신은 여기를 찾을 수 있습니다 https://code.google.com/p/stack-overflow-questions/

+1

재생이 완료된 후'PlaybackStopped'가 실행되지 않았습니까? [출처] (http://daisy.trac.cvsdude.com/urakawa-sdk/browser/trunk/csharp/audio/NAudio/Wave/WaveOutputs/DirectSoundOut.cs?rev=1346)에서 ' processSamples()'마지막으로 이벤트가 발생합니다 ... – nemesv

+0

예, 확실합니다. 나는 새로운 프로젝트를 테스트했다. 여전히 같은 문제가 발생합니다. 그게 버그 야? –

+0

WaveOut을 오디오 출력으로 사용하는 경우와 동일합니다. –

답변

6

PlaybackStopped 이벤트는 사용자가 수동으로 재생을 중지 때 발생하거나하는 IWaveProvider 사용하고 0을 반환의 읽기 방법. 여기서 문제는 WaveChannel32이 소스 스트림이 끝날 때 데이터를 반환하지 않기 때문에 재생이 종료되지 않는다는 것입니다. 이 문제를 해결하려면 PadWithZeroes 속성을 false로 설정해야합니다.

+0

감사합니다, Mark Heath. 그것은 작동합니다! XD –