在适用于Windows 8和10的较新XAudio2 API中,将AUDIO_STREAM_CATEGORY
传递给IXAudio2::CreateMasteringVoice
。
文档接着说明了如何将这些应用于不同类型的音频。然而,IXAudio2
仅被允许一个主语音。要做到这一点,需要完全分离IXAudio2
实例以及所需的所有相关接口,或者可以通过某种方式在音频图的其他地方指定类别吗?
游戏应将其音乐流分类为AudioCategory_GameMedia,这样,如果其他应用程序在后台播放音乐,游戏音乐将自动静音。音乐或视频应用程序应将其流分类为AudioCategory_Media或AudioCategory_Movie,这样它们将优先于Audio Category_GameMedia流。游戏中电影或过场的游戏音频,如果音频是预混合的或出于创作原因,应优先于背景音频,也应归类为媒体或电影。
您可以在一个进程中创建多个IXAudio2
实例,这样每个实例都有自己的主语音。如果要从一个进程输出多个类别的音频,则需要创建多个IXAudio2
实例。
一般来说,你只需要一个就可以逃脱惩罚,并且总是使用AudioCategory_GameMedia
。
我知道这个设计有点笨拙,但类别是在WASAPI输出语音上设置的,XAudio2将其主要语音内容发送到WASAPI输出。任何其他设计都需要在内部XAudio音频图中注释类别数据,因为实现起来很复杂,没有太多价值。相反,我们选择让应用程序同时激活多个音频图,每个音频图都有自己的主控语音,因此也有自己的类别。
如何选择支持WASAPI的音频类别功能取决于您自己,当然,最佳的用户体验取决于您的应用程序的实际功能。