AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

MultimediaSystem Pitch/Volume

Ein Thema von Nils_13 · begonnen am 17. Sep 2005 · letzter Beitrag vom 25. Okt 2005
Antwort Antwort
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#1

MultimediaSystem Pitch/Volume

  Alt 17. Sep 2005, 09:53
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)
?
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#2

Re: MultimediaSystem Pitch/Volume

  Alt 18. Sep 2005, 11:14
Keiner eine Idee ?
  Mit Zitat antworten Zitat
Benutzerbild von Hador
Hador

Registriert seit: 11. Dez 2004
Ort: Recke
682 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: MultimediaSystem Pitch/Volume

  Alt 18. Sep 2005, 19:25
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;
Lars Kiesow
http://www.larskiesow.de

Computer gehorchen deinen Befehlen, nicht deinen Absichten.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#4

Re: MultimediaSystem Pitch/Volume

  Alt 25. Okt 2005, 09:45
Danke. Aber wie 'setze' ich die Lautstärke ? Und außerdem, wie kann ich den Wert von GetVolume(VolLi, VolRe) in Prozent umwandeln ?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: MultimediaSystem Pitch/Volume

  Alt 25. Okt 2005, 15:31
Hai Nils_13,

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

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?

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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#6

Re: MultimediaSystem Pitch/Volume

  Alt 25. Okt 2005, 15:43
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 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?

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 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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:19 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