2012-08-25 4 views
6

소리가 나는 응용 프로그램이 있습니다. 사운드를 음소거 할 수있는 전역 속성이 있습니다. 문제는 소리를 낼 수있는 많은 것들이 있습니다. 다른 클래스 유형을 반복하고 소리를 음소거/음소거하는 것을 싫어합니다. 대신 글로벌 응용 프로그램 수준에서 사운드를 음소거하는 방법을 찾고 있습니다. 전체 시스템 볼륨을 음소거하는 것은 아닙니다.내 응용 프로그램의 소리를 음소거하는 방법?

하나의 시나리오 : Windows 7에서 볼륨 믹서를 열고 개별 응용 프로그램의 볼륨을 조정할 수 있습니다. 이 실제 값을 변경하려고하지는 않지만 (Windows 7에만 해당), 응용 프로그램의 모든 볼륨을 한꺼번에 변경하고 싶습니다. 또한 응용 프로그램의 모든 사운드를 완전히 음소거 할 수있는 기능이 필요합니다. Windows XP 이상과 호환되는이 기능이 필요합니다. Windows API 호출이 관련 될 것이라고 가정하지만 어떤 호출을해야하는지 전혀 알지 못합니다.

+0

이 질문에 대해 살펴 유무 : 내가 기억하는 것에 대해 http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi

+3

을, XP는했으나, 애플리케이션 당 사운드 레벨. 당신은 당신의 어플리케이션에 중앙 사운드 출력 API를 가지고있을 것이고, Windows API로 보내거나 그냥 무시하고 처리하면 토글 될 것입니다. –

+1

WinXP는 어플리케이션마다 사운드 컨트롤 기능을 가지고 있지 않습니다. 이것은 Vista에 추가되었으며 완전히 새로운 API를 사용하여 새로운 인터페이스를 추가하여 지원합니다. Larry Osterman (MS 구시대 중 한 명)은 자신의 블로그에 새로운 사운드 API 시리즈를 발표했습니다. 이 기계에는 링크가 없지만 인터넷 검색으로 그를 찾을 수 있어야합니다. C/C++에서이 글이 너무 많습니다. 내가 당신을 찾을 수있는 검색어를 찾을 수 있는지 보겠습니다. –

답변

3

XP에서 요구되는 것은 불가능합니다. OS는 단순히 애플리케이션 별 볼륨 레벨을 지원하지 않습니다.

SoundActive: Boolean 또는 PlaySounds: Boolean 또는 비슷한 것을 유지하는 설정 클래스를 만들어 원하는 것을 얻을 수 있습니다. 자체 유닛에 배치하고 인스턴스를 생성하는 초기화 섹션 및이를 해제하는 파이널 라이 제이션 섹션 (효과적으로 글로벌 값의 모음으로 만듭니다)을 갖습니다.

이러한 설정에 액세스해야하는 각 장치는 단순히 해당 장치를 포함하는 장치를 사용하고 이에 따라 동작을 조정합니다. 그래서 그냥 검사를 추가해야 무엇이든 자식 클래스 또는 양식 또는 각 :

if CurrentSettings.PlaySounds then 
    // Code that makes sounds, plays music, whatever. 

또한 현재 볼륨 레벨을 추적 (XP, 시스템 전체 수준에서) 방법을 포함 할 수있는 설정 클래스, MMSystem 볼륨 기능을 사용하여 볼륨을 높이거나 낮추는 방법 (여기에는 수많은 예제가 있으며이를 통해 Google이 제공합니다). 그런 다음 앱에서 OnActivateOnDeactivate 이벤트를 사용하여 앱에서 포커스를 얻었을 때 볼륨 레벨을 설정하고 앱에서 포커스를 잃을 때 적절한 볼륨으로 복원 할 수 있습니다.

비스타에서

이상, 당신은 시스템 전체 볼륨 (I 적절한 MMDevAPI 인터페이스 정의와 함께,이 일의 예를 가지고) 또는 장치 레벨을 제어하기 위해 앞서 언급 한 IAudioEndPointVolume 인터페이스 중 하나 GetMasterVolumeLevel 또는 SetMasterVolumeLevel 방법을 사용할 수 있습니다 볼륨 (적절한 장치를 먼저 선택하려면 IMMDevioce.Activate을 사용하고 ppInterface 매개 변수의 IMMDevice.Activate에서받은 장치 인터페이스에 위의 IAudioEndPointVolume 메서드 사용). 현재 뮤트 플래그 값을 검색하거나 설정할 수 있도록 응용 프로그램의 오디오 세션에 대한 볼륨 레벨을 제어 GetMasterVolumeSetMasterVolume, 그리고 GetMuteSetMute :

개별 응용 프로그램의 경우 네 가지 방법을 가지고 ISimpleAudioVolume 인터페이스를 사용 그것 각각. (Vista 및 Win7에서 새 오디오 지원을 담당 한 개발자 중 한 명인 MS의 Larry Osterman은 새로운 API의 오디오 유형과 각 기능을 언제 사용할지에 대한 블로그에서 starting point article을 사용합니다.)

사용중인 운영 체제를 런타임에 결정하고 XP와 그 이전 버전에서 MMSystem 기능을 프로그래밍 방식으로 전환하고 Vista 이상에서 MMDevAPI 기능을 전환하는 것이 개념적으로 가능합니다. 그러나 여기에 누군가가 그렇게하기위한 코드를 제공 할 것을 기대하는 것은 약간 무리한 일입니다. 필자가 제공 한 링크를 통해 올바른 방향으로 시작할 수 있으며 길을 따라 걸리는 순간 그 장애를 해결하는 데 도움이되는 훌륭한 도움이 될 것입니다.

4

XP는 응용 프로그램 별 볼륨 제어를 지원하지 않습니다. Vista의 기능이 추가되었습니다. 그래서 당신이하려고하는 것은 공정한 방법으로 XP에서 할 수 없습니다.

XP에 복고풍 응용 프로그램 볼륨 조절 기능을 제공하는 IndieVolume이라는 소프트웨어가 있습니다. 나는 저수준 해킹, DLL 주입 등을 통해 그렇게 할 수 있다고 상상할 수 있습니다. 나는 그것이 당신에게 정말로 선택의 여지가 없다고 생각합니다.

관련 문제