11.2.3 音量大小控制
音量控制是多媒体应用的主要部分,在音频采集方面可以起到辅助控制录制效果的作用。使用MCI(The Media Control Interface)接口可以进行音量控制。系统提供了一个音量控制的程序,通过该程序可以控制不同类型音量,音量控制程序运行如图11.6所示。
其中,Volume表示系统总音量,Wave表示波形音量,SW Synth表示SW设备音量,CD Player表示CD控制线,Line In表示磁带设备音量,Microphone表示麦克风音量。
图11.6 音量控制程序
为了实现音量的控制,微软提供了一些与Mixer(混音器)相关的API函数。在控制系统总音量时,首先通过mixerOpen函数打开混音设备,然后通过mixerGetLineInfo函数获取控制线信息取得设备ID号并通过mixerGetLineControls函数得到控制线的控制,最后通过mixerGetControlDetails得到具体的音量信息,通过mixerSetControlDetails函数来设置音量。
(1)mixerOpen函数用于打开指定的混音器设备,并确保在应用程序关闭之前设备不被移除。
语法:
MMRESULT mixerOpen( LPHMIXER phmx, UINT uMxld, DWORD dwCallback, DWORD dwlnstance, DWORD fdwOpen ); |
(2)mixerGetLineInfo函数用于获取混音器设备指定的线路信息。
语法:
MMRESULT mixerGetLinelnfo( HMIXEROBJ hmxobj, LPMIXERLINE pmxl, DWORD fdwlnfo ); |
(3)mixerGetLineControls函数用于获取关联音频线路的一个或多个控制器。
语法:
MMRESULT mixerGetLineControls ( HMIXEROBJ hmxobj, LPMIXERLINE CONTROLS pmxlc, DWORD fdwControls ); |
(4)mixerGetControlDetails函数用于获取指定控制器的详细信息。
语法:
MMRESULT mixerGetControlDetails ( HMIXEROBJ hmxobj, LPMIXER CONTROLDETAILS pmxcd, DWORD fdwDetails ); |
(5)mixerSetControlDetails函数用于设置指定控制器的详细信息。
语法:
MMRESULT mixerSetControlDetails ( HMIXEROBJ hmxobj, LPMIXER CONTROLDETAILS pmxcd, DWORD fdwDetails ); |
下面通过实例来介绍如何控制音量大小。
例如:
控制音量大小的应用程序设计步骤如下。
ch1106实例位置:mr\11\sl\06
(1)新建MFC对话框工程,工程名设置为“ControlSound”。
(2)在对话框上添加一个滑标控件,图片控件和两个静态文本控件。
(3)通过类向导为滑标控件添加成员变量m_control。
(4)在实现文件ControlSoundDlg.cpp中加入多媒体库的头文件引用及多媒体静态库的链接。
#include |
(5)在头文件中加入类成员变量的定义。
HMIXER m_hMixer; |
(6)在对话框初始化工程中可以先获取音量的大小。
BOOL CControlSoundDlg::OnInitDialog() |
(7)添加滑标控件的WM_HSCROLL消息的实现函数,该函数不能通过类向导添加,需要手动添加,首先在头文件ControlSoundDlg.h进行函数声明。
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); |
ON_WM_HSCROLL() |
void CControlSoundDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) |
(8)当音量发生改变时,系统会向程序发送MM_MIXM_CONTROL_CHANGE消息,可以通过对该消息进行映射,来达到当系统音量改变时应用程序滑标也发生变化。对MM_MIXM_CONTROL_CHANGE消息进行映射首先在头文件中加入函数声明。
afx_msg LONG OnMixerCtrlChange(UINT wParam, LONG lParam); |
ON_MESSAGE(MM_MIXM_CONTROL_CHANGE,OnMixerCtrlChange) |
LONG CControlSoundDlg::OnMixerCtrlChange(UINT wParam, LONG lParam) |
| 回书目 上一节 下一节 |
|
· 系统分析师自测获奖名.. · Linux结课考试自测获奖.. · 上周Linux系统命令的使.. · 上周真题冲刺测试获奖.. · 全国计算机等考四级模.. · 08年3月各大网上书店及.. |
· 网络工程师模拟测试获.. · 全国计算机软考考试指.. · 3月24日WCF聊天活动 积.. · 全国计算机等级考试四.. · 软件项目估计:第2版 · 系统分析师基础知识自.. |
|
||||
| · 2008年上半年全国软考.. · 微软出价446亿美元收购.. · 华为员工自杀频频拷问.. · 三层交换技术专题 · ARP攻击防范与解决方案 · 隐私保护技术探讨 · 反垃圾邮件技术应用 · 龙芯要做中国的“奔腾” |
· Windows Server 2008专.. · AMD Phenom三核处理器.. · 路由器设置与口令恢复 · 微软Forefront企业安全.. · LAMP技术精解 · 企业数据恢复指南 · 技术人求职简历完备手册 · Apache技术专题 |
|||
|
||||
| · SQL Server 2008/2005.. · SOA 面向服务架构 · SQL Server 2008/2005.. · iSCSI应用与发展 · RAID——磁盘阵列基础 · Apache技术专题 · 中间件应用技术专题 · 三层交换技术专题 |
· SQL Server入门到精通 · Apache技术专题 · 国际文档格式标准开战 · 路由器设置与口令恢复 · 打造安全服务器 · SOA 面向服务架构 · PHP开发应用手册 · 企业数据恢复指南 |
|||
|
||||
| · iSCSI应用与发展 · 中间件应用技术专题 · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · iSCSI应用与发展 · 三层交换技术专题 |
· Apache技术专题 · RAID——磁盘阵列基础 · 企业数据恢复指南 · 路由器设置与口令恢复 · SOA 面向服务架构 · ADSL应用面面俱到 · ADSL应用面面俱到 · 反垃圾邮件技术应用 |
|||