大家有做人做过这样的功能?

解决方案 »

  1.   

    给你一段调节音量的代码供参考:
    unit   Volume;     
        
      interface     
        
      uses   windows,mmsystem;     
        
      type   
              Tvolume=record   
                    left,right:word;   //   取值范围   0--65535   
              end;     
        
      procedure   fillstruct(control:PMixerControl;var   Cdetails:tMIXERCONTROLDETAILS);     
      function   getpeak(control:PMixerControl;var   peak:integer):boolean;     
      function   setvolume(control:Pmixercontrol;   volume:Tvolume):boolean;     
      function   getvolume(control:Pmixercontrol;   volume:Tvolume):boolean;     
        
      var   
              mcontrols:array   of   array   of   array   of   PMixerControl;   //mixer的数组,单声卡可以不用   
              fmixerhandle:HMIXER;   //mixer的句柄     
        
      implementation     
        
      procedure   fillstruct(control:PMixerControl;var   Cdetails:tMIXERCONTROLDETAILS);     
      begin   
              Cdetails.cbStruct:=sizeof(cdetails);   
              cdetails.dwControlID:=Control.dwControlID;   
              cdetails.cbDetails:=sizeof(integer);   
              cdetails.hwndOwner:=0;     
      end;     
        
      function   getpeak(control:PMixerControl;var   peak:integer):boolean;     
      var   
            details:TMixerControlDetailsSigned;   
            cdetails:tMIXERCONTROLDETAILS;     
      begin   
              Result:=false;   
              if   control.dwControlType<>   mixercontrol_controltype_peakmeter   then   exit;   
              cdetails.cChannels:=1;   
              cdetails.paDetails:=@details;   
              fillstruct(control,cdetails);   
              result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;     
      end;     
        
      function   setvolume(control:Pmixercontrol;   volume:Tvolume):boolean;     
      var   
              details:array[0..30]   of   integer;   
              cdetails:tMIXERCONTROLDETAILS;     
      begin   
              fillstruct(control,cdetails);   
              cdetails.cChannels:=2;   
              cdetails.paDetails:=@details;   
              details[0]:=volume.left;   
              details[1]:=volume.right;   
              result:=mixerSetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;   
              volume.left:=details[0];   
              volume.right:=details[1];     
      end;     
        
      function   getvolume(control:Pmixercontrol;   volume:Tvolume):boolean;     
      var   
              details:array[0..30]   of   integer;   
              cdetails:tMIXERCONTROLDETAILS;     
      begin   
              fillstruct(control,cdetails);   
              cdetails.cChannels:=2;   
              cdetails.paDetails:=@details;   
              result:=mixerGetControlDetails(fmixerhandle,@cdetails,MIXER_GETCONTROLDETAILSF_VALUE)=0;   
              volume.left:=details[0];   
              volume.right:=details[1];     
      end;     
        
      end.     
        
      //   调用方法:     
      procedure   TForm1.Button1Click(Sender:   TObject);     
      var   s   :   Tvolume;   
                kz   :   Pmixercontrol;     
      begin   
              new(kz);   //<------------   此处一定要分配内存     
      kz.dwControlID   :=   0;     
      s.left   :=   0;     
      s.right   :=   0;     
      try     
      setvolume(kz,s);     
      except     
      end;     
      freemem(kz);     
      end;