zoukankan      html  css  js  c++  java
  • delphi内进行音量控制及静音

    unit UMute;
    interface
    uses MMSystem, Dialogs;
    Type
      TDeviceName 
    = (Master, Microphone, WaveOut, Synth);
    function  GetVolume(DN:TDeviceName) : Word 
    procedure SetVolume(DN:TDeviceName; Value:Word);
    function  GetVolumeMute(DN:TDeviceName) : Boolean;
    procedure  SetVolumeMute(DN:TDeviceName; Value:Boolean);
    implementation
    //获取音量
    function GetVolume(DN:TDeviceName) : Word;
    var
      hMix: HMIXER;
      mxlc: MIXERLINECONTROLS;
      mxcd: TMIXERCONTROLDETAILS;
      vol: TMIXERCONTROLDETAILS_UNSIGNED;
      mxc: MIXERCONTROL;
      mxl: TMixerLine;
      intRet: Integer;
      nMixerDevs: Integer;
    begin
      Result:
    =0;
      
    // Check if Mixer is available
      nMixerDevs := mixerGetNumDevs();
      
    if (nMixerDevs < 1) then Exit;
      
    // open the mixer
      intRet := mixerOpen(@hMix, 0000);
      
    if intRet = MMSYSERR_NOERROR then begin
        
    case DN of
          Master     :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
          Microphone :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
          WaveOut    : mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
          Synth      :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
        end;
        mxl.cbStruct :
    = SizeOf(mxl);
        
    // get line info
        intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
        
    if intRet = MMSYSERR_NOERROR then begin
          FillChar(mxlc, SizeOf(mxlc),
    0);
          mxlc.cbStruct :
    = SizeOf(mxlc);
          mxlc.dwLineID :
    = mxl.dwLineID;
          mxlc.dwControlType :
    = MIXERCONTROL_CONTROLTYPE_VOLUME;
          mxlc.cControls :
    = 1;
          mxlc.cbmxctrl :
    = SizeOf(mxc);
          mxlc.pamxctrl :
    = @mxc;
          intRet :
    = mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
          
    if intRet = MMSYSERR_NOERROR then begin
            FillChar(mxcd, SizeOf(mxcd),
    0);
            mxcd.dwControlID :
    = mxc.dwControlID;
            mxcd.cbStruct :
    = SizeOf(mxcd);
            mxcd.cMultipleItems :
    = 0;
            mxcd.cbDetails :
    = SizeOf(Vol);
            mxcd.paDetails :
    = @vol;
            mxcd.cChannels :
    = 1;
            intRet :
    = mixerGetControlDetails(hMix, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
            Result :
    = vol.dwValue ;
            
    if intRet <> MMSYSERR_NOERROR then
              ShowMessage(
    'GetControlDetails Error');
          end 
    else
            ShowMessage('GetLineInfo Error');
        end;
        mixerClose(hMix);
      end;
    end;
    //设置音量
    procedure setVolume(DN:TDeviceName; Value : Word);
    var
      hMix: HMIXER;
      mxlc: MIXERLINECONTROLS;
      mxcd: TMIXERCONTROLDETAILS;
      vol: TMIXERCONTROLDETAILS_UNSIGNED;
      mxc: MIXERCONTROL;
      mxl: TMixerLine;
      intRet: Integer;
      nMixerDevs: Integer;
    begin
      
    // Check if Mixer is available
      nMixerDevs := mixerGetNumDevs();
      
    if (nMixerDevs < 1) then Exit;
      
    // open the mixer
      intRet := mixerOpen(@hMix, 0000);
      
    if intRet = MMSYSERR_NOERROR then begin
        
    case DN of
          Master     : mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
          Microphone : mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
          WaveOut    : mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
          Synth      : mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
        end;
        mxl.cbStruct :
    = SizeOf(mxl);
        
    // get line info
        intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
        
    if intRet = MMSYSERR_NOERROR then begin
          FillChar(mxlc, SizeOf(mxlc),
    0);
          mxlc.cbStruct :
    = SizeOf(mxlc);
          mxlc.dwLineID :
    = mxl.dwLineID;
          mxlc.dwControlType :
    = MIXERCONTROL_CONTROLTYPE_VOLUME;
          mxlc.cControls :
    = 1;
          mxlc.cbmxctrl :
    = SizeOf(mxc);
          mxlc.pamxctrl :
    = @mxc;
          intRet :
    = mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
          
    if intRet = MMSYSERR_NOERROR then begin
            FillChar(mxcd, SizeOf(mxcd),
    0);
            mxcd.dwControlID :
    = mxc.dwControlID;
            mxcd.cbStruct :
    = SizeOf(mxcd);
            mxcd.cMultipleItems :
    = 0;
            mxcd.cbDetails :
    = SizeOf(Vol);
            mxcd.paDetails :
    = @vol;
            mxcd.cChannels :
    = 1;
            vol.dwValue :
    = Value;
            intRet :
    = mixerSetControlDetails(hMix, @mxcd,MIXER_SETCONTROLDETAILSF_VALUE);
            
    if intRet <> MMSYSERR_NOERROR then
              ShowMessage(
    'SetControlDetails Error');
          end 
    else
            ShowMessage('GetLineInfo Error');
        end;
        mixerClose(hMix);
      end;
    end;
    //获取静音
    function  GetVolumeMute(DN:TDeviceName) : Boolean;
    var
      hMix: HMIXER;
      mxlc: MIXERLINECONTROLS;
      mxcd: TMIXERCONTROLDETAILS;
      mxc: MIXERCONTROL;
      mxl: TMixerLine;
      intRet: Integer;
      nMixerDevs: Integer;
      mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
    begin
      
    // Check if Mixer is available
      nMixerDevs := mixerGetNumDevs();
      Result:
    =False;
      
    if (nMixerDevs < 1) then Exit;
      
    // open the mixer
      intRet := mixerOpen(@hMix, 0000);
      
    if intRet = MMSYSERR_NOERROR then begin
        
    case DN of
          Master     :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
          Microphone :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
          WaveOut    :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
          Synth      :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
        end;
        mxl.cbStruct        :
    = SizeOf(mxl);
        
    // mixerline info
        intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
        
    if intRet = MMSYSERR_NOERROR then begin
          FillChar(mxlc, SizeOf(mxlc),
    0);
          mxlc.cbStruct :
    = SizeOf(mxlc);
          mxlc.dwLineID :
    = mxl.dwLineID;
          mxlc.dwControlType :
    = MIXERCONTROL_CONTROLTYPE_MUTE;
          mxlc.cControls :
    = 1;
          mxlc.cbmxctrl :
    = SizeOf(mxc);
          mxlc.pamxctrl :
    = @mxc;
          
    // Get the mute control
          intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
          
    if intRet = MMSYSERR_NOERROR then begin
            FillChar(mxcd, SizeOf(mxcd),
    0);
            mxcd.cbStruct :
    = SizeOf(TMIXERCONTROLDETAILS);
            mxcd.dwControlID :
    = mxc.dwControlID;
            mxcd.cChannels :
    = 1;
            mxcd.cbDetails :
    = SizeOf(MIXERCONTROLDETAILS_BOOLEAN);
            mxcd.paDetails :
    = @mcdMute;
            
    // Get  mute
            intRet := mixerGetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
            
    if mcdMute.fValue = 0 then
              Result:
    =false
            else
              Result := True;
            
    if intRet <> MMSYSERR_NOERROR then
              ShowMessage(
    'SetControlDetails Error');
          end 
    else
           ShowMessage('GetLineInfo Error');
        end;
      end;
    end;
    //获取静音
    procedure  SetVolumeMute(DN:TDeviceName; Value:Boolean);
    var
      hMix: HMIXER;
      mxlc: MIXERLINECONTROLS;
      mxcd: TMIXERCONTROLDETAILS;
      mxc: MIXERCONTROL;
      mxl: TMixerLine;
      intRet: Integer;
      nMixerDevs: Integer;
      mcdMute: MIXERCONTROLDETAILS_BOOLEAN;
    begin
      
    // Check if Mixer is available
      nMixerDevs := mixerGetNumDevs();
      
    if (nMixerDevs < 1) then Exit;
      
    // open the mixer
      intRet := mixerOpen(@hMix, 0000);
      
    if intRet = MMSYSERR_NOERROR then begin
        
    case DN of
          Master     :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
          Microphone :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE;
          WaveOut    :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT;
          Synth      :  mxl.dwComponentType :
    = MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER;
        end;
        mxl.cbStruct        :
    = SizeOf(mxl);
        
    // mixerline info
        intRet := mixerGetLineInfo(hMix, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
        
    if intRet = MMSYSERR_NOERROR then begin
          FillChar(mxlc, SizeOf(mxlc),
    0);
          mxlc.cbStruct :
    = SizeOf(mxlc);
          mxlc.dwLineID :
    = mxl.dwLineID;
          mxlc.dwControlType :
    = MIXERCONTROL_CONTROLTYPE_MUTE;
          mxlc.cControls :
    = 1;
          mxlc.cbmxctrl :
    = SizeOf(mxc);
          mxlc.pamxctrl :
    = @mxc;
          
    // Get the mute control
          intRet := mixerGetLineControls(hMix, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
          
    if intRet = MMSYSERR_NOERROR then begin
            FillChar(mxcd, SizeOf(mxcd),
    0);
            mxcd.cbStruct :
    = SizeOf(TMIXERCONTROLDETAILS);
            mxcd.dwControlID :
    = mxc.dwControlID;
            mxcd.cChannels :
    = 1;
            mxcd.cbDetails :
    = SizeOf(MIXERCONTROLDETAILS_BOOLEAN);
            mxcd.paDetails :
    = @mcdMute;
            
    if Value then
              mcdMute.fValue:
    =1
            else
              mcdMute.fValue:=0;
            
    // Get  mute
            intRet := mixerSetControlDetails(hMix, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
            
    if intRet <> MMSYSERR_NOERROR then
              ShowMessage(
    'SetControlDetails Error');
          end 
    else
           ShowMessage('GetLineInfo Error');
        end;
      end;
    end;
    end.

  • 相关阅读:
    freeebsd,pkg_add,svsup,make改服务器的设定
    采用dhcp的Failover协议实施dhcp的热备份
    FreeBSD断电后,自动检测并修复文件系统
    WinXP、Win7脚本自动加域及用户资料迁移
    支除桌面右键显卡控制面板
    BSD平台中整合samba与win2003 AD
    企业Windows Server 2008活动目录备份和灾难恢复详解
    FreeBSD 6.2 上使用 PF 防火墙
    部署到服务器后,导出Excel发生错误Retrieving the COM class factory for component with CLSID {0002450000000000C000000000000046}
    Jquery1.6版本以上调用WebService
  • 原文地址:https://www.cnblogs.com/martian6125/p/9631489.html
Copyright © 2011-2022 走看看