如何通过Windows API获取现有音频会话的GUID实现音量控制
基于Windows音频API开发简易混音应用的会话音量控制实现疑问
当前开发进展
- 已掌握
IAudioSessionEnumerator与IAudioSessionControl接口的获取方法,可正常读取各个音频会话的DisplayName字段 - 下一阶段计划为枚举到的所有音频会话实现独立的音量读写控制功能
核心问题
查阅WinAPI文档后判断,实现会话级音量控制需要调用GetSimpleAudioVolume方法,但该方法要求传入会话GUID作为入参。目前从官方文档、公开技术资料中均未找到获取已存在会话GUID的对应方案,也无法确认自身对接口调用流程的理解是否存在偏差。
现有可正常运行的代码
以下代码可实现遍历输出所有会话DisplayName的功能:
//code prints DisplayNames of all sessions void getSessions() { CoInitialize(NULL); IMMDeviceEnumerator *pDEnumerator = NULL; CoCreateInstance(CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&pDEnumerator); IMMDevice *pDevice = NULL; pDEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice); IAudioSessionManager2 *pSManager2 = NULL; pDevice->Activate(IID_IAudioSessionManager2, CLSCTX_ALL, NULL, (void**)&pSManager2); IAudioSessionEnumerator *pSEnumerator = NULL; pSManager2->GetSessionEnumerator(&pSEnumerator); int audioSessionCount; pSEnumerator->GetCount(&audioSessionCount); std::cout << audioSessionCount << '\n'; for (int i = 0; i < audioSessionCount; ++i) { IAudioSessionControl *controls; pSEnumerator->GetSession(i, &controls); LPWSTR name; controls->GetDisplayName(&name); while (*name != 0) { std::wcout << *name; ++name; } std::cout << '\n'; } }
内容的提问来源于stack exchange,提问作者Light Steel
相关产品推荐
相关产品推荐

