怎么用程序控制使用左声道,右声道,或者双声道?我现在就手动在拉,有没有控制这个的api?多谢了。 怎么用程序控制使用左声道,右声道,或者双声道?我现在就手动在拉,有没有控制这个的api?多谢了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //主 题: 如何控制系统的声音大小? 控制声音的大小,要对声卡进行操作,用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中参数中低子节为左声道音量值,高字节为右声道音量值, 请教开发进度的问题? 哪儿有vs2005的msdn 怎么取得对话框的键盘事件的ASC码,不要虚拟码 请大家帮我看一下这个函数,我优化过了,看能不能更优化一些 新问题请大家指教,让小女子安心过个节吧.呵呵 为什么变量已经使用了还是会出现变量没引用呢 大虾,帮帮忙。。。关于修改框架!!! 请问有什么VC++数据库源代码的网站最好是中文... 怎样在对话框中添加状态栏?? InstallShield11.5打的包怎么在Vista中有问题 菜单Prompt里面的\n是什么意思? 几个简单而经典的数据库编程问题,请深入浅出的回答。
控制声音的大小,要对声卡进行操作,用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中参数中低子节为左声道音量值,高字节为右声道音量值,