请教如何使用mciSendCommand调节MP3的音量
请问怎么使用mciSendCommand调节MP3的音量
找了很多的资料。都失败了
求教。
我是想自己做一个MP3播放器,现在在写一个类把这MCI封装起来
现在已经实现了打开,播放,暂停/继续,停止,关闭这些功能了
现在是想用VC6的滑块控件做一个音量的控制,但不知道该怎么做
用mciSendCommand
------解决方案--------------------
http://topic.****.net/u/20090723/15/136fa124-df26-4a55-83eb-36f4e62f4377.html?62667
------解决方案--------------------
我程序中完整的设置音量的函数代码,供参考
找了很多的资料。都失败了
求教。
我是想自己做一个MP3播放器,现在在写一个类把这MCI封装起来
现在已经实现了打开,播放,暂停/继续,停止,关闭这些功能了
现在是想用VC6的滑块控件做一个音量的控制,但不知道该怎么做
用mciSendCommand
------解决方案--------------------
http://topic.****.net/u/20090723/15/136fa124-df26-4a55-83eb-36f4e62f4377.html?62667
------解决方案--------------------
我程序中完整的设置音量的函数代码,供参考
- C/C++ code
// .h文件 bool WINAPI SetVolume(long dev,long vol);//设置设备的音量 bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc); bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume); // .cpp文件 bool WINAPI SetVolume(long dev,long vol)//设置设备的音量 { // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN // vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值 // retrun false 表示设置音量的大小的操作不成功 // retrun true 表示设置音量的大小的操作成功 long device; bool rc=false; MIXERCONTROL volCtrl; HMIXER hmixer; switch (dev) { case WAVE: device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break; case MIDI: device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break; case LINE_IN: device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; case MIC: device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;break; default: device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; } if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0; if(GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl)) { vol=vol*volCtrl.Bounds.lMaximum/100; if(SetVolumeValue(hmixer,&volCtrl,vol)) rc=true; } mixerClose(hmixer); return rc; } bool GetVolumeControl(HMIXER hmixer ,long componentType,long ctrlType,MIXERCONTROL* mxc) { MIXERLINECONTROLS mxlc; MIXERLINE mxl; mxl.cbStruct = sizeof(mxl); mxl.dwComponentType = componentType; if(!mixerGetLineInfo((HMIXEROBJ)hmixer, &mxl, MIXER_GETLINEINFOF_COMPONENTTYPE)) { mxlc.cbStruct = sizeof(mxlc); mxlc.dwLineID = mxl.dwLineID; mxlc.dwControlType = ctrlType; mxlc.cControls = 1; mxlc.cbmxctrl = sizeof(MIXERCONTROL); mxlc.pamxctrl = mxc; if(mixerGetLineControls((HMIXEROBJ)hmixer,&mxlc,MIXER_GETLINECONTROLSF_ONEBYTYPE)) return 0; else return 1; } return 0; } bool SetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc, long volume) { MIXERCONTROLDETAILS mxcd; MIXERCONTROLDETAILS_UNSIGNED vol;vol.dwValue = volume; mxcd.hwndOwner = 0; mxcd.dwControlID = mxc->dwControlID; mxcd.cbStruct = sizeof(mxcd); mxcd.cbDetails = sizeof(vol); mxcd.paDetails = &vol; mxcd.cChannels = 1; if(mixerSetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_SETCONTROLDETAILSF_VALUE)) return 0; return 1; }