質問
WaveStream waveStream = new Mp3FileReader(mp3FileToPlay);
var waveOut = new WaveOut();
waveOut.Init(waveStream);
waveOut.Play();
この例外をスローします:
WaveBadFormat呼び出すwaveOutOpen
の符号化タイプがNAudioとして "MpegLayer3" である。
私はNAudioとmp3ファイルを再生することができますどのように?
解決
このようにしてください
class Program
{
static void Main()
{
using (var ms = File.OpenRead("test.mp3"))
using (var rdr = new Mp3FileReader(ms))
using (var wavStream = WaveFormatConversionStream.CreatePcmStream(rdr))
using (var baStream = new BlockAlignReductionStream(wavStream))
using (var waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(baStream);
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(100);
}
}
}
}
編集このコードは古くなりました(NAudio 1.3に関する)。 NAudioの新しいバージョンにはお勧めしません。代替の答えをご覧ください。
他のヒント
NAudio 1.6以上のユーザーのために、オリジナルの受け入れ答えでコードを使用しないでください。あなたはWaveFormatConversionStream
、またはBlockAlignReductionStream
を追加する必要はありません、あなたは、関数コールバック(あなたがリサイズやWPFアプリケーションに含まれていない場合WaveOut
が望ましい)でWaveOutEvent
を使用しないでください。あなたが再生をブロックする場合を除き、また、あなたは通常、オーディオが終了するまで眠れませんでした。ただ、WaveOut
のPlaybackStopped
イベントをサブスクライブします。
次のコードは、NAudioでMP3を再生するためにうまく動作します
var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader);
waveOut.Play();
所属していません StackOverflow