《Visual C++开发技术大全》第26章声音与动画编程,本章讲述在VC 6.0环境下,如何使用Win32、GDI、GDI+、DirectShow等开发接口实现声音与动画的处理。本小节为大家介绍控制音量。
26.1.3 控制音量
Windows API中提供了可以控制音量的接口函数。使用auxGetNumDevs()函数可以获取当前系统中安装的声卡数目。其函数原型为:
- UINT auxGetNumDevs(VOID);
此函数的返回值为当前系统中安装的设备数目。如果返回值为0,表示当前系统中没有声卡或有错误发生。auxGetVolume()函数返回指定的音频输出设备的当前音量。其函数原型为:
- MMRESULT auxGetVolume( UINT uDeviceID, // 指定
要查询当前音量的音频设备的标识符- LPDWORD lpdwVolume); // 用于
存放返回的音频设备的当前音量值
函数如果返回0xFFFF表示最大音量,返回0x0000表示静音。如果函数调用成功,则返回MMSYSERR_NOERROR。auxSetVolume()函数设置指定音频输出设备的音量。其函数原型为:
- MMRESULT auxSetVolume( UINT uDeviceID, // 指定要
设置音量的音频设备的标识符- DWORD dwVolume); // 指定
要设置的音频设备的音量
如果设置音量成功,则返回MMSYSERR_NOERROR。下面的代码结合这3个函数,设置当前音量。
- void CSoundSampleDlg::OnButtonCtrlvolumn() // 设置音量
- {
- MMRESULT mmResult;
// 定义操作结果- DWORD dwDevNum;
// 定义设备数目变量- dwDevNum = ::auxGetNumDevs();
// 获取设备数目- if (dwDevNum>0)
// 如果设备数目大于1- {
- DWORD dwVolume1;
- mmResult=auxGetVolume(AUX_MAPPER,
&dwVolume1); // 获取设备音量- if (mmResult != MMSYSERR_NOERROR)
// 判断操作结果- {
- if (mmResult == MMSYSERR_
BADDEVICEID)WriteLog("音频设备无效");- else WriteLog("获取当前音频设备的音量失败");
- return;
- }
- UpdateData(false);
- CString log;
- DWORD dwVolume2 = m_Volumn;
- mmResult=auxSetVolume(AUX_MAPPER,
dwVolume2); // 设置音量- if (mmResult != MMSYSERR_NOERROR)
- log.Format("设置音量失败。原来音量=%d", dwVolume1);
- else
- log.Format("设置音量成功。原来音量=%d;设
置后的音量=%d", dwVolume1,- dwVolume2);WriteLog(log);
- }
- else WriteLog("没有有效的音频设备");
// 输出错误提示- }
上面的函数,首先调用auxGetNumDevs()函数获取当前安装的声卡的数目。如果当前系统中安装了声卡,则调用auxGetVolume()函数获取声卡的当前音量,然后调用auxSetVolume()函数设置用户指定的音量。
http://book.51cto.com/art/201008/216717.htm