2010-05-11 7 views
2

NAudio을 사용하여 MP3 파일을 재생할 때 재생을 중지하는 방법을 알 수 없습니다. waveout.Stop()을 호출하면 코드가 실행을 멈추고 waveout.Dispose()가 호출되지 않습니다.NAudio 재생이 성공적으로 중지되지 않음

함수 콜백과 관련이 있습니까? 그렇다면 어떻게 수정해야합니까? 여기

static string MP3 = @"song.mp3"; 
static WaveOut waveout; 
static WaveStream playback; 
static void Main(string[] args) 
{ 
    waveout = new WaveOut(WaveCallbackInfo.FunctionCallback()); 
    playback = OpenMp3Stream(MP3); 
    waveout.Init(playback); 
    waveout.Play(); 
    Console.WriteLine("Started"); 

    Thread.Sleep(2 * 1000); 

    Console.WriteLine("Ending"); 
    if (waveout.PlaybackState != PlaybackState.Stopped) 
     waveout.Stop(); 
    Console.WriteLine("Stopped"); 
    waveout.Dispose(); 
    Console.WriteLine("1st dispose"); 
    playback.Dispose(); 
    Console.WriteLine("2nd dispose"); 
} 
private static WaveChannel32 OpenMp3Stream(string fileName) 
{ 
    WaveChannel32 inputStream; 
    WaveStream mp3Reader = new Mp3FileReader(fileName); 
    WaveStream pcmStream = WaveFormatConversionStream.CreatePcmStream(mp3Reader); 
    WaveStream blockAlignedStream = new BlockAlignReductionStream(pcmStream); 
    inputStream = new WaveChannel32(blockAlignedStream); 
    return inputStream; 
} 
+0

나는 '사용하는'문장이 여기에 아주 편리 할 것이라고 생각하지만 나는 naudio가 없으므로 실제로 테스트 할 수 없다. –

+0

이것은 샘플 코드 일뿐입니다. 사용 문을 사용하면 실제로 장기적으로 작동 할 것입니다. 실제로 waveout.stop() 호출에서 돌아 오지 않습니다. 그것은 기능을 입력하고 전혀 떠나지 않는 것. – Kurru

답변

2

waveOutReset 호출에서 코드가 멈추는 것을 말하고 있습니까? 그렇다면 함수 콜백 및 특정 오디오 드라이버와 관련하여 알려진 문제입니다 (SoundMAX는이 문제에 특히 민감합니다). 몇 달 전에 NAudio 소스 코드에 가능한 수정 사항을 확인 했으므로 최신 코드를 작성하여 문제가 수정되었는지 확인할 수있었습니다.

+0

감사합니다. 이것이 문제였습니다. 지금 고쳐 주셔서 감사합니다 : D – Kurru

+0

굉장! 다행히 나는 이것을 우연히 발견했다. 나는 똑같은 문제가 있었다. – senfo

0

내 첫번째 추측은 당신이 더 console.read() 또는 코드가 당신이 최종 기록 라인이 표시되지 않는 것을 너무 빨리 실행되는 유사한 전화가 없기 때문에.

NAudio가 IDisposable을 구현하는 경우 using 문을 사용하여 .NET에서 처리하도록하는 것이 좋습니다.

관련 문제