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をリセットする必要がある場合、[停止]をクリックするとトラックが停止するという問題が発生しますが、後でもう一度[再生]をクリックすると、トラックが再開する前に少しノイズが残ります。
サンプルの1つのソースコードを見ると、Stop()を呼び出すだけです。