【问题标题】:How to relate WAVE_MAPPER audio line with its audio device如何将 WAVE_MAPPER 音频线与其音频设备相关联
【发布时间】:2009-12-10 19:49:57
【问题描述】:

我正在开发一个应用程序,除其他外,枚举所有输入音频设备(使用SetupAPI),然后对于每个音频设备,它列出所有输入音频线(使用winmm.dll)。

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

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

问题在于,将waveInGetDevCapsWAVE_MAPPER 一起使用会返回“Microsoft Sound Mapper”,而将waveInMessageDRV_QUERYDEVICEINTERFACE 一起使用会返回一个空字符串。

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

【问题讨论】:

    标签: c# c++ audio pinvoke winmm


    【解决方案1】:

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

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

    这意味着您无法在不实际打开设备的情况下检查设备属性。打开后,您应该可以通过waveInGetID 获取实际的设备ID。

    【讨论】:

    • waveInGetID 是我尚未移植到 C# 的函数之一。通过阅读它的文档,听起来它应该可以工作。我会测试您的建议,并在此处告知是否可行。
    • 刚刚测试过...从waveInOpen 获得句柄,然后将句柄传递给waveInGetID...。我得到了什么...哈哈哈...-1 (WAVE_MAPPER)。也许这就是为什么 google 上的第一个条目说“此功能支持向后兼容。新应用程序可以转换设备的句柄而不是检索设备标识符。”
    【解决方案2】:

    我发现 DirectSound 更容易,而且 XP 到 Vista 未记录的怪事要少得多(而且一般来说,未记录的怪事要少得多)。

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

    老实说……使用 DirectSound,或者,如果您只能使用 Vista 和 Win 7,请使用 Core Audio API。 Winmm 是一个古老的 API,当它第一次被引入时已经很糟糕了......

    【讨论】:

    • 问题是我们必须支持windows 2000及以上。现在关于您的建议,我实际上是在枚举所有设备,但问题是我没有什么可以坚持和比较的......我找不到将 WAVE_MAPPER 与我已经拥有的设备列表相匹配的方法。
    • DirectSound 可以在 Win 2K 上开箱即用 .. 但这取决于你。我仍然强烈建议避免使用 winmm ......但祝你好运,我希望所有无证更改不要像他们那样咬你!
    【解决方案3】:

    如果我错了,请纠正我,但我一直在观看过去 Microsoft 会议上有关声音开发的一些视频。在拉里·奥斯特曼 (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 与其底层音频设备相关联,而是将其视为默认音频设备。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 2015-03-25
      • 2011-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      相关资源
      最近更新 更多