使用Mixer控制
电脑编程技巧与维护的2000年3月版有很详细的东东
电脑编程技巧与维护的2000年3月版有很详细的东东
解决方案 »
- VC+SQL+ADO数据库,求指导:根据查询结果返回值
- [急切求助]WebBrowse校内网写日志,提交时提示是否离开页面。。。
- 思路问题,请教老师
- CDC中怎么绘制多行文本
- 在程序退出前用异步套接字发送数据的问题
- 关于保存图像时坐标变换的问题
- 帮忙看看下面的代码,我用winpcap发送arp数据帧,但是没有修改arp表中的mac地址,帮忙看看为什么??
- 如何把一个string 变量 转化为 Ado的字符串:m_Res_pRecordset->PutCollect("测站点",??(stirng1));
- 急诊:::如何把*.hex文件转换成*.bin文件
- 不为别的,只想送分,人人有分!
- 弱弱问题,垂手可得30分。
- 如何保存窗口的图象到内存?很简单,送分题。
MMRESULT k1;
UINT cbmxctrls;
HMIXER phmx;
UINT mixID;
MIXERLINE mxl;
MIXERLINECONTROLS pmxlc;
PMIXERCONTROL pmxlc1;
MIXERCONTROLDETAILS pmxcd;
MIXERCONTROLDETAILS_UNSIGNED Volume;
DWORD dSource;
DWORD i;
// Record Volume
k1=::mixerGetID(0,&mixID,MIXER_OBJECTF_HMIXER);
if (k1!=MMSYSERR_NOERROR)
return;
// MixerOpen
k1=::mixerOpen(&phmx,mixID,NULL,NULL,MIXER_OBJECTF_HMIXER);
if (k1!=MMSYSERR_NOERROR)
return;
// MixerGetLineInfo
mxl.cbStruct=sizeof(MIXERLINE);
mxl.dwDestination=1;
k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_DESTINATION);
if (k1!=MMSYSERR_NOERROR)
return;
lr=mxl.dwLineID;
// MixergetLineInfo
DWORD dConnections;
dConnections=mxl.cConnections;
for ( dSource=0 ; dSource<=dConnections ; dSource++)
{
mxl.dwSource=dSource; //4
k1=::mixerGetLineInfo(0, &mxl, MIXER_GETLINEINFOF_SOURCE);
lr=mxl.dwLineID;
// --- MixerGetLineControls
cbmxctrls = sizeof(*pmxlc1) * (UINT)mxl.cControls;
pmxlc1 = (PMIXERCONTROL)LocalAlloc(LPTR, cbmxctrls);
pmxlc.cbStruct=sizeof(pmxlc);
pmxlc.cControls=mxl.cControls;
pmxlc.cbmxctrl=sizeof(*pmxlc1);
pmxlc.pamxctrl=pmxlc1;
pmxlc.dwLineID=lr;//0;//MIXER_GETLINECONTROLSF_ONEBYID;
//pmxlc.dwControlType=MIXER_GETLINECONTROLSF_ONEBYTYPE;
//pmxlc.dwControlID =13;
k1=::mixerGetLineControls(0,&pmxlc,MIXER_GETLINECONTROLSF_ALL);//MIXER_GETLINECONTROLSF_ONEBYID);//MIXER_GETLINECONTROLSF_ONEBYID¦MIXER_OBJECTF_HMIXER);
// MixerGetControlDetails
/*
for ( i=0 ; i < pmxlc.cControls ;i++)
{
if ( pmxlc1[i].dwControlType==MIXERCONTROL_CONTROLTYPE_MUTE)
break; }*/
//6/30 volum============
pmxcd.cbStruct=sizeof(MIXERCONTROLDETAILS);
pmxcd.dwControlID=pmxlc1[0].dwControlID;
pmxcd.cChannels=1;
pmxcd.hwndOwner=0;
pmxcd.cbDetails=sizeof(Volume);
pmxcd.paDetails=&Volume;
k1=::mixerGetControlDetails(0,&pmxcd,MIXER_OBJECTF_WAVEOUT);//MIXER_GETCONTROLDETAILSF_VALUE);//¦MIXER_OBJECTF_WAVEOUT);
// MixerSetControlDetails
Volume.dwValue=uVolume;
//k1=::mixerGetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT) // for test
k1=::mixerSetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT)
// MixerClose
}
k1=::mixerClose(phmx); // Play Volume
k1=::mixerGetID(0,&mixID,MIXER_OBJECTF_HMIXER);
if (k1!=MMSYSERR_NOERROR)
return;
// MixerOpen
k1=::mixerOpen(&phmx,mixID,NULL,NULL,MIXER_OBJECTF_HMIXER);
if (k1!=MMSYSERR_NOERROR)
return;
// MixerGetLineInfo
mxl.cbStruct=sizeof(MIXERLINE);
mxl.dwDestination=0;
k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_DESTINATION);
if (k1!=MMSYSERR_NOERROR)
return;
lr=mxl.dwLineID;
// --- MixerGetLineInfo
mxl.cbStruct=sizeof(MIXERLINE);
mxl.dwLineID=lr;
k1=::mixerGetLineInfo(0,&mxl,MIXER_GETLINEINFOF_LINEID);
// --- MixerGetLineControls
cbmxctrls = sizeof(*pmxlc1) * (UINT)mxl.cControls;
pmxlc1 = (PMIXERCONTROL)LocalAlloc(LPTR, cbmxctrls);
pmxlc.cbStruct=sizeof(pmxlc);
pmxlc.cControls=mxl.cControls;
pmxlc.cbmxctrl=sizeof(*pmxlc1);
pmxlc.pamxctrl=pmxlc1;
pmxlc.dwLineID=lr;
k1=::mixerGetLineControls(0,&pmxlc,MIXER_GETLINECONTROLSF_ALL);
// MixerGetControlDetails
for ( i=0 ; i < pmxlc.cControls ;i++)
{
if ( pmxlc1[i].dwControlType==MIXERCONTROL_CONTROLTYPE_VOLUME)
break; }
pmxcd.cbStruct=sizeof(MIXERCONTROLDETAILS);
pmxcd.dwControlID=pmxlc1[i].dwControlID;
pmxcd.cChannels=1;
pmxcd.hwndOwner=0;
pmxcd.cbDetails=sizeof(Volume);
pmxcd.paDetails=&Volume;
k1=::mixerGetControlDetails(0,&pmxcd,MIXER_OBJECTF_WAVEOUT);//MIXER_GETCONTROLDETAILSF_VALUE);//¦MIXER_OBJECTF_WAVEOUT);
// MixerSetControlDetails
Volume.dwValue=uVolume;
k1=::mixerSetControlDetails(0,&pmxcd,0L);//MIXER_OBJECTF_WAVEOUT)
// MixerClose
k1=::mixerClose(phmx);