2009-07-15 3 views
1

Vista 또는 7에서 오디오 세션 *의 현재 볼륨 레벨을 얻는 방법을 아는 사람이 있습니까?오디오 세션의 볼륨 레벨 가져 오기

의 볼륨을 청취하는 데 필요한 IAudioSessionControl2 및 IAudioSessionManager2 인스턴스가 있지만 실제로 현재 볼륨을 얻는 것은 어렵습니다.

* 오디오 세션으로 나는 (대략) 당 응용 프로그램 오디오 제어를 의미하지 "마스터"한


주 IAudioSessionManager2- (지금까지 내가 말할 수있는) 그>GetSimpleVolume() 여기에 옳은 대답이 아닙니다. IAudioSessionControl2에서 GUID를 게시하는 유일한 것은 Grouping parameter이며 GetSimpleVolume에서이를 사용하면 기존 세션에 대한 제어권을 부여하는 대신 새 세션을 만듭니다.

GetSimpleVolume() 내가 원하는 것이지만 어디에서 params가이 설정에서 오는가?

+0

나는 이미 내 대답에 대답 : 당신은 아마 GUID에 NULL을 지정하고 플래그에 0을 지정하려고합니다. 그것은 대부분의 애플 리케이션에서 작동합니다 (WMP OCX를 호스트하는 응용 프로그램과 WMP OCX는 sndvol과 잘 통합되는 자체 볼륨 제어 인프라가 있습니다). –

답변

1

실제로 IAudioSessionManager :: GetSimpleAudioVolume은 당신이 찾고있는 것입니다.

오디오 세션은 세션 GUID, 프로세스 ID 및 교차 프로세스 플래그 (스트림 생성시 교차 프로세스 플래그가 지정된 경우 프로세스 ID가 무시 됨)로 식별됩니다.

간단한 오디오 볼륨은 해당 오디오 세션 내의 모든 스트림의 볼륨을 제어합니다. 꽤 간단합니다 (대부분의 렌더링 프레임 워크는 세션 GUID에 대해 NULL을 지정합니다). 응용 프로그램이 특정 세션 GUID를 사용하는 경우 응용 프로그램이 사용하는 세션 GUID 만 지정하면됩니다.

다른 트위스트가 있습니다. 볼륨 컨트롤 (sndvol.exe)은 UI에서 동일한 "그룹화 매개 변수"를 가진 모든 세션을 결합합니다. 이는 볼륨 컨트롤의 일부가 아니며 IE와 같은 웹 브라우저에만 존재하는 UI 편리한 기능입니다. 볼륨 UI에서 단일 슬라이더를 공유하기 위해 타사 오디오 프레임 워크 (GUID_NULL 세션 GUID 지정) 및 WMP OCX (특정 세션 GUID와의 교차 프로세스 세션 지정)를 허용합니다.

+0

그런 다음 뭔가 빠졌습니다. 프로세스 ID는 AudioSessionGUID보다 적습니다. 내가 그 질문에서 말했듯이, 내가 찾은 유일한 것은 GUID를 없애는 것이다. IAudioSessionControl-> GetGroupingParam(); 그것은 말이되지 않습니다. 이것은 단지 내 검색 fu 실패 할 수 있습니다. –

+0

IAudioClient :: Initialize를 호출하여 오디오 스트림을 만들면 매개 변수 중 하나가 세션 GUID가됩니다. 기본적으로 Windows의 모든 렌더링 프레임 워크는 NULL GUID를 지정합니다 (MediaFoundation 또는 DirectSound에서 렌더링 할 때 GUID를 재정의 할 수 있지만 대부분의 응용 프로그램에서는 수행하지 않습니다. 수행하면 응용 프로그램이 알기 때문에 큰 문제는 아닙니다). 어떤 GUID를 세션에 사용하는지). Btw, GetSimpleAudioVolume API는 다른 프로세스가 아니라 현재 프로세스의 세션 컨트롤 만 검색합니다. –

+0

그래서 SndVol 기능을 복제하는 것은 고통스럽게 복잡합니다. 적어도 7에서 점점 더 쉬워졌습니다. –

1

나는 ISimpleAudioVolume 인터페이스가 필요한 것을 수행해야한다고 생각합니다.
GetMasterVolume 메서드는 오디오 세션의 볼륨을 반환합니다.
인터페이스를 얻으려면 IAudioSessionManager :: GetSimpleAudioVolume을 호출하면됩니다.

guid 매개 변수의 경우 IAudioClient :: Initialize를 사용하여 오디오 스트림을 만들 때 지정한 매개 변수를 사용할 수 있습니다. 정직하게도 세션에 대한 GUID를 얻을 수있는 다른 방법이 있는지 모르겠다.

그룹화 매개 변수는 세션이 속한 그룹의 ID이며 세션 ID는 아닙니다.

+0

IAudioSessionManager의 ISimpleAudioVolume이 마스터 볼륨을 제공합니다. 각 세션의 볼륨은 별개이므로 세션의 ** 실제 ** 볼륨은 (MasterVolume x SessionVolume) x 100입니다. –

+0

Kevin, one nit : Windows Vista 이상의 볼륨은 부동 소수점 단위로 0.0에서 1.0. 볼륨에 100을 곱한 값이 유효하지 않을 수 있습니다. 또한 마스터 볼륨에는 볼륨 테이퍼가 적용되어 있으므로 스칼라 볼륨 값과 스피커의 실제 dB 출력 간에는 직접적인 관계가 없습니다. SetMasterVolumeLevel API를 사용하여 실제 dB 감쇠를 설정할 수 있습니다. –

관련 문제