2011-09-08 3 views
1

방금 ​​MP3 재생 용으로 NAudio (1.4)를 사용하기 시작했습니다. 나는 샘플에 대한 문서와 소스 코드 작업을 해왔다. 현재 내가 수업이 있습니다NAudio로 MP3 재생 - Stop() 문제

IWavePlayer waveOutDevice; 
    WaveStream mainOutputStream; 
    WaveChannel32 volumeStream; 

    public AudioPlaybackService() : base() { 
     waveOutDevice = new WasapiOut(AudioClientShareMode.Shared, 100);  
    } 

    public bool LoadTrack(string trackPath, float volume) 
    { 
     if (!File.Exists(trackPath)) 
      return false; 
     try 
     { 
      mainOutputStream = new Mp3FileReader(trackPath); 
      volumeStream = new WaveChannel32(mainOutputStream); 
      volumeStream.Volume = volume; 
      waveOutDevice.Init(mainOutputStream); 
     } 
     catch (Exception e) 
     { 
      Logger.Error("Failed to load track for playback {0} :: {1}", trackPath, e.ToString()); 
      return false; 
     } 
     return true; 
    } 

    public bool PlayTrack() 
    { 
     if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Playing) 
      return false; 
     waveOutDevice.Play(); 
     return true; 
    } 

    public bool StopTrack() 
    { 
     if (waveOutDevice == null || waveOutDevice.PlaybackState == PlaybackState.Stopped) 
      return false; 
     waveOutDevice.Stop(); 
     mainOutputStream.CurrentTime = TimeSpan.Zero; 
     return true; 
    } 

이 부하를 내 테스트 트랙 벌금을 재생, 내 문제는 정지() 함수입니다. 먼저 Stop()을 호출 한 후 CurrentTime 속성을 재설정해야합니까? 현재는 일시 중지 버튼처럼 작동합니다. 즉, '멈 춥니 다'동일한 위치에서 트랙을 재개합니다. CurrentTime을 리셋해야한다면 지금 멈춤을 클릭하면 트랙이 멈추는 문제가 있습니다. 그러나 나중에 다시 재생을 클릭하면 트랙이 다시 시작하기 전에 약간의 노이즈가 발생합니다.

샘플 중 하나의 소스 코드를 보는 것은 모두 Stop()을 호출하는 것입니다.

+0

대신 WaveOut 옵션을 사용해 보셨습니까? WasapiOut을 사용할 이유가 거의 없습니다. WasapiOut은 audioClient.Reset()을 호출해야 Stop이 호출 될 때 남은 오디오를 얻게되어 놀랍습니다. Stop이 호출되면 재생을 위해 기존의 버퍼링 된 오디오를 완전히 플러시해야합니다. –

+0

필자는 XP를 지원해야하기 때문에 WaveOut (codeplex 위키 페이지의 방법 2)로 바 꾸었습니다.하지만 여전히 오디오를 그대로 유지합니다. – Septih

답변

0

our use of naudio에서 우리는 결코 오디오를 멈추지 않습니다. 정지와 유사한 기능을 사용하면 자동 파형 (제로)이 웨이브 출력으로 공급됩니다. 이것은 주로 멈춤과 너무 자주 시작할 때 naudio의 불안정성 때문 이었지만, "남은 버퍼"문제도 방지합니다.

+0

감사합니다. 그래서 당신을 멈추게하는 대신에 침묵을 바꾸는 것? 사용자가 재생을 클릭하면 (라디오 스트리밍과 약간 다른 경우) 스트림이 다시로드되거나 재설정 된 시간과 동일한 스트림을 사용합니까? – Septih

+0

우리는 탐색 능력이없는 우리 자신의 MP3 프레임 파서를 작성해야했기 때문에이 질문에 대답하기에 적합하지 않습니다. 나는 단순히 무엇이 최선인지 모릅니다. – spender

+0

글쎄 나는 더 놀아서 나를 위해 일할 수 있는지 알아 보겠다. – Septih