如何用mciSendCommand控制播放的音量? 问题如上?请给一些全面的代码?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vchelp.net/vchelp/archive.asp?type_id=19&class_id=1&cata_id=12&article_id=746 //主 题: 如何控制系统的声音大小? 控制声音的大小,要对声卡进行操作,用SDK函数waveOutSetVolume即可void CEffectsPage::OnReleasedcaptureSliderSystemVolume(NMHDR* pNMHDR, LRESULT* pResult) {m_dSystemVolume = (36-m_SystemVolume.GetPos()); TRACE("%d\n",m_dSystemVolume);UINT m_nNumMixers,Open;HMIXER m_hMixer= NULL;MIXERCAPS m_mxcaps;BOOL bSucc = TRUE;m_nNumMixers = ::mixerGetNumDevs();for(Open=0;Open<m_nNumMixers;Open++){::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));if (::mixerOpen(&m_hMixer,Open,NULL,NULL,MIXER_OBJECTF_MIXER)!= MMSYSERR_NOERROR)return ;if (::mixerGetDevCaps((UINT)m_hMixer, &m_mxcaps, sizeof(MIXERCAPS))!= MMSYSERR_NOERROR)return ;////////////////////////////MIXERLINE mxl;MIXERCONTROL mxc;MIXERLINECONTROLS mxlc;DWORD m_dwMinimum,m_dwMaximum,m_dwVolumeControlID;if (m_hMixer == NULL) return ;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 ;// get dwControlIDmxlc.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 ;// record dwControlIDm_dwMinimum = mxc.Bounds.dwMinimum;m_dwMaximum = mxc.Bounds.dwMaximum;m_dwVolumeControlID = mxc.dwControlID;////////////////////////////////////////////////MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;MIXERCONTROLDETAILS mxcd;LONG dwVal;if (m_hMixer == NULL) return ;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_GETCONTROLDETAILSF_VALUE)!= MMSYSERR_NOERROR)return ;dwVal = mxcdVolume.dwValue;dwVal=(0x0000ffff/36)*m_dSystemVolume;mxcdVolume.dwValue =dwVal ;///////////////////////////////////////////////////// MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal };// MIXERCONTROLDETAILS mxcd;if (m_hMixer == NULL) return ;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 ;//////////////////if (m_hMixer != NULL){bSucc = ::mixerClose(m_hMixer) == MMSYSERR_NOERROR;m_hMixer = NULL;}}//Set every device's volumeRegSetValueEx(m_hKey, "SystemVolume", 0, REG_DWORD, (PBYTE)&m_dSystemVolume, sizeof(float));*pResult = 0;} 回复人: tony_1029(tian) ( ) 信誉:100 2002-1-22 20:47:04 得分:0 to huazai():调用waveOutSetVolume()之后就成了单声道。 回复人: huazai() ( ) 信誉:100 2002-1-23 10:56:32 得分:0 首先在调用waveOutOpen()时,参数中设置为双声道,另外,waveOutSetVolume中参数中低子节为左声道音量值,高字节为右声道音量值 VC++中登录访问数据库(ADO) Unicode条件下的cout中文 怎么建立ADO数据库? 关于字体改变 CView 类的相关问题 怎样在Edit里面实现高亮的文本显示? 急!请问高手如何修改common open/save dialog的缺省风格? 卸载vs2005求助 如何使CEdit选中的内容发生变化时得到响应? Serialize 是否很重要? 关于C++ PRIMER 3RD里的一个范例程序在VC6里编译的问题: 请问"JP 2301",这个串如何转换成"2301 JP",简单问题,高手勿进。
控制声音的大小,要对声卡进行操作,用SDK函数waveOutSetVolume即可
void CEffectsPage::OnReleasedcaptureSliderSystemVolume(NMHDR* pNMHDR, LRESULT* pResult)
{
m_dSystemVolume = (36-m_SystemVolume.GetPos());
TRACE("%d\n",m_dSystemVolume);
UINT m_nNumMixers,Open;
HMIXER m_hMixer= NULL;
MIXERCAPS m_mxcaps;
BOOL bSucc = TRUE;
m_nNumMixers = ::mixerGetNumDevs();
for(Open=0;Open<m_nNumMixers;Open++)
{
::ZeroMemory(&m_mxcaps, sizeof(MIXERCAPS));
if (::mixerOpen(&m_hMixer,Open,NULL,NULL,MIXER_OBJECTF_MIXER)!= MMSYSERR_NOERROR)
return ;
if (::mixerGetDevCaps((UINT)m_hMixer, &m_mxcaps, sizeof(MIXERCAPS))!= MMSYSERR_NOERROR)
return ;
////////////////////////////
MIXERLINE mxl;
MIXERCONTROL mxc;
MIXERLINECONTROLS mxlc;
DWORD m_dwMinimum,m_dwMaximum,m_dwVolumeControlID;
if (m_hMixer == NULL) return ;
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 ;
// get dwControlID
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 ;
// record dwControlID
m_dwMinimum = mxc.Bounds.dwMinimum;
m_dwMaximum = mxc.Bounds.dwMaximum;
m_dwVolumeControlID = mxc.dwControlID;
////////////////////////////////////////////////
MIXERCONTROLDETAILS_UNSIGNED mxcdVolume;
MIXERCONTROLDETAILS mxcd;
LONG dwVal;
if (m_hMixer == NULL) return ;
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_GETCONTROLDETAILSF_VALUE)!= MMSYSERR_NOERROR)
return ;
dwVal = mxcdVolume.dwValue;
dwVal=(0x0000ffff/36)*m_dSystemVolume;
mxcdVolume.dwValue =dwVal ;
///////////////////////////////////////////////////
// MIXERCONTROLDETAILS_UNSIGNED mxcdVolume = { dwVal };
// MIXERCONTROLDETAILS mxcd;
if (m_hMixer == NULL) return ;
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 ;
//////////////////
if (m_hMixer != NULL)
{
bSucc = ::mixerClose(m_hMixer) == MMSYSERR_NOERROR;
m_hMixer = NULL;
}
}//Set every device's volume
RegSetValueEx(m_hKey, "SystemVolume", 0, REG_DWORD, (PBYTE)&m_dSystemVolume, sizeof(float));
*pResult = 0;
}
回复人: tony_1029(tian) ( ) 信誉:100 2002-1-22 20:47:04 得分:0
to huazai():调用waveOutSetVolume()之后就成了单声道。
回复人: huazai() ( ) 信誉:100 2002-1-23 10:56:32 得分:0
首先在调用waveOutOpen()时,参数中设置为双声道,另外,waveOutSetVolume中参数中低子节为左声道音量值,高字节为右声道音量值