Volume对应的值 MIXERLINE_COMPONENTTYPE_DST_SPEAKERS
CD 对于的值 MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC
Midi对应的值为 MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER
Wave对应的值为 MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT
Line in对应的值为 MIXERLINE_COMPONENTTYPE_SRC_LINE
Microphone对应的值为 MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE
我们可以通过音频线路的类型值获得相应的线路的信息,也可以通过音频线路的设备ID来获取相应的线路的信息。
下面开始我们编程吧。
首先定义三个变量
UINT m_uMxId; //mixer的ID
HWND m_hWnd; //回调窗口句柄
HMIXER m_hmx; //
然后就是要打开mixer,可以在对话的初始化中作这些工作。
#define MAX_VOL_VALUE 65535
if (MMSYSERR_NOERROR != mixerOpen(&m_hmx, m_uMxId,(DWORD)m_hWnd, 0, CALLBACK_WINDOW))
{
return FALSE;
}
if (MMSYSERR_NOERROR == mixerGetID((HMIXEROBJ)m_hmx, &m_uMxId, MIXER_OBJECTF_HMIXER))
{
return m_uMxId;
}
//设置Volume的滑动条的范围这里只以Volume为例。
m_SliderWaveL.SetRange(0, MAX_VOL_VALUE, TRUE);
m_SliderWaveR.SetRange(0, MAX_VOL_VALUE, TRUE);
接着我先演示一下如何获取和设置录音设备的左右声道的音量值,以及如何静音放音设备,这里以Volume为例,其他的设备类似,你可以照着我的代码,套用即可。
1、如何获取Volume设备的音量大小
DWORD dwLValue;
DWORD dwRValue;
GetVolume(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, &dwLValue,&dwRValue);
//GetVolume函数的定义见下面,然后根据返回的值调整滑动条的位置
m_SliderVolR.SetPos(MAX_VOL_VALUE - dwLValue);
m_SliderVolL.SetPos(MAX_VOL_VALUE - dwRValue);
2、如何根据滑动条的位置来调整系统音量的大小
void CMixerControlDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// m_dwSpkR和m_dwSpkL是用来记录Volume左右声道的音量值,0~~65535
CSliderCtrl *pSlider = (CSliderCtrl *)pScrollBar;
int nValue = MAX_VOL_VALUE - pSlider->GetPos(); //获取滑动条的位置pos
else if (m_SliderVolR.m_hWnd == pSlider->m_hWnd)
{
//如果拖动的是Volume的左声道
m_dwSpkR = nValue;
// 设置Volume的音量值
SetVolume(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, m_dwSpkL, m_dwSpkR);
}
else if (m_SliderVolL.m_hWnd == pSlider->m_hWnd)
{
//Volume右声道
m_dwSpkL = nValue;
// 设置Volume的音量值
SetVolume(MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, m_dwSpkL, m_dwSpkR);
}
//其他音频线路可以依次类推在下面添加
}
GetVolume和SetVolume函数的定义下面给出
BOOL CMixer::SetVolume(DWORD dwSrcType, DWORD dwLValue, DWORD dwRValue, BOOL bMono)
{
MIXERLINE mxl;
if (! GetLineInfo(&mxl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, dwSrcType))
return FALSE;
MIXERCONTROL mxc;
if (! GetLineControl(&mxc, &mxl, MIXERCONTROL_CONTROLTYPE_VOLUME))
return FALSE;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED mxcd_u1;
MIXERCONTROLDETAILS_UNSIGNED mxcd_u[2];
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cMultipleItems = 0;
if (bMono)
{
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(mxcd_u1);
mxcd.paDetails = &mxcd_u1;
mxcd_u1.dwValue = dwLValue;
}
else
{
mxcd.cChannels = mxl.cChannels;
mxcd.cbDetails = sizeof(*mxcd_u);
mxcd.paDetails = mxcd_u;
mxcd_u[0].dwValue = dwLValue;
mxcd_u[1].dwValue = dwRValue;
}
if (! SetControlDetails(&mxcd, MIXER_OBJECTF_MIXER))
return FALSE;
return TRUE;
}
BOOL CMixer::GetVolume(DWORD dwSrcType, DWORD* pdwLValue, DWORD* pdwRValue, BOOL bMono)
{
MIXERLINE mxl;
if (! GetLineInfo(&mxl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, dwSrcType))
return FALSE;
MIXERCONTROL mxc;
if (! GetLineControl(&mxc, &mxl, MIXERCONTROL_CONTROLTYPE_VOLUME))
return FALSE;
MIXERCONTROLDETAILS mxcd;
MIXERCONTROLDETAILS_UNSIGNED mxcd_u1;
MIXERCONTROLDETAILS_UNSIGNED mxcd_u[2];
mxcd.cbStruct = sizeof(mxcd);
mxcd.dwControlID = mxc.dwControlID;
mxcd.cMultipleItems = 0;
if (bMono)
{
mxcd.cChannels = 1;
mxcd.cbDetails = sizeof(mxcd_u1);
mxcd.paDetails = &mxcd_u1;
if (! GetControlDetails(&mxcd, MIXER_GETCONTROLDETAILSF_VALUE))
return FALSE;
*pdwLValue = mxcd_u1.dwValue;
}
else
{
mxcd.cChannels = mxl.cChannels;
mxcd.cbDetails = sizeof(*mxcd_u);
mxcd.paDetails = mxcd_u;
if (! GetControlDetails(&mxcd, MIXER_GETCONTROLDETAILSF_VALUE))
return FALSE;
*pdwLValue = mxcd_u[0].dwValue;
*pdwRValue = mxcd_u[1].dwValue;
}
return TRUE;
}
BOOL GetLineInfo(LPMIXERLINE pmxl, DWORD dwDstType, DWORD dwSrcType)
{
MIXERCAPS mxcaps;
if (! GetDevCaps(&mxcaps))
return FALSE;
UINT u=0;
do
{
pmxl->cbStruct = sizeof(*pmxl);
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关文章
热点关注
- C 的面试题哦~
- hd7279键盘显示芯片c51代
- C语言的常用库函数使用方
- 什么是迭代跟递归算法?
- c#中父窗口和子窗口之间
- c#结合串口通信类实现串
- c#利用正则表达式实现字
- 用visual c#中轻松浏览
- C语言的常用库函数使用方
- C语言面试题大汇总之华为
- c#.net网络程式研发-sock
- c#实现smtp服务器,使用t
- C语言图像处理
- 如何自画ListView的Item(
- Linux下C语言编程基础知
- C 中对浮点数的格式化显
- 用c#实现由15位身份证号
- Windows Mobile 研发常见
- 在Visual C 中使用fopen
- Linux on POWER 中的 GNU
- uC/OS-II在ARM系统上的移
- C 嵌入式系统中应用
- C/C 中动态链接库的创建
- 关于c#中的datetime类型
- 用c#实现智能设备上的not
- C 中的指针(三) 智能指
- ASP.NET中使用TreeView控
- 使用c#创建sql server的
- C 中的动态多维数组
- c# enum设计和使用的相关
- Visual C /MFC入门教程
- 获取WinNT/Win2k当前用户
- 实现ComboBox输入文字的
- excel 2007单元格及内容
- C语言经典100例(一)
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD




