Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lautstärke auf XP ändern mit delphi (https://www.delphipraxis.net/71347-lautstaerke-auf-xp-aendern-mit-delphi.html)

turboPASCAL 14. Jun 2006 20:19

Re: Lautstärke auf XP ändern mit delphi
 
Liste der Anhänge anzeigen (Anzahl: 2)
So:
[code=delphi]// GetMasterVolumeCtrl - Verwendung intern
//
function GetMasterVolumeCtrl(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;

// SetMasterVolume
// Verwendung: Setzen eines Wertes für das MasterVolume des Mixers

procedure SetMasterVolume(Value: Word);
var
MasterVolume: TMixerControl;
Details: TMixerControlDetails;
UnsignedDetails: TMixerControlDetailsUnsigned;
Mixer: hMixerObj;
Code: MMResult;
begin
MixerOpen(@Mixer, 0, 0, 0, 0);
Code := GetMasterVolumeCtrl(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;
Code := mixerSetControlDetails(Mixer,
@Details,
MIXER_SETCONTROLDETAILSF_VALUE);
end;
if Code <> MMSYSERR_NOERROR then
raise Exception.CreateFmt('SetMasterVolume failure, ' +
'multimedia system error #%d',
Code:
);
end;

// GetMasterVolume
// Verwendung: akt. Wert des MasterVolumes des Mixers auslesen

function GetMasterVolume: Cardinal;
var
  MasterVolume: TMixerControl;
  Details: TMixerControlDetails;
  UnsignedDetails: TMixerControlDetailsUnsigned;
  Code: MMResult;
  Mixer: hMixerObj;
  mmError: Cardinal;
begin
  mmError := MixerOpen(@Mixer, 0, 0, 0, 0);
  if mmError <> MMSYSERR_NOERROR then
  begin
    raise Exception.CreateFmt('GetMasterVolume failure, ' +
      'multimedia system error #%d', [mmError]);
  end else
  begin
    Result := 0;
    Code := GetMasterVolumeCtrl(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;
end;
Der selbe Code nur einwenig anders um das Volume zu setzen.

Ein fertiges Beispiel im Anhang.

Noobinator 14. Jun 2006 21:05

Re: Lautstärke auf XP ändern mit delphi
 
Zitat:

Zitat von turboPASCAL
So:
Delphi-Quellcode:
....
Der selbe Code nur einwenig anders um das Volume zu setzen.

Ein fertiges Beispiel im Anhang.

Ich danke dir.

benst 13. Sep 2006 15:56

Re: Lautstärke auf XP ändern mit delphi
 
@turboPASCAL:
Dein Programm hat einen ganz kleinen Fehler :)
Anstatt
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  // Wert als % in Label1.Caption anzeigen
  Label1.Caption :=
    format('%0.1f %%', [(Trackbar1.Position / MaxMixerMasterVolume) * 100]);
...
muss dort
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
...
  // Wert als % in Label1.Caption anzeigen
  Label1.Caption :=
    format('%0.1f %%', [((MaxMixerMasterVolume - Trackbar1.Position) / MaxMixerMasterVolume) * 100]);
...
stehen. Wenn man dein Programm start steht dort z.B. 5%, wobei die Lautstärke auf 95% steht. Wenn man die Tackbar anklickt ist es jedoch sofort behoben.
Vielen Dank für deinen Lautstärken-Code/ Programm, hat mich weitergebracht.
Ben


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 Uhr.
Seite 2 von 2     12   

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