Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MultimediaSystem Pitch/Volume (https://www.delphipraxis.net/53464-multimediasystem-pitch-volume.html)

Nils_13 17. Sep 2005 08:53


MultimediaSystem Pitch/Volume
 
Hi,

wie kann ich bei dem mmsystem (multimedia system) den Pitch oder Volume verwenden, ich habe keine Anhaltspunkte, den Link zu den Beispielen hab ich nicht, also nehmt bitte rücksicht. Könnt ihr mir da irgendwie helfen (der Link würde es auch tun, hab ihn weder auf google noch in der dp nicht gefunden)
?

Nils_13 18. Sep 2005 10:14

Re: MultimediaSystem Pitch/Volume
 
Keiner eine Idee ? :(

Hador 18. Sep 2005 18:25

Re: MultimediaSystem Pitch/Volume
 
Du musst das direkt über die Systemlautstärke machen.

Zitat:

Mit Hilfe der Folgenenden Proceduren ist es möglich die WAV-Lautstärke des Systems auszulesen und auch zu setzen.

Beide Proceduren benötigen die Unit mmystem, die der USES-Klausel hinzugefügt werden muss.
Delphi-Quellcode:
procedure GetVolume(var volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  volL:= 0;
  volR:= 0;
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  // get volume
  waveOutGetVolume(hWO, @vol);
  volL:= vol and $FFFF;
  volR:= vol shr 16;
  waveOutClose(hWO);
end;

procedure SetVolume(const volL, volR: Word);
var
  hWO: HWAVEOUT;
  waveF: TWAVEFORMATEX;
  vol: DWORD;
begin
  // init TWAVEFORMATEX
  FillChar(waveF, SizeOf(waveF), 0);
  // open WaveMapper = std output of playsound
  waveOutOpen(@hWO, WAVE_MAPPER, @waveF, 0, 0, 0);
  vol:= volL + volR shl 16;
  // set volume
  waveOutSetVolume(hWO, vol);
  waveOutClose(hWO);
end;
Um die Lautstärke auszulesen kann man folgenden Aufruf verwenden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  VolLi, VolRe: Word;
begin
  GetVolume(VolLi,VolRe);

  Label1.Caption:=IntToStr(VolLi);
  Label2.Caption:=IntToStr(VolRe);
end;


Nils_13 25. Okt 2005 08:45

Re: MultimediaSystem Pitch/Volume
 
Danke. Aber wie 'setze' ich die Lautstärke ? Und außerdem, wie kann ich den Wert von GetVolume(VolLi, VolRe) in Prozent umwandeln ?

Sharky 25. Okt 2005 14:31

Re: MultimediaSystem Pitch/Volume
 
Hai Nils_13,

es ist nicht notwendig den ganzen Code des vorherigen Postings zu zitieren um dann nun einen Satz darunter zu schreiben.

Zitat:

Zitat von Nils_13
... Danke. Aber wie 'setze' ich die Lautstärke ?

In dem Code von Hador gibt es doch die Funktion SetVolume. Eventuell geht es mit der? :gruebel:

Zitat:

... Und außerdem, wie kann ich den Wert von GetVolume(VolLi, VolRe) in Prozent umwandeln ?
Da musst Du jetzt aber doch nicht an zwei Stellen fragen.
Zumal Du doch hoffentlich etwas Prozentrechnung kannst.

Nils_13 25. Okt 2005 14:43

Re: MultimediaSystem Pitch/Volume
 
Zitat:

Zitat von Sharky
Hai Nils_13,

es ist nicht notwendig den ganzen Code des vorherigen Postings zu zitieren um dann nun einen Satz darunter zu schreiben.

Zitat:

Zitat von Nils_13
... Danke. Aber wie 'setze' ich die Lautstärke ?

In dem Code von Hador gibt es doch die Funktion SetVolume. Eventuell geht es mit der? :gruebel:

Zitat:

... Und außerdem, wie kann ich den Wert von GetVolume(VolLi, VolRe) in Prozent umwandeln ?
Da musst Du jetzt aber doch nicht an zwei Stellen fragen.
Zumal Du doch hoffentlich etwas Prozentrechnung kannst.

Ich habs jetzt anders gelöst.
Delphi-Quellcode:
function TForm1.SetWaveVolume(const AVolume: DWORD): Boolean;
var
  WaveOutCaps: TWAVEOUTCAPS;
begin
  Result := False;
  if WaveOutGetDevCaps(WAVE_MAPPER, @WaveOutCaps, SizeOf(WaveOutCaps)) = MMSYSERR_NOERROR then
    if WaveOutCaps.dwSupport and WAVECAPS_VOLUME = WAVECAPS_VOLUME then
      Result := WaveOutSetVolume(WAVE_MAPPER, AVolume) = MMSYSERR_NOERROR;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
var
  LVol: Word;
  RVol: Word;
begin
  LVol := voltb.Position; // max. is 65535
  RVol := voltb.Position; // max. is 65535
  SetWaveVolume(MakeLong(LVol, RVol));
end;
Ich bin auf diesem Gebiet sehr sehr vergesslich :mrgreen: Ich muss den Max.Wert durch 100 teilen. Aber und dann noch mit dem Laustärken-Wert errechnen, aber ich weiß nicht mehr wie das in delphi geht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:59 Uhr.

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