Как проверить на равенство аудио сессий - PullRequest
2 голосов
/ 22 мая 2011

Я пытаюсь использовать Windows Audio Session API, чтобы найти аудио сеанс по умолчанию в перечислении текущих аудио сеансов. В настоящее время у меня есть ссылка на IAudioSessionControl сеанса по умолчанию конечной точки рендеринга аудио в роли eConsole, а также IAudioSessionEnumerator объект, который перечисляет аудиосеансы этой конечной точки по умолчанию, но мне нужно иметь возможность сравнить имеющийся у меня объект IAudioSessionControl на равенство с объектами IAudioSessionControl, возвращаемыми IAudioSessionEnumerator::GetSession.

Я надеялся, что смогу проверить на равенство, сравнив указатели IAudioSessionControl на равенство. Это работает, когда я получаю IAudioSessionControl для сеанса по умолчанию несколько раз, используя IAudioClient::GetService. К сожалению, этот указатель, возвращаемый IAudioClient::GetService, не отображается при перечислении аудио сеансов IAudioSessionEnumerator. Кроме того, получение аудиосеанса по умолчанию несколько раз по маршруту IAudioSessionManager::GetAudioSessionControl не приводит к идентичным указателям IAudioSessionControl даже при использовании одного GUID аудиосеанса (GUID_NULL) и значения CrossProcessSession.

Как проверить на равенство аудио сессий, используя два IAudioSessionControl указателя? Можно ли получить GUID аудиосеанса и идентификатор процесса для данного IAudioSessionControl объекта?

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Посмотрите на API IAudioSessionControl2 :: GetSessionIdentifier , это то, что аудиоподсистема использует для сохранения объемов сеанса. Если вы хотите различать сеансы во время выполнения (два экземпляра одного и того же приложения, запущенные одновременно), проверьте GetSessionInstanceIdentifier API.

1 голос
/ 23 мая 2011

В этом вам может помочь только COM - требование идентификации объекта .

Вы запрашиваете IUnknown* у обоих объектов и сравниваете их.Если IUnknown* этих объектов одинаковы, то это один и тот же объект, в противном случае это отдельные объекты.

Конечно, реализация может нарушать требование идентификации объекта, или эти отдельные объекты могут каким-то образом отображаться на один и тот же внутренний объект.COM не может вам здесь помочь - вам нужно найти информацию, относящуюся к реализации этого компонента.

...