⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guiaudiodevice.pas

📁 一整套声音录制控件
💻 PAS
字号:
unit guiAudioDevice;

interface

uses
  guiMixerLine,
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, WaveMixer;

type
  TfrmAudioDevice = class(TForm)
    AudioMixer1: TAudioMixer;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure AudioMixer1LineChange(Sender: TObject;
      MixerLine: TAudioMixerLine);
    procedure AudioMixer1ControlChange(Sender: TObject;
      MixerLine: TAudioMixerLine; ControlType: TMixerControlType);
  private
    FfrmMaster : TfrmMixerLine;
    FMixerLines: TList;
    procedure FUpdate;
  public
    constructor CreateDevice(AOwner:TComponent; AParent:TWinControl; MixerID,DestinationID:Integer);
    destructor Destroy; override;
  end;

//var
//  frmAudioDevice: TfrmAudioDevice;

implementation

{$R *.dfm}

constructor TfrmAudioDevice.CreateDevice(AOwner:TComponent; AParent:TWinControl; MixerID,DestinationID:Integer);
var
  I:Integer;
  blnRecordDevice:Boolean;
begin
  Inherited Create(AOwner);
  Parent := AParent;
  AudioMixer1.MixerID := MixerID;
  AudioMixer1.DestinationID := DestinationID;
  blnRecordDevice := mcSelect in AudioMixer1.Master.AvailableControls;
  FMixerLines := TList.Create;
  if not blnRecordDevice then
    if (mcVolume in AudioMixer1.Master.AvailableControls) or
       (mcMute in AudioMixer1.Master.AvailableControls  ) then
    begin
      FfrmMaster := TfrmMixerLine.CreateLine(
        Self, Self, AudioMixer1.Master,
        true, false
      );
    end;
  for I := 0 to AudioMixer1.LineCount-1 do
  begin
    FMixerLines.Add(
      TfrmMixerLine.CreateLine(
        Self, Self, AudioMixer1.Lines[I], false, blnRecordDevice
      )
    );
  end;
  FUpdate;
end;

destructor TfrmAudioDevice.Destroy;
begin
  while FMixerLines.Count > 0 do
  begin
    TfrmMixerLine(FMixerLines[0]).Free;
    FMixerLines.Delete(0);
  end;
  FfrmMaster.Free;
  inherited;
end;

procedure TfrmAudioDevice.FormShow(Sender: TObject);
var
  I:Integer;
  intLeft : Integer;
  frmLine : TfrmMixerLine;
begin
  intLeft := 0;
  if FfrmMaster <> nil then
  begin
    FfrmMaster.Show;
    FfrmMaster.Left := intLeft;
 // FfrmMaster.Top := 17;
    intLeft := FfrmMaster.Width;
  end;
  for I := 0 to FMixerLines.Count-1 do
  begin
    frmLine := FMixerLines[I];
    frmLine.Show;
 // frmLine.Top := 17;
    frmLine.Left := intLeft;
    intLeft := intLeft + frmLine.Width;
  end;
end;

procedure TfrmAudioDevice.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I:Integer;
begin
  if FfrmMaster <> nil then
    FfrmMaster.Close;
  for I := 0 to FMixerLines.Count-1 do
    TfrmMixerLine(FMixerLines[I]).Close;
end;

procedure TfrmAudioDevice.FUpdate;
var
  I:Integer;
begin
  if FfrmMaster <> nil then
    FfrmMaster.UpdateLine;
  for I := 0 to FMixerLines.Count-1 do
    TfrmMixerLine(FMixerLines[I]).UpdateLine;
end;

procedure TfrmAudioDevice.AudioMixer1ControlChange(Sender: TObject;
  MixerLine: TAudioMixerLine; ControlType: TMixerControlType);
begin
  FUpdate;
end;

procedure TfrmAudioDevice.AudioMixer1LineChange(Sender: TObject;
  MixerLine: TAudioMixerLine);
begin
  FUpdate;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -