Я только начал использовать NAudio (1.4) исключительно для воспроизведения MP3. Я работал над документацией и исходным кодом для примеров. В настоящее время у меня есть это в классе:
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 после вызова Stop ()? В настоящее время он действует больше как кнопка паузы, то есть возобновляет трек в том же месте, где он был «остановлен». Если мне нужно сбросить CurrentTime, у меня теперь возникает проблема, при которой, если я нажимаю «Стоп», дорожка останавливается, но если я нажимаю «Воспроизвести» впоследствии, я получаю небольшой остаточный шум перед тем, как дорожка начинается снова.
Глядя на исходный код одного из примеров, все, что он делает, это вызывает Stop ().