Wie kann ich auf den Mixer der Soundkarte zugreifen?


Hier ein komplettes Beispiel-Unit, das den Zugriff auf den Mixer der Soundkarte verdeutlicht:

unit cdp_dlg9;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, Grids, MMSystem;

type
  TMixerDlg = class(TForm)
    PanelMain: TPanel;
    AnzNumDevs: TLabel;
    Label1: TLabel;
    Grid: TStringGrid;
    PanelBottom: TPanel;
    BtnOK: TBitBtn;
    BtnClose: TBitBtn;
    BtnHelp: TBitBtn;
    Timer: TTimer;
    procedure FormShow(Sender: TObject);
    procedure TimerTimer(Sender: TObject);
    procedure BtnHelpClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    NumDevs : byte;
  end;

var
  MixerDlg: TMixerDlg;

implementation

{$R *.DFM}

procedure GetVolume(DeviceID : integer;var VolL,VolR : word);
var Vol : longint;
begin
  AuxGetVolume(DeviceID,@Vol);
  VolL:=Vol mod $10000;
  VolR:=Vol shr 16;
end;

procedure SetVolume(DeviceID : integer;VolL,VolR : byte);
var Vol  : longint;
    Temp : real;
begin
  Temp:=VolR/255;
  Vol:=round($FFFF*Temp) shl 16;
  Temp:=VolL/255;
  Vol:=Vol+round($FFFF*Temp);
  AuxSetVolume(DeviceID,Vol);
end;

procedure GetDevInfos;
var AuxCaps : TAuxCaps;
    VHi,VLo : word;
    i       : byte;
begin
  for i:=0 to MixerDlg.NumDevs-1 do begin
    AuxGetDevCaps(i, @AuxCaps, SizeOf(AuxCaps));
    MixerDlg.Grid.Cells[0,i+1]:=IntToStr(i);
    VLo:=AuxCaps.vDriverVersion mod $100;
    VHi:=AuxCaps.vDriverVersion div $100;
    MixerDlg.Grid.Cells[1,i+1]:=IntToStr(VHi)+'.'+IntToStr(VLo);
    MixerDlg.Grid.Cells[2,i+1]:=String(AuxCaps.szPName);
    if (AuxCaps.wTechnology and AUXCAPS_CDAUDIO)<><>0 then
      MixerDlg.Grid.Cells[3,i+1]:='CD-Audio'
    else
      MixerDlg.Grid.Cells[3,i+1]:='Extern';
  end;
end;

procedure TMixerDlg.TimerTimer(Sender: TObject);
var L,R  : word;
    i    : byte;
begin
  for i:=0 to NumDevs-1 do begin
    GetVolume(i,L,R);
    Grid.Cells[4,i+1]:=IntToStr(L)+' %';
    Grid.Cells[5,i+1]:=IntToStr(R)+' %';
  end;
end;

procedure TMixerDlg.FormShow(Sender: TObject);
var i : byte;
begin
  NumDevs:=AuxGetNumDevs;
  AnzNumDevs.Caption:=IntToStr(NumDevs);
  Grid.RowCount:=NumDevs+1;
  Grid.Cells[0,0]:='ID';
  Grid.Cells[1,0]:='Vers.';
  Grid.Cells[2,0]:='Name';
  Grid.Cells[3,0]:='Typ';
  Grid.Cells[4,0]:='Pegel L';
  Grid.Cells[5,0]:='Pegel R';
  GetDevInfos;
end;

end.
Delphi 1 Delphi 2 Delphi 3 Delphi 4
nicht getestet Version nicht betroffen getestet

siehe auch:

Wie kann ich ermittlen, ob eine Soundkarte vorhanden ist?


Delphi FAQ