RealICQMicrophoneVolumeControl.pas 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  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. if FInDeviceID = -1 then
  95. Exit;
  96. FAudioMixer.GetVolume(FInDeviceID, FConnectionID, L, R, FMute, Stereo, IsSelect);
  97. except
  98. OnChanged := nil;
  99. Value := 0;
  100. OnChanged := ValueChange;
  101. end;
  102. FAudioMixer.OnControlChange := MixerChange;
  103. OnChanged := nil;
  104. if L >= 0 then
  105. Value := L;
  106. if R >= 0 then
  107. Value := (Value + R) div 2;
  108. OnChanged := ValueChange;
  109. end;
  110. //------------------------------------------------------------------------------
  111. constructor TRealICQMicrophoneVolumeControl.Create(AOwner: TComponent);
  112. begin
  113. inherited Create(AOwner);
  114. try
  115. FAudioMixer := TAudioMixer.Create(Self);
  116. InitInDeviceID;
  117. GetMicrophoneValue;
  118. except
  119. Enabled := False;
  120. end;
  121. end;
  122. //------------------------------------------------------------------------------
  123. destructor TRealICQMicrophoneVolumeControl.Destroy;
  124. begin
  125. try
  126. FreeAndNil(FAudioMixer);
  127. except
  128. end;
  129. inherited Destroy;
  130. end;
  131. //------------------------------------------------------------------------------
  132. procedure TRealICQMicrophoneVolumeControl.ChangeUIColor(AColor: TColor);
  133. begin
  134. inherited;
  135. end;
  136. procedure Register;
  137. begin
  138. RegisterComponents('RealICQ UI', [TRealICQMicrophoneVolumeControl]);
  139. end;
  140. end.