0

この質問は、以前のスレッドPlay mp3 from internet without FileOpenDialog から派生したものです。

誰かがこれについて何か知っていることを本当に願っています。ローカルに保存されたファイルを再生する代わりに、WebRequest を使用してダウンロード ストリームを開始し、ストリームを再生するように言われました。ただし、PlayMp3FromUrl のコードを使用しようとすると、次のエラーが発生します。

「'NAudio.Wave.WaveOut' には、'3' 個の引数を取るコンストラクターが含まれていません」

次の行でコンパイルが失敗します。

using (WaveOut waveOut = new WaveOut(0, 500, null))

これは完全なコードです:

public static void PlayMp3FromUrl(string url)
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (Stream stream = WebRequest.Create(url)
                .GetResponse().GetResponseStream())
            {
                byte[] buffer = new byte[32768];
                int read;
                while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }
            }

            ms.Position = 0;

            using (WaveStream blockAlignedStream =
                new BlockAlignReductionStream(
                    WaveFormatConversionStream.CreatePcmStream(
                        new Mp3FileReader(ms))))
            {
                using (WaveOut waveOut = new WaveOut(0, 500, null))
                {
                    waveOut.Init(blockAlignedStream);
                    waveOut.Play();
                    while (blockAlignedStream.Position < blockAlignedStream.Length)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                }
            }
        }
    }

WaveOut がどの引数を取るかを調べるのを手伝ってくれる人はいますか?

編集: おそらく WaveOut.cs を見たいと思うでしょうが、かなり長いです。ここでWaveOut.csを見てください。

4

3 に答える 3

1

デフォルトのコンストラクター (パラメーターなし) を使用するだけです。最新の NAudio コードには、3 つのパラメーターを持つ古いコンストラクターの代わりに、WaveOut クラスのプロパティがあります。多くの問題が発生する場合は、古いコンストラクターを元に戻し、[Obsolete] 属性でマークすることがあります。

最初のパラメータはデバイス番号です。0 はデフォルトのデバイスを使用することを意味します。

2 つ目はレイテンシです。500 ミリ秒は、事前にバッファリングするオーディオの量です。これは非常に保守的な数値であり、グリッチのない再生を保証するはずです。

3 つ目は、waveOut のコールバック メカニズムに関するものです。残念ながら、万能のソリューションはありません。null を渡すと、NAudio は関数コールバックを使用しますが、これは特定のオーディオ チップセットでハングアップする可能性があります。可能であれば、ウィンドウ ハンドルを渡すことをお勧めします。

于 2009-09-01T06:37:05.873 に答える