Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lautstärke ermitteln (https://www.delphipraxis.net/30653-lautstaerke-ermitteln.html)

clarity 27. Sep 2004 16:01


Lautstärke ermitteln
 
Hi Leuts,
bin ziemlich neu in Delphi und suche nach einer Möglichkeit, die derzeitige Lautstärke zu ermitteln. Habe bei swissdelphicenter diesen Code gefunden:
Code:
{by Serhiy Perevoznyk} 

uses
  MMSystem;


function GetVolumeControl(aMixer: HMixer; componentType, ctrlType: Longint;
  var mxc: TMixerControl): Boolean;
var
  mxl: TMixerLine;
  mxlc: TMixerLineControls;
  rc: Longint;
begin
  Result := False;
  FillChar(mxl, SizeOf(TMixerLine), 0);
  mxl.cbStruct := SizeOf(TMixerLine);
  mxl.dwComponentType := componentType;
  {Obtain a line corresponding to the component type} 
  rc := mixerGetLineInfo(aMixer, @mxl, MIXER_GETLINEINFOF_COMPONENTTYPE);
  if rc = MMSYSERR_NOERROR then
  begin
    with mxlc do
    begin
      cbStruct := SizeOf(TMixerLineControls);
      dwLineID := mxl.dwLineID;
      dwControlType := ctrlType;
      cControls := 1;
      cbmxctrl := SizeOf(TMixerLine);
      pamxctrl := @mxc;
      pamxctrl^.cbStruct := SizeOf(TMixerControl);
    end;
    mixerGetLineControls(aMixer, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
    rc := mixerGetLineControls(aMixer, @mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE);
    Result := rc = MMSYSERR_NOERROR;
  end;
end;

function SetVolumeControl(aMixer: HMixer; mxc: TMixerControl; volume: Longint): Boolean;
var
  mxcd: TMixerControlDetails;
  vol: TMixerControlDetails_Unsigned;
  rc: MMRESULT;
begin
  FillChar(mxcd, SizeOf(mxcd), 0);
  with mxcd do
  begin
    cbStruct := SizeOf(TMixerControlDetails);
    dwControlID := mxc.dwControlID;
    cbDetails := SizeOf(TMixerControlDetails_Unsigned);
    paDetails := @vol;
    cMultipleItems := 0;
    cChannels := 1;
  end;
  vol.dwValue := volume;
  rc := mixerSetControlDetails(aMixer, @mxcd, MIXER_SETCONTROLDETAILSF_VALUE);
  Result := rc = MMSYSERR_NOERROR;
end;

function InitMixer: HMixer;
var
  Err: MMRESULT;
begin
  Err := mixerOpen(@Result, 0, 0, 0, 0);
  if Err <> MMSYSERR_NOERROR then
    Result := 0;
end;

// Example:


procedure SetMasterVolumeToZero;
var
  MyMixerHandle: HMixer;
  MyVolCtrl: TMixerControl;
begin
  MyMixerHandle := InitMixer;
  if MyMixerHandle <> 0 then
    try
      FillChar(MyVolCtrl, SizeOf(MyVolCtrl), 0);
      if GetVolumeControl(MyMixerHandle, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS,
        MIXERCONTROL_CONTROLTYPE_VOLUME, MyVolCtrl) then
      begin
        {The last parameter (0) here is the volume level} 
        if SetVolumeControl(MyMixerHandle, MyVolCtrl, 0) then
          ShowMessage('Volume should now be set to zero');
      end;
    finally
      mixerClose(MyMixerHandle);
    end;
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
 SetMasterVolumeToZero
end;
Funktioniert soweit auch ganz gut, nur leider steig ich nicht so recht dahinter. :oops: kann mir jetzt einer sagen, wie ich daraus die Lautstärke ermitteln und sie als Longint weiterverwenden kann ?
HAt jemand ne Idee oder zumindest einen Dekansatz den er mir geben kann ?

THX Schon mal
Alex

c113plpbr 27. Sep 2004 16:23

Re: Lautstärke ermitteln
 
Lautstärke ... ich hab da mal was von irgendwem abgekupfert:
Code:
function InitMixer: HMixer;
var
  Err: MMRESULT;
begin
  Err := mixerOpen(@Result, 0, 0, 0, 0);
  if Err <> MMSYSERR_NOERROR then
    Result := 0;
end;

function GetMasterVolumeControl(Mixer: hMixerObj;
                                var Control: TMixerControl): MMResult;
var
  Line    : TMixerLine;
  Controls : TMixerLineControls;
begin
  ZeroMemory(@Line, SizeOf(Line));
  Line.cbStruct := SizeOf(Line);
  Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
  Result := mixerGetLineInfo(Mixer,
                             @Line,
                             MIXER_GETLINEINFOF_COMPONENTTYPE);
  if Result = MMSYSERR_NOERROR then begin
    ZeroMemory(@Controls, SizeOf(Controls));
    Controls.cbStruct := SizeOf(Controls);
    Controls.dwLineID := Line.dwLineID;
    Controls.cControls := 1;
    Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_VOLUME;
    Controls.cbmxctrl := SizeOf(Control);
    Controls.pamxctrl := @Control;
    Result := mixerGetLineControls(Mixer,
                                   @Controls,
                                   MIXER_GETLINECONTROLSF_ONEBYTYPE);
  end;
end;

function SetMasterVolume(Value: Cardinal) : boolean;
var
  MasterVolume   : TMixerControl;
  Details        : TMixerControlDetails;
  UnsignedDetails : TMixerControlDetailsUnsigned;
  Code           : MMResult;
  Mixer          : hMixerObj;
begin
  Mixer := InitMixer;
  Result := false;
  Code := GetMasterVolumeControl(Mixer, MasterVolume);
  if(Code = MMSYSERR_NOERROR)then begin
    with Details do begin
      cbStruct := SizeOf(Details);
      dwControlID := MasterVolume.dwControlID;
      cChannels := 1; // set all channels
      cMultipleItems := 0;
      cbDetails := SizeOf(UnsignedDetails);
      paDetails := @UnsignedDetails;
    end;
    UnsignedDetails.dwValue := Value;
    if(mixerSetControlDetails(Mixer,
                              @Details,
                              MIXER_SETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR)then
      Result := true;
  end;
end;

function GetMasterVolume : Cardinal;
var
  MasterVolume   : TMixerControl;
  Details        : TMixerControlDetails;
  UnsignedDetails : TMixerControlDetailsUnsigned;
  Code           : MMResult;
  Mixer          : hMixerObj;
begin
  Mixer := InitMixer;
  Result := 0;
  Code := GetMasterVolumeControl(Mixer, MasterVolume);
  if(Code = MMSYSERR_NOERROR)then begin
    with Details do begin
      cbStruct := SizeOf(Details);
      dwControlID := MasterVolume.dwControlID;
      cChannels := 1; // set all channels
      cMultipleItems := 0;
      cbDetails := SizeOf(UnsignedDetails);
      paDetails := @UnsignedDetails;
    end;
    if(mixerGetControlDetails(Mixer,
                              @Details,
                              MIXER_GETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR)then
      result := UnsignedDetails.dwValue;
  end;
end;

function GetMasterMute( 
  Mixer: hMixerObj;
  var Control: TMixerControl): MMResult;
  // Returns True on success
var
  Line: TMixerLine;
  Controls: TMixerLineControls;
begin
  ZeroMemory(@Line, SizeOf(Line));
  Line.cbStruct := SizeOf(Line);
  Line.dwComponentType := MIXERLINE_COMPONENTTYPE_DST_SPEAKERS;
  Result := mixerGetLineInfo(Mixer, @Line,
    MIXER_GETLINEINFOF_COMPONENTTYPE);
  if Result = MMSYSERR_NOERROR then
  begin
    ZeroMemory(@Controls, SizeOf(Controls));
    Controls.cbStruct := SizeOf(Controls);
    Controls.dwLineID := Line.dwLineID;
    Controls.cControls := 1;
    Controls.dwControlType := MIXERCONTROL_CONTROLTYPE_MUTE;
    Controls.cbmxctrl := SizeOf(Control);
    Controls.pamxctrl := @Control;
    Result := mixerGetLineControls(Mixer, @Controls,
      MIXER_GETLINECONTROLSF_ONEBYTYPE);
  end;
end;

function MuteMaster : boolean;
var
  MasterMute: TMixerControl;
  Details: TMixerControlDetails;
  BoolDetails: TMixerControlDetailsBoolean;
  Code: MMResult;
begin
  result := false;
  Code := GetMasterMute(0, MasterMute);
  if(Code = MMSYSERR_NOERROR)then
  begin
    with Details do
    begin
      cbStruct := SizeOf(Details);
      dwControlID := MasterMute.dwControlID;
      cChannels := 1;
      cMultipleItems := 0;
      cbDetails := SizeOf(BoolDetails);
      paDetails := @BoolDetails;
    end;
    mixerGetControlDetails(0, @Details,
      MIXER_GETCONTROLDETAILSF_VALUE);

    LongBool(BoolDetails.fValue) := not LongBool(BoolDetails.fValue);
   
    if(mixerSetControlDetails(0, @Details,
         MIXER_SETCONTROLDETAILSF_VALUE) = MMSYSERR_NOERROR)then
      result := true;    
  end;
end;
hoffe es hilft dir ... das was du suchst findest du bestimmt irgendwo hier drin :roll: ...

ciao, Philipp

clarity 27. Sep 2004 16:49

Re: Lautstärke ermitteln
 
ja danke, genau das, was ich gesucht habe :thumb:

S2B 27. Sep 2004 17:01

Re: Lautstärke ermitteln
 
Wolltest du jetzt den Pegel der Musik oder nur die Lautstärke? :gruebel:

clarity 27. Sep 2004 17:40

Re: Lautstärke ermitteln
 
Nur die Lautstärke,

Andere Frage : wie geht das jetzt beim Mikrofoneingang ? :wall:
weiss einer was ? Würd mich über kommentare freuen :mrgreen:

THX Alex

Matze 27. Sep 2004 17:49

Re: Lautstärke ermitteln
 
[dp]Mikrofon lautstärke[/dp]

Da findest du dann Hier im Forum suchenWaveOutGetVolume. Vielleicht geht's damit.

clarity 27. Sep 2004 18:20

Re: Lautstärke ermitteln
 
Das funktioniert leider nicht, da es ja Waveout ist ... brauch ja den Input ... :gruebel:
*keineahnunghab*

Matze 27. Sep 2004 18:28

Re: Lautstärke ermitteln
 
Klick

clarity 27. Sep 2004 21:36

Re: Lautstärke ermitteln
 
Danke,
War zwar bloss die Funktion zum ändern des Volumens; aber mit dem obigen code und n bissl überlegen funzts jetzt :mrgreen:



Thx, Mfg Alex


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz