我刚刚开始使用 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() 函数。首先,我是否需要在调用 Stop() 后重置 CurrentTime 属性?目前,它更像是一个暂停按钮,即它在“停止”的同一位置恢复轨道。如果我确实需要重置 CurrentTime,我现在会遇到一个问题,如果我单击停止,曲目会停止,但如果我之后再次单击播放,我会在曲目再次开始之前得到一点剩余的噪音。
查看其中一个示例的源代码,它所做的只是调用 Stop()。