1

NAudioを使用して単純なオーディオ プレーヤーを作成していますPlaybackStateが、WaveOutストリームを「停止」に変更してイベントを発生させるソリューションが見つかりませんPlaybackState

以下のようにしました。

private BlockAlignReductionStream stream = null;

private NAudio.Wave.WaveOut output = null;

private void Add_to_stream()
        {

            string[] files = Directory.GetFiles(Settings.Default.m + "\\","*"+selected_music+"*");

            if (files[0].EndsWith(".mp3"))
            {
                NAudio.Wave.Mp3FileReader mp3fr = new NAudio.Wave.Mp3FileReader(Settings.Default.m + "\\" + selected_music + ".mp3");
                var pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(mp3fr);
                stream = new NAudio.Wave.BlockAlignReductionStream(pcm);

            }
            else if (files[0].EndsWith(".wav"))
            {
                NAudio.Wave.WaveFileReader wavfr = new NAudio.Wave.WaveFileReader(Settings.Default.m + "\\" + selected_music + ".wav");
                var pcm = new NAudio.Wave.WaveChannel32(wavfr);
                pcm.PadWithZeroes = false;
                stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
            }
            else throw new InvalidOperationException("file type is not supported.");

            output = new NAudio.Wave.WaveOut();
            output.Init(stream);

        }

もともと、 WaveOutクラスの代わりにDirectSoundOutクラスを使用していて、この問題を克服できたのですが、それは Resuming をサポートしていません。

すでにこの問題に直面している人がたくさんいることは知っていますが、両方のこと (PlaybackState の再開と発火) に代わるものはありますか?

4

2 に答える 2

3

イベントを発生させるには、WaveOut クラスのコンストラクターに WaveCallbackInfo を追加する必要があります。

output = new NAudio.Wave.WaveOut(WaveCallbackInfo.FunctionCallback());
output.PlaybackStopped += (pbss, pbse) => { Debug.WriteLine("Stopped"); };
于 2013-06-09T16:21:43.970 に答える
2

BlockAlignConversionStreamとを取り除きWaveFormatConversionStreamます。Mp3FileReaderPCM を直接出力します (最近のバージョンの NAudio を使用していると仮定します)。

于 2013-06-09T21:03:06.183 に答える