Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lautstärke von PC ändern ? (https://www.delphipraxis.net/113888-lautstaerke-von-pc-aendern.html)

Delphiturbo 16. Mai 2008 10:58


Lautstärke von PC ändern ?
 
Hallo

mit dem Code kann ich zwar den Ton hoch und leiser machen, aber
wenn ich die Lautstärke danach anschaue, dann finde ich die alte Position
immer die selbe, egal ob ich den Scrollbar Maximum oder Minimum mache !

Ich möchte gerne, dass die Lautstärke hier auch geändert werden
http://www.mediaculture-online.de/up...autstaerke.gif


Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
  LeftVolume:Word;
  RightVolume:Word;
begin
  LeftVolume:=ScrollBar1.Position;// max is 65535
  RightVolume:=ScrollBar1.Position;// 
  SetWaveVolume( MakeLong( ScrollBar1.Position,ScrollBar1.Position));
end;

Codewalker 16. Mai 2008 11:02

Re: Lautstärke von PC ändern ?
 
Ich hatte das Problem vor langer Zeit auch einmal. Er ändert die Lautstärke, aber verändert die Position nicht. Wenn ich mich richtig erinnere, musste man zusätzlich eine Windows-Message senden, dass man die Lautstärke geändert hat und dann wurden die Regler aktualisiert. Ich grabe mal, ob ich das noch wiederfinde...

Matze 16. Mai 2008 11:12

Re: Lautstärke von PC ändern ?
 
Hallo,

für die Gesamtlautstärke geht es so:

Delphi-Quellcode:
uses
  MMSystem;

const
  MasterVolumeControl = 0;
  MaxVolume          = 65535;
  MinVolume          = 0;

function _VolumeControl(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;

procedure SetMasterVolume(Mixer: hMixerObj; Value: Word);
var
  MasterVolume   : TMixerControl;
  Details        : TMixerControlDetails;
  UnsignedDetails : TMixerControlDetailsUnsigned;
  aCode           : MMResult;
begin
  aCode := _VolumeControl(Mixer, MasterVolume);
  if aCode = 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;
    aCode := mixerSetControlDetails(Mixer,
                                   @Details,
                                   MIXER_SETCONTROLDETAILSF_VALUE);
  end;
  if aCode <> MMSYSERR_NOERROR then
    raise Exception.CreateFmt('SetMasterVolume failure, '+
                         'multimedia system error #%d', [aCode]);
end;
Ein möglicher Aufruf:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.Min := MinVolume;
  TrackBar1.Max := MaxVolume;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  SetMasterVolume(MasterVolumeControl, TrackBar1.Position);
end;
Ich habe es getestet und es funktioniert. Den Code habe ich übrigens hier gefunden: Haupt Lautstärke Regeln

Grüße

Delphiturbo 16. Mai 2008 11:44

Re: Lautstärke von PC ändern ?
 
:thumb: Es funktioniert. Danke!
Ist das keine Manipulation?
Da der User unbewusst den Regler ganz tiefer machen kann, um den Ton meines Programm
leiser oder aus zu machen, und später wunder er, dass er keinen Ton hat :mrgreen:

Oder muss ich in Destroy wieder den Regler mindestens in der Mitte legen :gruebel:

Matze 16. Mai 2008 12:21

Re: Lautstärke von PC ändern ?
 
Im dem verlinkten Beitrag findest du auch eine Funktion zum Auslesen der Lautstärke. Die könntest du dann anschließend wieder setzen. Dennoch ist das natürlich keine schöne Lösung.

Je nach dem, wie du Sound abspielst, gibt's da u.U. etwas sinnvolleres. Bsp. [dp]TMediaPlayer Lautstärke[/dp].

Delphiturbo 16. Mai 2008 13:53

Re: Lautstärke von PC ändern ?
 
Es ist schon ok
wen ich das Programm starte, dann ist der Regler immer auf 0 !

ich habe versucht in Form.Oncreate :
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  TrackBar1.Min := MinVolume;
  TrackBar1.Max := MaxVolume;
  TrackBar1.Position:=5; // kommt trotzdem in der Position 0 ! min:0 und max:10
  TrackBar1.TickStyle:=tsAuto; // passiert nichts!
funktioniert aber nicht. der Regler beim Starten immer in der Position 0,
obwohl ich den Tackbar1 über seine Eigenschaften in Inspektor auf 5 gesetzt habe!

Ideal wäre es, wenn ich die aktuelle Lautstärke ermitteln kann

Matze 16. Mai 2008 14:18

Re: Lautstärke von PC ändern ?
 
Zitat:

Zitat von Delphiturbo
Ideal wäre es, wenn ich die aktuelle Lautstärke ermitteln kann

Zitat:

Zitat von Matze
Im dem verlinkten Beitrag findest du auch eine Funktion zum Auslesen der Lautstärke.

Also mehr kann ich wirklich nicht schreiben.

Zitat:

Zitat von Delphiturbo
der Regler beim Starten immer in der Position 0,
obwohl ich den Tackbar1 über seine Eigenschaften in Inspektor auf 5 gesetzt habe!

Hast du den Code überhaupt einmal angesehen und versucht zu verstehen?
Das Minimum liegt bei 0, das Maximum bei 65535. Da ist es logisch, dass beim Wert 5 der Regler ganz unten ist, denn die Regler-Auflösung liegt nicht bei 1.

Delphiturbo 16. Mai 2008 20:50

Re: Lautstärke von PC ändern ?
 
Der Code ändert den Stil !
In Code finde ich nichts über den Stlie !!!
Ich möchte diesen Stil nehmen :
Delphi-Quellcode:
TrackBar1.TickStyle:=tsAuto;
TrackBar1.Tickmarks:=tmBoth;
In Inspektor kann ich zwar den Stil wählen aber wenn ich das Programm starte, dann gehen alle meine Stile weg !!!

Matze 16. Mai 2008 20:53

Re: Lautstärke von PC ändern ?
 
Der genannte Code ändert den Stil deiner Trackbar ganz sicher nicht, er hat mit dieser auch nichts zu tun.

Nuclear-Ping 16. Mai 2008 21:12

Re: Lautstärke von PC ändern ?
 
Ich liebe es, wenn Leute mitten in einem Gespräch plötzlich von ganz was anderem reden. :mrgreen:

Was hat der Stil deiner Trackbar jetzt nochmal genau mit der Lautstärkenregelung vom PC zu tun?


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
Seite 1 von 2  1 2      

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