2

アプリケーションの存続期間中、オーディオ出力にサウンド ファイルを非同期的にダンプできるようにしたいと考えています。ファイルの再生をリクエストし、既に再生中のファイルとミックスできるようにする必要があります。同じファイルが複数回呼び出される場合があります。WaveMixerStream は進むべき道ですか? アプリケーションの存続期間中、プレーヤーとミキサー ストリームを開いたままにしておくことは安全ですか、または推奨されますか?それともパフォーマンスの問題を引き起こしますか?

//globals
IWavePlayer _Context;
WaveMixerStream32 _Mixer;

//constructor
_Context = new DirectSoundOut();
_Mixer = new WaveMixerStream32();
_Context.Init( Instance._Mixer );
_Context.Play();

//asynchronous sound output, on demand from user interface
_Mixer.AddInputStream( sound.FileWaveStream );
4

1 に答える 1

1

これを行うにはいくつかの方法がありますが、ここでは 1 つのオプションを示します。常に開いているプレーヤーとミキサーを作成します。MixingSampleProvider をミキサーとして使用し、SampleToWaveProvider または SampleToWaveProvider16 を介してプレーヤーへの入力として渡します。

再生が停止しないようにするには、MixingSampleProvider をカスタマイズして、アクティブな入力がない場合でも要求されたサンプル数を Read が常に返すようにするか、終わりのない無音ストリームであるダミー入力を追加する必要があります。

サウンドを再生するには、ISampleProvider (AudioFileReader など) をミキサーの AddMixerInput に渡すだけで再生されます。入力が最後に到達すると、入力が自動的に削除されます。

別の方法は、再生するサウンドごとに新しいプレーヤー オブジェクトを作成することです。欠点は、再生が停止するまでプレーヤー オブジェクトを存続させる方法を考え出すことです (おそらく、ディクショナリに格納し、PlaybackStopped イベントが発生したときにそれを破棄して取り出すことによって)。利点は、必要のないときにサウンド デバイスを開いたままにしておく必要がなく、さまざまなサンプル レート/チャネル数でサウンドを簡単に再生できることです。

于 2012-10-17T12:33:24.460 に答える