设置和获得混音器音量

                                                         设置和获得混音器音量

  //如果第一个参数是true,那么就是设置,否则就是获得 bool CTalkBackDlg::SetGetDevVolume(bool bIsSet,DWORD & dwVolume) { MMRESULT rc; // 多媒体函数返回结果变量 HMIXER hMixer; // 混合器设备句柄 MIXERLINE mxl; // 音频线路标准状态信息结构体 MIXERLINECONTROLS mxlc; // 音频线路控制器集合信息结构体 MIXERCONTROL mxc; // 单个音频线路控制器信息结构体 // 打开混合器设备 rc = mixerOpen(&hMixer, // 返回的设备句柄 0, // 单声卡的设备ID为零 0, // 不使用回调机制 0, // 回调函数参数 0); // MIXER_OBJECTF_MIXER宏的值,表示任选有效设备ID // 打开混合器设备无错的话,则 if (MMSYSERR_NOERROR == rc) { // MIXERLINE 结构体变量清零 ZeroMemory(&mxl, sizeof(MIXERLINE)); mxl.cbStruct = sizeof(MIXERLINE); // 微软用此办法判断版本 // 指出需要获取的通道,声卡的音频输出用MIXERLINE_COMPONENTTYPE_DST_SPEAKERS mxl.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS; // 取得混合器设备的指定线路信息 rc = mixerGetLineInfo((HMIXEROBJ)hMixer, &mxl, // 取得MIXERLINE::dwComponentType指定类型的第一个音频线路信息 MIXER_GETLINEINFOF_COMPONENTTYPE); // 取得混合器设备的指定线路信息成功的话,则 if (MMSYSERR_NOERROR == rc) { // MIXERCONTROL 结构体变量清零 ZeroMemory(&mxc, sizeof(MIXERCONTROL)); mxc.cbStruct = sizeof(mxc); // 微软用此办法判断版本 // MIXERLINECONTROLS 结构体变量清零 ZeroMemory(&mxlc, sizeof(MIXERLINECONTROLS)); mxlc.cbStruct = sizeof(mxlc); // 微软用此办法判断版本 mxlc.dwLineID = mxl.dwLineID; // 上面取得的声卡音频输出线路标识 // 控制类型为控制音量 mxlc.dwControlType = MIXERCONTROL_CONTROLTYPE_VOLUME; mxlc.cControls = 1; // 使用 MIXERCONTROL 结构体变量个数 mxlc.pamxctrl = &mxc; // MIXERCONTROL 结构体变量指针 mxlc.cbmxctrl = sizeof(mxc); // MIXERCONTROL 结构体变量字节大小 // 取得控制器信息 rc = mixerGetLineControls((HMIXEROBJ)hMixer, &mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); // 取得控制器信息成功的话,则 if (MMSYSERR_NOERROR == rc) { // 获取控制器中的值的音量范围:mxc.Bounds.lMinimum到mxc.Bounds.lMaximum. MIXERCONTROLDETAILS mxcd; // 控制器的状态信息 MIXERCONTROLDETAILS_SIGNED volStruct; // 音量结构体变量(就一个成员量) // MIXERCONTROLDETAILS 结构体变量清零 ZeroMemory(&mxcd, sizeof(mxcd)); mxcd.cbStruct = sizeof(mxcd); // 微软用此办法判断版本 mxcd.dwControlID = mxc.dwControlID; // 上面取得的控制器标识 mxcd.paDetails = &volStruct; // 音量结构体变量指针 mxcd.cbDetails = sizeof(volStruct); // 音量结构体变量字节大小 mxcd.cChannels = 1; // 取得或设置全部通道 // 设置音量 if (bIsSet) { volStruct.lValue = dwVolume; // 想要设置的值 rc = mixerSetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_SETCONTROLDETAILSF_VALUE); if (MMSYSERR_NOERROR == rc) { return true; } else { return false; } } // 获得音量值 else { rc = mixerGetControlDetails((HMIXEROBJ)hMixer, &mxcd, MIXER_GETCONTROLDETAILSF_VALUE); if (MMSYSERR_NOERROR == rc) { dwVolume=volStruct.lValue; } else { return false; } } } else { return false; } } else { return false; } } else { return false; } return true; }

你可能感兴趣的:(设置和获得混音器音量)