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

基本上,我与这两个的方式正从该音频设备的设备路径,然后使用waveInMessage来比较音频线的设备路径。

现在,我希望能够做的窗口默认[输入]音频线(WAVE_MAPPER)相同。

的问题是,使用用于waveInGetDevCaps返回“微软声音映射” WAVE_MAPPER,以及使用与waveInMessage DRV_QUERYDEVICEINTERFACE返回空字符串。

,关于如何找出哪些设备的微软映射器是映射任何建议?

有帮助吗?

解决方案 3

请纠正我,如果我错了,但我一直在看从过去的微软会议上健康发展的一些视频。在最新一期的拉里奥斯特曼,他提到了新的声音特征[我相信] Windows 7中,他的团队制作。

的特点之一是[名称是我的解释]“设备热插拔”。比方说,你的应用程序播放使用“Windows默认声音播放”端点,而在这一刻是一组USB耳机。你突然断开耳机。截至到Windows 7,你的应用程序会崩溃[如果你没有预见到的测试场景。在Windows 7和这里的钩子原始主题],如果你使用Windows默认的播放设备,Windows将优雅和自动交换输出流为新的默认,这可能是扬声器。

我试图去,是我想要的WAVE_MAPPER设备融入其中,它不应该是一个阶级。也许,在概念上讲,尽管WAVE_MAPPER具有音频流的输入和输出的能力相同,应该被视为异常。

我会尝试更加具体。在我的应用程序,我有音频设备的列表,每个音频设备有音频线列表。音频设备具有诸如视频和PID是容易通过SETUPAPI发现且可经由WINMM的waveInMessage涉及到音频线路。 WAVE_MAPPER不遵循这种逻辑,我试图让它做。

因此,而不是试图与它的底层音频设备涉及的WAVE_MAPPER,我只会把它当作它是什么:默认音频设备

其他提示

这WAVE_MAPPER被映射到该装置取决于传递给waveInOpen的参数。从文档:

  

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

这意味着你不能没有实际打开它检查设备属性。一旦你打开它,你应该能够得到与waveInGetID实际的设备ID。

好了一个我发现DirectSound的是一个极大的方便,与远不如XP到Vista无证古怪(和一般远远低于无证古怪)。

但大概只有你能解决它的办法就是枚举所有其他设备,看看哪一个相匹配的WAVE_MAPPER之一。

老实说,虽然...使用DirectSound的,或者,如果你能做到Vista和Win 7的唯一,使用核心音频API。 WINMM是一种古老的API和当它被首次引入了漂亮的破碎...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top