RealICQMicrophoneVolumeControl.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. {
  2. 文件名:RealICQMicrophoneVolumeControl.pas
  3. 功 能:麦克风音量调整控件
  4. 建 立:尹进
  5. 历 史:
  6. 2006.04.10:创建文件(尹进)
  7. }
  8. unit RealICQMicrophoneVolumeControl;
  9. interface
  10. uses
  11. MMSystem, AMixer, Windows, SysUtils, Classes, Controls, ExtCtrls, Graphics,
  12. RealICQTrackBar;
  13. type
  14. TRealICQMicrophoneVolumeControl = class(TRealICQTrackBar)
  15. private
  16. FAudioMixer: TAudioMixer;
  17. FInDeviceID, FInChannelID, FConnectionID: Integer;
  18. FMute: Integer;
  19. function InitInDeviceID: Boolean;
  20. procedure GetMicrophoneValue;
  21. procedure ValueChange(Sender: TObject);
  22. procedure MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
  23. function GetCopyRight: string;
  24. protected
  25. { Protected declarations }
  26. public
  27. constructor Create(AOwner: TComponent); override;
  28. destructor Destroy; override;
  29. procedure ChangeUIColor(AColor: TColor); override;
  30. published
  31. property CopyRight: string read GetCopyRight;
  32. end;
  33. procedure Register;
  34. implementation
  35. //------------------------------------------------------------------------------
  36. function TRealICQMicrophoneVolumeControl.GetCopyRight: string;
  37. begin
  38. Result := '版权所有(C) 2002-2016 浙江万赛软件科技有限公司 保留所有权利。';
  39. end;
  40. //------------------------------------------------------------------------------
  41. function TRealICQMicrophoneVolumeControl.InitInDeviceID: Boolean;
  42. var
  43. iLoop: Integer;
  44. szName: string;
  45. begin
  46. FInDeviceID := -1;
  47. FInChannelID := -1;
  48. FConnectionID := -1;
  49. //查找录音设备的Mixer
  50. if FAudioMixer.Destinations = nil then
  51. begin
  52. Result := False;
  53. Exit;
  54. end;
  55. for iLoop := 0 to FAudioMixer.Destinations.Count - 1 do
  56. if FAudioMixer.Destinations[iLoop].Data.dwComponentType = MIXERLINE_COMPONENTTYPE_DST_WAVEIN then
  57. begin
  58. FInDeviceID := iLoop;
  59. Break;
  60. end;
  61. if FInDeviceID > -1 then
  62. for iLoop := 0 to FAudioMixer.Destinations[FInDeviceID].Connections.Count - 1 do
  63. begin
  64. szName := FAudioMixer.Destinations[FInDeviceID].Connections.Connection[iLoop].Data.szName;
  65. if AnsiSameText(szName, '麦克风') or AnsiSameText(szName, 'MICROPHONE') then
  66. FConnectionID := iLoop;
  67. end;
  68. Result := True;
  69. end;
  70. //------------------------------------------------------------------------------
  71. procedure TRealICQMicrophoneVolumeControl.ValueChange(Sender: TObject);
  72. begin
  73. try
  74. FAudioMixer.SetVolume(FInDeviceID, FConnectionID, Value, Value, FMute);
  75. except
  76. OnChanged := nil;
  77. Value := 0;
  78. OnChanged := ValueChange;
  79. end;
  80. end;
  81. //------------------------------------------------------------------------------
  82. procedure TRealICQMicrophoneVolumeControl.MixerChange(Sender: TObject; MixerH: HMixer; ID: Integer);
  83. begin
  84. GetMicrophoneValue;
  85. end;
  86. //------------------------------------------------------------------------------
  87. procedure TRealICQMicrophoneVolumeControl.GetMicrophoneValue;
  88. var
  89. L, R: Integer;
  90. Stereo: Boolean;
  91. IsSelect: Boolean;
  92. begin
  93. try
  94. FAudioMixer.GetVolume(FInDeviceID, FConnectionID, L, R, FMute, Stereo, IsSelect);
  95. except
  96. OnChanged := nil;
  97. Value := 0;
  98. OnChanged := ValueChange;
  99. end;
  100. FAudioMixer.OnControlChange := MixerChange;
  101. OnChanged := nil;
  102. if L >= 0 then
  103. Value := L;
  104. if R >= 0 then
  105. Value := (Value + R) div 2;
  106. OnChanged := ValueChange;
  107. end;
  108. //------------------------------------------------------------------------------
  109. constructor TRealICQMicrophoneVolumeControl.Create(AOwner: TComponent);
  110. begin
  111. inherited Create(AOwner);
  112. try
  113. FAudioMixer := TAudioMixer.Create(Self);
  114. InitInDeviceID;
  115. GetMicrophoneValue;
  116. except
  117. Enabled := False;
  118. end;
  119. end;
  120. //------------------------------------------------------------------------------
  121. destructor TRealICQMicrophoneVolumeControl.Destroy;
  122. begin
  123. try
  124. FreeAndNil(FAudioMixer);
  125. except
  126. end;
  127. inherited Destroy;
  128. end;
  129. //------------------------------------------------------------------------------
  130. procedure TRealICQMicrophoneVolumeControl.ChangeUIColor(AColor: TColor);
  131. begin
  132. inherited;
  133. end;
  134. procedure Register;
  135. begin
  136. RegisterComponents('RealICQ UI', [TRealICQMicrophoneVolumeControl]);
  137. end;
  138. end.