2014-07-15 2 views
2

내 VoIP 응용 프로그램은 Win7에서 호스팅됩니다. 볼륨 컨트롤이 포함되어 있습니다. Win Vista는 믹서 API를 통해 각 애플리케이션의 볼륨을 개별적으로 제어 할 수있는 기능을 도입 했으므로이를 선택했습니다. 내 응용 프로그램의 볼륨 레벨 Windows 볼륨 컨트롤 - 응용 프로그램 대 장치

  • mixerGetControlDetail을 변경 - -

    • mixerOpen
    • mixerSetControlDetail mixerOpen 호출이 CALLBACK_WINDOW로 만든

    내 응용 프로그램의 볼륨 레벨을 가져 오기 위해, 그리고 I : 그래서, 사용 MM_MIXM_CONTROL_CHANGE를 포함하여 제어 메시지를 캡처하는 창을 설정하십시오. 이 이벤트는 mixerGetControlDetail을 호출하여 볼륨 레벨을 새로 고침하도록 트리거합니다.

    잘 작동합니다. Windows 볼륨 믹서 패널로 이동하여 내 앱의 볼륨 슬라이더를 변경할 수 있습니다. MM_MIXM_CONTROL_CHANGE 메시지가 표시되고 mixerGetControlDetail에 의해 반환 된 값의 업데이트 된 수준이 있습니다.

    하지만 기기 수준을 변경하면 알림이 표시되지 않습니다. 내 응용 프로그램의 볼륨 수준을 쿼리하면 변경되지 않습니다. 그러나 기기 볼륨 슬라이더를 슬라이드하면 볼륨 믹서 대화 상자에서 앱의 볼륨 슬라이더가 변경됩니다.

    저는 믹서 API와 IAudioEndpointVolume (콜백)의 차이점을 이해했다고 생각했지만 분명히 뭔가를 놓쳤습니다. Windows 볼륨 믹서 패널에서 변경된 것으로 표시되는 경우에도 믹서가 내 앱에 대해 동일한 볼륨 레벨을 반환하는 이유는 무엇입니까?

  • +0

    당신이 찾고있는 것이 이미 여기 있다고 생각합니다. http://stackoverflow.com/questions/2232125/getting-volume-change-notifications-on-vista-7-c –

    +0

    내 질문이 Reworded되었습니다. 앱 수준 대 기기 수준의 변경 이벤트를받는 방법을 알고 있습니다. 내가 이해할 수없는 점은 기기 수준을 변경하여 앱 수준을 변경해야하는지 여부입니다. 내 코드는 대답이 '아니오'라고 제안하지만 Windows 볼륨 믹서 대화 상자에서는 그렇지 않은 것으로 나타납니다. – Matt

    답변

    0

    좋아, 지금 받아 들여 완벽한 의미가 있습니다.

    응용 프로그램 오디오 -> 응용 프로그램 볼륨 조절 -> 믹서 -> 장치 볼륨 조절 -> 장치.

    응용 프로그램 볼륨 컨트롤은 실제로 장치에서 별도의 컨트롤입니다. Windows 볼륨 믹서 대화 상자 슬라이더는 장치 슬라이더 수준 (즉, 수준 = (장치 수준 * (응용 프로그램 볼륨 제어/최대)/최대)에 상대적인 응용 프로그램 슬라이더 수준을 나타냅니다.

    슬라이더가 @ 100 % (제어 값 = 65536)로 시작하면 장치 수준이 올라가거나 내려갈 때 App 수준에서 슬라이더를 추적합니다. 그러나 앱 수준이 기기 수준의 @ 50 % (32767)을 시작한 경우 기기 수준이 50 % (32767)가되면 앱 수준은 25 %로 변경됩니다. App Volume Control의 스칼라는 일정하게 유지되었지만 슬라이더 레벨은 장치 레벨을 추적했습니다.

    관련 문제