星小夜的登录器  v1.0
mediamute.cpp
浏览该文件的文档.
1 
10 #include "mediamute.h"
11 #include "mutedsessionevents.h"
12 
13 extern volatile bool g_bMuted;
14 
15 static IMMDeviceEnumerator* m_pEnumerator = NULL;
16 static IMMDevice* m_pDeviceOut = NULL;
17 static IAudioSessionManager* m_AudioSessionManager = NULL;
18 static IAudioSessionControl* m_AudioSessionControl = NULL;
25 {
26  CoInitializeEx( NULL , COINIT_MULTITHREADED );
27 
28  HRESULT hr;
29 
30  //实例化 MMDeviceEnumerator 枚举器
31  hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL,CLSCTX_ALL, __uuidof(IMMDeviceEnumerator),(void**)&m_pEnumerator);
32 
33 
34  // 默认设备的IMMDevice接口
35  hr = m_pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &m_pDeviceOut);
36 
37 
38  // 得到音频会话接口IAudioSessionManager
39  hr = m_pDeviceOut->Activate(__uuidof(m_AudioSessionManager), CLSCTX_ALL, NULL, (void**)&m_AudioSessionManager);
40 
41 
42  // 设置会话(Session)参数
43  hr = m_AudioSessionManager->GetAudioSessionControl(NULL,0,&m_AudioSessionControl);
44 
45 
46  // 设置声音改变参数通知
48  hr = m_AudioSessionControl->RegisterAudioSessionNotification(m_pMutedSessionEvents);
49 
50 
51 }
57 {
58  // ---- 解注册声音改变参数通知
60  {
61  m_AudioSessionControl->UnregisterAudioSessionNotification(m_pMutedSessionEvents);
62  }
63 
64  // ---- 释放内存空间
65  if (m_AudioSessionControl != NULL)
66  {
67  m_AudioSessionControl->Release();
68  m_AudioSessionControl = NULL;
69  }
70  if (m_pMutedSessionEvents != NULL)
71  {
73  m_pMutedSessionEvents = NULL;
74  }
75  if (m_pDeviceOut != NULL)
76  {
77  m_pDeviceOut->Release();
78  m_pDeviceOut = NULL;
79  }
80  if(m_AudioSessionManager != NULL)
81  {
82  m_AudioSessionManager->Release();
83  m_AudioSessionManager = NULL;
84  }
85  if (m_pEnumerator != NULL)
86  {
87  m_pEnumerator->Release();
88  m_pEnumerator = NULL;
89  }
90 
91  CoUninitialize();
92 
93  return true;
94 }
102 bool MediaMute::SetMute(bool mute)
103 {
104  HRESULT hr = S_FALSE;
105 
106  // 获得音量、静音控制接口
107  ISimpleAudioVolume *pAudioVolume = NULL;
108  hr = m_AudioSessionManager->GetSimpleAudioVolume(NULL,0,&pAudioVolume);
109  if (FAILED(hr)) return false;
110 
111  if(SUCCEEDED(hr))
112  {
113  pAudioVolume->SetMute(mute, &GUID_NULL);
114 
115  // 更改全局静音状态
116  g_bMuted = mute;
117  }
118 
119  if (pAudioVolume != NULL)
120  {
121  pAudioVolume->Release();
122  pAudioVolume = NULL;
123  }
124  return true;
125 }
mutedsessionevents.h
静音功能依赖头文件
MediaMute::SetMute
bool SetMute(bool mute)
设置静音状态
Definition: mediamute.cpp:102
m_pEnumerator
static IMMDeviceEnumerator * m_pEnumerator
Definition: mediamute.cpp:15
CMutedSessionEvents
Definition: mutedsessionevents.h:18
m_pDeviceOut
static IMMDevice * m_pDeviceOut
Definition: mediamute.cpp:16
m_AudioSessionManager
static IAudioSessionManager * m_AudioSessionManager
Definition: mediamute.cpp:17
m_AudioSessionControl
static IAudioSessionControl * m_AudioSessionControl
Definition: mediamute.cpp:18
mediamute.h
静音功能头文件
m_pMutedSessionEvents
static CMutedSessionEvents * m_pMutedSessionEvents
Definition: mediamute.cpp:19
MediaMute::MediaMute
MediaMute()
媒体静音类构造函数
Definition: mediamute.cpp:24
CMutedSessionEvents::Release
ULONG STDMETHODCALLTYPE Release()
Definition: mutedsessionevents.cpp:20
g_bMuted
volatile bool g_bMuted
全局静音标志
Definition: main.cpp:22
MediaMute::UnMute
bool UnMute()
解除静音
Definition: mediamute.cpp:56