本人要做一个调节系统音量的程序,用来调节控制面板中扬声器的音量大小而不是调节波形的大小,有哪位高手可提供下资料?在VC 中可调用哪个函数????谢谢!!!!!!!

解决方案 »

  1.   

    // 调节系统音量//--------------------------------------------------------------------------
    //  文件: VloControl.cpp    (seeker  modify 2006.08.10)
    //  函数: SetVolume(int AudioIndex,long NewPos);
    //  参数: AudioIndex 是音频设备的序列,默认的设备就是0
    //  参数: NewPos: 音量大小,1--100之间
    //---------------------------------------------------------------------------
    #include <mmsystem.h>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;
    }//---------------------------------------------------------------------------
    unsigned GetVolumeValue(HMIXER hmixer ,MIXERCONTROL *mxc)
    {
    MIXERCONTROLDETAILS mxcd;
    MIXERCONTROLDETAILS_UNSIGNED vol; vol.dwValue=0;
    mxcd.hwndOwner = 0;
    mxcd.cbStruct = sizeof(mxcd);
    mxcd.dwControlID = mxc->dwControlID;
    mxcd.cbDetails = sizeof(vol);
    mxcd.paDetails = &vol;
    mxcd.cChannels = 1;
    if(mixerGetControlDetails((HMIXEROBJ)hmixer, &mxcd, MIXER_OBJECTF_HMIXER|MIXER_GETCONTROLDETAILSF_VALUE))
    return -1;
    return vol.dwValue;
    }//---------------------------------------------------------------------------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;
    }
    //---------------------------------------------------------------------------
    unsigned WINAPI GetVolume(int dev)//得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN
    {long device;unsigned rt=0;
    MIXERCONTROL volCtrl;
    HMIXER hmixer;
    switch (dev)
    {
    case 1:
    device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break;
    case 2:
    device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break;
    case 3:
    // device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break; // cd 音量
     device=MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE; break; //麦克风音量
    // device=MIXERLINE_COMPONENTTYPE_SRC_LINE; break; //PC 扬声器音量
    //device=MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC; break;default:
    device=MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
    }if(mixerOpen(&hmixer, 0, 0, 0, 0)) return 0;
    if(!GetVolumeControl(hmixer,device,MIXERCONTROL_CONTROLTYPE_VOLUME,&volCtrl))
    return 0;
    rt=GetVolumeValue(hmixer,&volCtrl)*100/volCtrl.Bounds.lMaximum;
    mixerClose(hmixer);
    return rt;}//---------------------------------------------------------------------------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 1:
    device=MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT; break;
    case 2:
    device=MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER; break;
    case 3:
     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;
    }
      

  2.   

    顶一个
    ==========================
    unsigned WINAPI GetVolume(int dev)//得到设备的音量dev=0主音量,1WAVE ,2MIDI ,3 LINE IN------------------
    bool WINAPI SetVolume(long dev,long vol)//设置设备的音量
    {
    // dev =0,1,2 分别表示主音量,波形,MIDI ,LINE IN
    // vol=0-100 表示音量的大小 , 设置与返回音量的值用的是百分比,即音量从0 - 100,而不是设备的绝对值
    ==================================
    上面代码中的,先得到当前音量,再加减!