【问题标题】:How to test for equality of audio sessions如何测试音频会话的相等性
【发布时间】:2011-05-22 18:24:47
【问题描述】:

我正在尝试使用 Windows 音频会话 API 在当前音频会话的枚举中定位默认音频会话。目前,我在eConsole 角色中引用了音频渲染端点默认会话的IAudioSessionControl 以及枚举此默认端点的音频会话的IAudioSessionEnumerator 对象,但我需要能够比较我拥有的IAudioSessionControl 对象与IAudioSessionEnumerator::GetSession 返回的IAudioSessionControl 对象是否相等。

我希望我可以通过比较 IAudioSessionControl 指针的相等性来测试相等性。当我使用IAudioClient::GetService 多次获取默认会话的IAudioSessionControl 时,此方法有效。不幸的是,IAudioClient::GetService 返回的这个指针没有出现在IAudioSessionEnumerator 的音频会话枚举中。此外,即使使用相同的音频会话 GUID (GUID_NULL) 和CrossProcessSession 值,通过IAudioSessionManager::GetAudioSessionControl 路由多次获取默认音频会话也不会产生相同的IAudioSessionControl 指针。

如何在给定两个 IAudioSessionControl 指针的情况下测试音频会话的相等性?是否可以获得给定IAudioSessionControl 对象的音频会话 GUID 和进程标识符?

【问题讨论】:

    标签: c++ winapi com core-audio wasapi


    【解决方案1】:

    查看IAudioSessionControl2::GetSessionIdentifier API,这是音频子系统用来保持会话音量的。如果您想在运行时区分会话(同一应用程序的两个实例同时运行),请查看GetSessionInstanceIdentifier API。

    【讨论】:

      【解决方案2】:

      COM 在这里唯一可以帮助您的是object identity requirement

      您从两个对象中查询IUnknown* 并比较它们。如果这些对象中的IUnknown* 相同,则它们是相同的对象,否则它们是不同的对象。

      当然,实现可能会违反对象标识要求,或者那些不同的对象可能会以某种方式映射到同一个内部对象。 COM 在这里帮不了您 - 您必须找到特定于该组件实现的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-24
        • 1970-01-01
        • 2019-01-28
        • 1970-01-01
        • 1970-01-01
        • 2014-06-25
        • 2014-11-20
        • 2011-06-11
        相关资源
        最近更新 更多