방금 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()을 호출하는 것입니다.
대신 WaveOut 옵션을 사용해 보셨습니까? WasapiOut을 사용할 이유가 거의 없습니다. WasapiOut은 audioClient.Reset()을 호출해야 Stop이 호출 될 때 남은 오디오를 얻게되어 놀랍습니다. Stop이 호출되면 재생을 위해 기존의 버퍼링 된 오디오를 완전히 플러시해야합니다. –
필자는 XP를 지원해야하기 때문에 WaveOut (codeplex 위키 페이지의 방법 2)로 바 꾸었습니다.하지만 여전히 오디오를 그대로 유지합니다. – Septih