声音调节器
来源:互联网 发布:管家婆软件厦门专卖店 编辑:程序博客网 时间:2024/04/29 20:00
1.包含文件
#include <mmsystem.h>
#pragma comment(lib,"Winmm.lib")
2.定义变量
UINT m_nNumMixers;
HMIXER m_hMixer;
MIXERCAPS m_mxcaps;
CString m_strDstLineName,m_strVolumeControlName;
DWORD m_dwMinimum,m_dwMaximum;
DWORD m_dwVolumeControlID;
3.初始化:
BOOL CVolumeCtrl::amdInitialize()
{
m_nNumMixers = ::mixerGetNumDevs();
m_hMixer = NULL;
::ZeroMemory(&m_mxcaps,sizeof(MIXERCAPS));
if(m_nNumMixers != 0) {
if(::mixerOpen(&m_hMixer,
0,
(DWORD)m_hParent->GetSafeHwnd(),
NULL,
MIXER_OBJECTF_MIXER|CALLBACK_WINDOW)
!= MMSYSERR_NOERROR) {
return FALSE;
}
if(::mixerGetDevCaps((UINT)m_hMixer,&m_mxcaps,sizeof(MIXERCAPS))
!= MMSYSERR_NOERROR) {
return FALSE;
}
}
else {
return FALSE;
}
return TRUE;
}
4.设置声音
BOOL CVolumeCtrl::SetVolume(DWORD dwVol)
{
if(m_hMixer == NULL ||
m_strDstLineName.IsEmpty() ||
m_strVolumeControlName.IsEmpty()
) {
return FALSE;
}
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwVolumeControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
if(::mixerSetControlDetails((HMIXEROBJ)m_hMixer,
&mxcd,
MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR) {
return FALSE;
}
return TRUE;
}
5.获取声音:
BOOL CVolumeCtrl::GetVolume(DWORD &dwVol)
{
if(m_hMixer == NULL ||
m_strDstLineName.IsEmpty() ||
m_strVolumeControlName.IsEmpty()
) {
return FALSE;
}
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = {dwVol};
MIXERCONTROLDETAILS mxcd;
mxcd.cbStruct = sizeof(MIXERCONTROLDETAILS);
mxcd.dwControlID = m_dwVolumeControlID;
mxcd.cChannels = 1;
mxcd.cMultipleItems = 0;
mxcd.cbDetails = sizeof(MIXERCONTROLDETAILS_UNSIGNED);
mxcd.paDetails = &mxcdVolume;
if(::mixerGetControlDetails((HMIXEROBJ)m_hMixer,
&mxcd,
MIXER_OBJECTF_HMIXER | MIXER_SETCONTROLDETAILSF_VALUE)
!= MMSYSERR_NOERROR) {
return FALSE;
}
dwVol = mxcdVolume.dwValue;
return TRUE;
}
6.
BOOL CVolumeCtrl::amdGetVolumeControl()
{
m_strDstLineName.Empty();
m_strVolumeControlName.Empty();
if(m_hMixer == NULL) {
return FALSE;
}
MIXERLINE mxl;
mxl.cbStruct = sizeof(MIXERLINE);
mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
if(::mixerGetLineInfo((HMIXEROBJ)m_hMixer,
&mxl,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINEINFOF_COMPONENTTYPE)
!= MMSYSERR_NOERROR) {
return FALSE;
}
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
mxlc.cbStruct = sizeof(MIXERLINECONTROLS);
mxlc.dwLineID = mxl.dwLineID;
mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME;
mxlc.cControls = 1;
mxlc.cbmxctrl = sizeof(MIXERCONTROL);
mxlc.pamxctrl = &mxc;
if(::mixerGetLineControls((HMIXEROBJ)m_hMixer,
&mxlc,
MIXER_OBJECTF_HMIXER |
MIXER_GETLINECONTROLSF_ONEBYTYPE)
!= MMSYSERR_NOERROR) {
return FALSE;
}
m_strDstLineName = mxl.szName;
m_strVolumeControlName = mxc.szName;
m_dwMinimum = mxc.Bounds.dwMinimum;
m_dwMaximum = mxc.Bounds.dwMaximum;
m_dwVolumeControlID = mxc.dwControlID;
return TRUE;
}
- 声音调节器
- KDE没有声音调节器
- 调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- 变量调节器
- PID调节器
- 声音
- 声音
- 声音
- ping(1)
- SilkPerformer使用点滴-转载
- ping(2)
- VC字符串转换(附数据类型转换)
- Oracle--sqlldr用法[转]
- 声音调节器
- DOS下的文件传输(以bit传送)
- window.print()使用
- C/C++正则表达式编程
- MTD源码学习报告001
- 在VC中调用 WebService
- C 规则表达式入门
- 最常见的20种VC++编译错误信息
- Windows Xp Sp3简体中文补丁包下载地址