지금 좋은 Mixer API를 사용하고 있지만 Windows Vista & 7에서는 XP 호환 모드가 아니라 정상적으로 작동하지 않습니다. 그것은 현재 애플 리케이션에 대해서만 소리를 음소거하지만, 나는 글로벌 (하드웨어) 음소거가 필요합니다. 목표를 재검토하는 방법? 순수한 C/C++에서 COM 인터페이스 및 이상한 호출을 사용하여이 코드를 작성할 수있는 방법이 있습니까?Vista 및 7에서 사운드를 전체적으로 음소거 및 음소거 해제하고 음소거 상태를 유지하는 방법?
2
A
답변
3
Vista에서는 오디오 스택이 크게 재 작성되었습니다. 애플리케이션 당 볼륨과 음소거 컨트롤은 실제로 새로운 기능 중 하나였습니다. IAudioEndpointVolume interface을 사용하려면 이상한 전화가 필요합니다.
0
최근에 같은 문제가 발생했습니다. 우리는 알람을 위해 사운드 시스템을 사용하는 Windows 응용 프로그램을 가지고 있습니다. 우연히 사운드 시스템을 음소거하는 사용자는 지킬 수 없습니다. 다음은이 문제를 해결하기 위해 위에 제안 된 인터페이스를 사용하는 방법입니다.
초기화하는 동안 IAudioEndpointVolume 유형의 멤버를 초기화하는 함수를 추가했습니다. 조금 까다 롭고 도움이 될만한 도움이되지 못했습니다. 그 방법은 다음과 같습니다
/****************************************************************************
** Initialize the Audio Endpoint (Only for post XP systems)
****************************************************************************/
void CMuteWatchdog::InitAudioEndPoint(void)
{
HRESULT hr;
IMMDeviceEnumerator * pDevEnum;
IMMDevice * pDev;
const CLSID CLSID_MMDeviceEnumerator = __uuidof(MMDeviceEnumerator);
const IID IID_IMMDeviceEnumerator = __uuidof(IMMDeviceEnumerator);
hr = CoCreateInstance(CLSID_MMDeviceEnumerator, NULL,
CLSCTX_ALL, IID_IMMDeviceEnumerator,
(void**)&pDevEnum);
m_pIaudEndPt = NULL;
if(hr == S_OK)
{
hr = pDevEnum->GetDefaultAudioEndpoint(eRender, eConsole, &pDev);
if(hr == S_OK)
{
DWORD dwClsCtx;
const IID iidAEV = __uuidof(IAudioEndpointVolume);
dwClsCtx = 0;
hr = pDev->Activate(iidAEV, dwClsCtx, NULL, (void**) &m_pIaudEndPt);
if(hr == S_OK)
{
// Everything is groovy.
}
else
{
m_pIaudEndPt = NULL; // Might mean it's running on XP or something. Don't use.
}
pDev->Release();
}
pDevEnum->Release();
}
}
... 나는 다음에 대한 간단한 호출을 추가 초에 한 번 소개
: 프로그램이 단지 해제 기억 종료 할 때, 마지막으로
////////////////////////////////////////////////////////////////////////
// Watchdog function for mute.
void CMuteWatchdog::GuardMute(void)
{
if(m_pIaudEndPt)
{
BOOL bMute;
HRESULT hr;
bMute = FALSE;
hr = m_pIaudEndPt->GetMute(&bMute);
if(hr == S_OK)
{
if(bMute)
{
m_pIaudEndPt->SetMute(FALSE, NULL);
}
}
}
}
을 할당 된 자원.
////////////////////////////////////////////////////////////////////////
// De-initialize the watchdog
void CMuteWatchdog::OnClose(void)
{
if(m_pIaudEndPt)
{
m_pIaudEndPt->Release();
m_pIaudEndPt = NULL;
}
}
관련 문제
- 1. Android MediaPlayer 음소거 및 음소거 해제
- 2. 음소거 상태를 알 수 없을 때 음소거 논리를 작성하는 방법
- 3. 음소거 옵션을 만드는 방법
- 4. Windows Mobile Pocket PC 음소거 방법 | 음소거 해제 (마이크)
- 5. Java 애플릿의 음소거 소리
- 6. as3 외부 swf로드, 재생 및 음소거
- 7. Windows XP - 프로그래밍 방식으로 파이썬에서 오디오 음소거/음소거 해제
- 8. iPhone - 볼륨/음소거 버튼
- 9. C# 앱에서 브라우저를 음소거 하시겠습니까?
- 10. 플래시 As3 음소거 버튼 문제
- 11. C++의 SDL 음소거 볼륨
- 12. NetStream을 음소거 할 수 없음
- 13. 음소거 및 음소거 해제 기능을 사용하여 IE (7+)에 자바 스크립트 기능 포함
- 14. Vista에서 음소거 특정 응용 프로그램
- 15. WatiN IE 브라우저 사운드를 어떻게 음소거 할 수 있습니까?
- 16. 프로그래밍 방식으로 iPhone을 음소거 할 수 있습니까?
- 17. 휴대 전화 음소거 중 앱이 동결됩니다.
- 18. Actionscript-2에서 스트리밍 비디오의 모든 소리 음소거
- 19. MPMusicPlayerController가 장치 음소거 스위치를 준수하지 않습니까?
- 20. win CE에서 응용 프로그램 볼륨 음소거
- 21. 오디오 임베딩을위한 사용자 지정 음소거 버튼?
- 22. 마스터 볼륨이 음소거 상태인지 어떻게 알 수 있습니까?
- 23. 음소거/재생/정지/등으로부터 입력을 수신합니다. Dell Inspiron 노트북 앞면
- 24. Rails 3 사용 중단 경고를 선택적으로 음소거 할 수 있습니까?
- 25. iPhone SDK의 음소거/볼륨 투명 사각형과 같은 메시지 표시
- 26. Android - 현재 재생중인 오디오 응용 프로그램을 음소거 할 수 있습니까?
- 27. foxpro에서 볼륨을 변경하거나 마이크를 음소거 할 수 있습니까?
- 28. iPhone SDK : 음소거 스위치가 켜져있을 때 오디오 경로를 설정하고 오디오를 음소거합니다.
- 29. 은 Vista 및 7에서 관리자로 실행해야합니다.
- 30. Visual Studio를 사용하여 Windows에서 C# 코드와 음소거 된 C++ 코드를 함께 사용
위의 문제에 대한 샘플을 제공해 주시겠습니까? COM에서 기권하고 순수한 C 또는 C++로 코드를 작성하는 방법이 있습니까? –
전에 COM 코드를 작성한 적이 없다면 축복받은 삶을 살았을 것입니다. 주변에는 방법이 없습니다. 인터페이스를 설계 한 사람으로부터 코드 샘플을 얻을 수 있습니다. 링크 : http://blogs.msdn.com/larryosterman/archive/2007/03/06/how-do-i-change-the-master-volume-in-windows-vista.aspx –