MAPPER音频线与其音频设备

我正在开发一个应用程序,其中包括枚举所有输入音频设备(使用SetupAPI ),然后为每个音频设备列出所有输入音频行(使用winmm.dll )。

基本上,我将两者联系起来的方式是从音频设备获取设备路径,然后使用waveInMessage比较音频线路的设备路径。

现在,我希望能够对Windows默认的[输入]音频线( WAVE_MAPPER )进行相同的操作。

问题是使用waveInGetDevCapsWAVE_MAPPER返回“Microsoft Sound Mapper”,使用waveInMessageDRV_QUERYDEVICEINTERFACE返回一个空字符串。

有关如何找出Microsoft Mapper映射到哪个设备的任何建议?


WAVE_MAPPER映射到的设备取决于传递给waveInOpen的参数。 从文档:

WAVE_MAPPER - 该功能选择能够以指定格式记录的波形音频输入设备。

这意味着如果不实际打开设备属性,则无法检查设备属性。 一旦你打开它,你应该能够用waveInGetID获得实际的设备ID。


对于我来说,我发现DirectSound要简单得多,并且XP远远少于Vista,但是没有文档记录(通常情况下没有非正式文档)。

但是,解决这个问题的唯一方法是枚举所有其他设备,并查看哪一个与WAVE_MAPPER相匹配。

老实说,尽管...使用DirectSound,或者如果您只能使用Vista和Win 7,请使用Core Audio API。 Winmm是一个古老的API,在第一次引入时很破碎...


如果我错了,请纠正我,但我一直在观看过去微软会议上关于健全发展的一些视频。 在Larry Osterman最新的一篇文章中,他提到了他的团队开发的[我相信] Windows 7的新音效。

其中一个特点是[名称是我的解释]“设备热插拔”。 假设您的应用程序正在使用“Windows默认声音播放”端点进行播放,并且此时是一组USB耳机。 突然你断开耳机。 直到Windows 7,你的应用程序会崩溃[如果你没有预见到测试场景]。 在Windows 7中[这里是原始主题的钩子],如果您使用的是Windows默认播放设备,则Windows将优雅自动地将输出流切换为新的默认设置,这可能是扬声器。

我试图得到的是,我试图将WAVE_MAPPER设备放入不应该是的类中。 也许,从概念上讲,WAVE_MAPPER尽管具有相同的音频流输入和输出能力,但应该被视为例外。

我会尽量更具体。 在我的应用程序中,我有一个音频设备列表,每个音频设备都有一个音频列表。 音频设备具有诸如VID和PID等特性,这些特性很容易通过SetupAPI发现,并且可以通过winmm的waveInMessage与音频线相关联。 WAVE_MAPPER不遵循这个逻辑,我试图做到这一点。

因此,我不会试图将WAVE_MAPPER与其基础音频设备关联起来,而只会将其视为原始设备:默认音频设备。

链接地址: http://www.djcxy.com/p/60177.html

上一篇: MAPPER audio line with its audio device

下一篇: Gstreamer dynamically change source before EOS