2

NAudioを使用してmp3ファイルを何度も再生するための推奨される方法は何ですか?

私がこれまでに行ったこと:

1つのグローバルな場所で:

Mp3Reader mp3Reader = new Mp3FileReader(url);

その後、毎回mp3を再生する必要があります。

WaveStream channel = new WaveChannel32( mp3Reader) ;
IWavePlayer waveout = new WaveOut();
waveout.Init(channel);
waveout.PlaybackStopped += new EventHandler(naudio_PlaybackStopped);
waveout.Play();

しかし、それは初めて再生されます。

さらに、それはこの主張を与えます:

WaveOut device was not closed

最初のインスタンスがまだ再生されている間に、mp3ファイルを再度再生する必要がある可能性があります。

4

1 に答える 1

2

ループバックしたい場合はIWaveProvider、内部でを作成するカスタムを作成することでこれを行いますMp3FileReader。次に、Readメソッドで、から読み取ったデータを渡しますMp3FileReader。それが終わりに達したとき(mp3FileReader.Read0を返す)、位置を0に戻し、読み取りを続行します(そして、間に少し沈黙を挿入することもできます)。

もう1つのアプローチはMixingSampleProvider、最新バージョンのNAudio(Nugetで利用可能AudioFileReader)を使用することです。これにより、MP3ファイルを再生したいときにいつでもインスタンスを追加できます。そうすれば、実際に同じMP3ファイルを同時に再生することができます。また、再生が終わらないように、またいつでも新しいMP3をキューに入れることができるように、ダミーの終わらない無音ストリームを入れることもできます。

また、「WaveOutデバイスが閉じられていません」はまさにそれを意味します。Initを2回呼び出すことはできません。カスタムウェーブプロバイダーまたはミキサーアプローチを使用したくない場合は、オリジナルを破棄して新しいものを作成する必要があります(PlaybackStoppedハンドラーなど)。

于 2012-09-24T21:48:43.483 に答える