質問

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を使用しないでください。あなたが再生をブロックする場合を除き、また、あなたは通常、オーディオが終了するまで眠れませんでした。ただ、WaveOutPlaybackStoppedイベントをサブスクライブします。

次のコードは、NAudioでMP3を再生するためにうまく動作します

var reader = new Mp3FileReader("test.mp3");
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(reader); 
waveOut.Play();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top