| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- {
- 文件名:RealICQMicrophoneVolumeControl.pas
- 功 能:麦克风音量调整控件
- 建 立:尹进
- 历 史:
- 2006.04.10:创建文件(尹进)
- }
- unit RealICQMicrophoneVolumeControl;
- interface
- uses
- MMSystem, AMixer, Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics,
- RealICQTrackBar;
- type
- TRealICQMicrophoneVolumeControl = class(TRealICQTrackBar)
- private
- FAudioMixer: TAudioMixer;
- FInDeviceID, FInChannelID, FConnectionID: Integer;
- FMute: Integer;
- function InitInDeviceID: Boolean;
- procedure GetMicrophoneValue;
- procedure ValueChange(Sender: TObject);
- procedure MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
- function GetCopyRight: string;
- protected
- { Protected declarations }
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure ChangeUIColor(AColor: TColor); override;
- published
- property CopyRight: string read GetCopyRight;
- end;
- procedure Register;
- implementation
- //------------------------------------------------------------------------------
- function TRealICQMicrophoneVolumeControl.GetCopyRight: string;
- begin
- Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
- end;
- //------------------------------------------------------------------------------
- function TRealICQMicrophoneVolumeControl.InitInDeviceID: Boolean;
- var
- iLoop: Integer;
- szName: string;
- begin
- FInDeviceID := -1;
- FInChannelID := -1;
- FConnectionID := -1;
- //查找录音设备的Mixer
- if FAudioMixer.Destinations = nil then
- begin
- Result := False;
- Exit;
- end;
- for iLoop := 0 to FAudioMixer.Destinations.Count - 1 do
- if FAudioMixer.Destinations[iLoop].Data.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN then
- begin
- FInDeviceID := iLoop;
- Break;
- end;
- if FInDeviceID > -1 then
- for iLoop := 0 to FAudioMixer.Destinations[FInDeviceID].Connections.Count - 1 do
- begin
- szName := FAudioMixer.Destinations[FInDeviceID].Connections.Connection[iLoop].Data.szName;
- if AnsiSameText(szName, '麦克风') or AnsiSameText(szName, 'MICROPHONE') then
- FConnectionID := iLoop;
- end;
- Result := True;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQMicrophoneVolumeControl.ValueChange(Sender: TObject);
- begin
- try
- FAudioMixer.SetVolume(FInDeviceID, FConnectionID, Value, Value, FMute);
- except
- OnChanged := nil;
- Value := 0;
- OnChanged := ValueChange;
- end;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQMicrophoneVolumeControl.MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
- begin
- GetMicrophoneValue;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQMicrophoneVolumeControl.GetMicrophoneValue;
- var
- L, R: Integer;
- Stereo: Boolean;
- IsSelect: Boolean;
- begin
- try
- if FInDeviceID = -1 then
- Exit;
- FAudioMixer.GetVolume(FInDeviceID, FConnectionID, L, R, FMute, Stereo, IsSelect);
- except
- OnChanged := nil;
- Value := 0;
- OnChanged := ValueChange;
- end;
- FAudioMixer.OnControlChange := MixerChange;
- OnChanged := nil;
- if L >= 0 then
- Value := L;
- if R >= 0 then
- Value := (Value + R) div 2;
- OnChanged := ValueChange;
- end;
- //------------------------------------------------------------------------------
- constructor TRealICQMicrophoneVolumeControl.Create(AOwner: TComponent);
- begin
- inherited Create(AOwner);
- try
- FAudioMixer := TAudioMixer.Create(Self);
- InitInDeviceID;
- GetMicrophoneValue;
- except
- Enabled := False;
- end;
- end;
- //------------------------------------------------------------------------------
- destructor TRealICQMicrophoneVolumeControl.Destroy;
- begin
- try
- FreeAndNil(FAudioMixer);
- except
- end;
- inherited Destroy;
- end;
- //------------------------------------------------------------------------------
- procedure TRealICQMicrophoneVolumeControl.ChangeUIColor(AColor: TColor);
- begin
- inherited;
- end;
- procedure Register;
- begin
- RegisterComponents('RealICQ UI', [TRealICQMicrophoneVolumeControl]);
- end;
- end.
|