星小夜的登录器  v1.0
Public 成员函数 | 所有成员列表
MediaMute类 参考

媒体静音类 用于媒体静音 更多...

#include <mediamute.h>

Public 成员函数

 MediaMute ()
 媒体静音类构造函数 更多...
 
bool SetMute (bool mute)
 设置静音状态 更多...
 
bool UnMute ()
 解除静音 更多...
 

详细描述

媒体静音类 用于媒体静音

在文件 mediamute.h20 行定义.

构造及析构函数说明

◆ MediaMute()

MediaMute::MediaMute ( )

媒体静音类构造函数

返回

在文件 mediamute.cpp24 行定义.

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 }

成员函数说明

◆ SetMute()

bool MediaMute::SetMute ( bool  mute)

设置静音状态

参数
mutetrue为静音/false为解除静音
返回
设置是否成功
返回值
true设置成功
false设置失败

在文件 mediamute.cpp102 行定义.

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 }
这是这个函数的调用关系图:

◆ UnMute()

bool MediaMute::UnMute ( )

解除静音

返回
只有true,因为指针释放失败会直接进程结束

在文件 mediamute.cpp56 行定义.

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 }
函数调用图:

该类的文档由以下文件生成:
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
m_pMutedSessionEvents
static CMutedSessionEvents * m_pMutedSessionEvents
Definition: mediamute.cpp:19
CMutedSessionEvents::Release
ULONG STDMETHODCALLTYPE Release()
Definition: mutedsessionevents.cpp:20
g_bMuted
volatile bool g_bMuted
全局静音标志
Definition: main.cpp:22