【发布时间】:2021-04-03 01:44:07
【问题描述】:
我正在尝试使用 Windows 音频 API 制作一个简单的混音器应用程序。我已经想出了如何获取IAudioSessionEnumerator 和IAudioSessionControl,这使我可以检索每个会话的 DisplayName。现在我想获取/设置这些会话的数量。从winApi docs我想我首先需要使用GetSimpleAudioVolume方法,但它需要会话GUID作为参数。那么如何获得现有会话的GUID 呢?我在文档或谷歌中找不到任何答案。或者是我误会了什么?
//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';
}
}
【问题讨论】:
-
见这里:stackoverflow.com/questions/1128945/… 你应该能够使用 NULL 作为 guid,使用 0 作为标志