Naudio异步音频



我希望能够在应用程序的整个生命中将声音文件转移到音频输出中。我需要能够请求播放的文件,并将其与已经播放的任何文件混合在一起。同一文件可以多次调用。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 );

有几种方法可以做到这一点,但这是一个选择。创建一个播放器和混音器始终打开。我将使用MixingSample -Provider用作混合器,将其通过SampletOwaveProvider或SampletowaveProvider16作为播放器的输入。

为了确保播放永远不会停止,您要么需要自定义MixingSpample-provider,因此即使没有活动输入,读取始终返回询问的样本数量,或者添加虚拟输入,或者添加一个永无止境的沉默。

现在要播放声音,只需将iSampleProvider(例如AudiofilereDer)传递到混音器的AddMixerInput中,它将播放。当它们到达末端时,它会自动放置输入。

一种替代方法是创建一个新的播放器对象,以播放每个声音。缺点是为了使玩家对象保持活力,直到播放停止(可能是存放在字典中,然后在播放播放的事件火灾时将其删除并取出)。优点是,您不需要时就不会保持声音设备的打开状态,并且可以轻松地以不同的示例/频道数量播放声音。

最新更新