Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi WaveMapper L/R (https://www.delphipraxis.net/6110-wavemapper-l-r.html)

TheMiller 29. Jun 2003 23:23


WaveMapper L/R
 
Hey, nochmal euer DJ!

Also, ich möchte zu einer best. Uhrzeit den LautstärkePegel für Waves auf 100% haben. Aber mein kleines süßes Delphi *würg* setzt mit diesem Code:
Delphi-Quellcode:
if TimeToStr(now)>= '00:00' then WaveOutSetVolume(wave_mapper,65000);
Die Lautstärke immer auf 100%, jedoch die balance komplett nach rechts. Wie lautet der Code für den anderen Kanal?

Danke im Vorraus

Dj-SPM

Christian Seehase 30. Jun 2003 00:30

Moin DJ-SPM,

das hatte ich hier

waveOutSetVolume aus mmsystem
schon mal erklärt.

TheMiller 30. Jun 2003 22:19

Also,
erstmal danke für deine Hilfe, aber so ehrlich gesagt verstehe ich das jetzt nicht. Könntest du dich vielleicht hinreißen lassen, mir noch ein wenig zu helfen *g*?

Christian Seehase 30. Jun 2003 22:42

Moin DJ-SPM,

könntest Du bitte mal erläutern was Du nicht daran verstehst.
'ist sonst etwas schwierig zu helfen. ;-)

TheMiller 1. Jul 2003 11:36

Ja hi,

also ich hatte ja den normalen Wave_Mapper Code, wie ich ihn oben beschrieben habe. Hatte ja nur das Problem dass er automatisch 100% auf den rechten Speaker setzt. Daraufhin meintest du, dass ich den einen Code aus dem Link einfügen sollte, weiss aber nicht, wie ich ihn mit der DWORD implementieren soll.

Hoffe du weisst, was ich meine. Am einfachsten wäre es, du würdest mir mal einen Code geben, wie du meinst, dass er aussehen soll.

Vielen Danke für deine tolle Hilfe,

DJ-SPM

Christian Seehase 1. Jul 2003 14:05

Moin DJ-SPM,

ich hatte nicht gesagt, dass Du den Code von dort übernehmen kannst, sondern dass ich dort erklärt hatte, wie die Lautstärkeregelung für zwei Kanäle erfolgt.
Lies Dir das doch noch einmal in Ruhe durch.

Zitat:

Zitat von DJ-SPM
Am einfachsten wäre es, du würdest mir mal einen Code geben, wie du meinst, dass er aussehen soll.

der steht ja in dem Thread ;-)

TheMiller 10. Jul 2003 21:40

Re: WaveMapper L/R
 
Hi Chris...

also, ich nahm mir deinen Ratschlag, den Thread in Ruhe durchzulesen, zu Herzen und muss einräumen ... das ich nur Bahnhof verstehe. :wall:

Könntest du mir den Code für den 2.Kanal mal geben und mir vielleicht danach erklären, denn ich denke, dass das so nichts wird... Das wäre nett..

Ciao

DJ-SPM

tommie-lie 10. Jul 2003 22:11

Re: WaveMapper L/R
 
Mensch Chris, jetzt spann' ihn doch wegen zwei Zeilen code nicht auf die Folter...

Delphi-Quellcode:
var
  NewVolume: Word;
begin
  NewVolume := 123; // gewünschte Lautstärke (0..65535)
  WaveOutSetVolume(wave_mapper, NewVolume or (NewVolume shl 16);
Und die Erklärung findet sich auch im SDK wieder:
Zitat:

Zitat von MS-PSDK
dwVolume
New volume setting. The low-order word contains the left-channel volume setting, and the high-order word contains the right-channel setting. A value of 0xFFFF represents full volume, and a value of 0x0000 is silence.

Wie man jetzt Links und Rechts getrennt steuert, darfst du selber schreiben :-P

TheMiller 10. Jul 2003 22:21

Re: WaveMapper L/R
 
Klasse!

Danke. Funzt einwandtfrei.

Bi szum nächsten Mal

Christian Seehase 10. Jul 2003 22:28

Re: WaveMapper L/R
 
Moin DJ-SPM,

dann will ich mal versuchen, das zu erklären:

Der zweite Parameter von WaveOutSetVolume setzt sich eigentlich aus zwei Parametern zusammen, nämlich einem Wert für die Lautstärke des linken und einem für die Lautstärke des rechten Kanals.

Der Parameter ist ein DWORD, also ein 32 Bit Wert ohne Vorzeichen.
Dies kann man aber auch ansehen, als zwei unmittelbar aufeinander folgende Werte vom Typ WORD (16 Bit ohne Vorzeichen)
Das höherwertige WORD steht hierbei für die Lautstärke des rechten Kanals, das niederwertige für die des linken.

Der Wertebereich für ein WORD geht von 0 bis 65535 (Du hattest also nicht ganz Vollausschlag ;-) ) Hexadezimal wäre das FFFF.

In Deinem Beispiel, 65000, hätte nun also das niederwertige WORD den Wert 65000 (passt ja rein) und das höherwertige den Wert 0.
Folge: Auf dem rechten Kanal kommt nichts, auf dem linken hast Du fast volle Lautstärke.
Um jetzt den Wert für den rechten zu setzen, muss dieser in das höherwertige Word. Dieses befindet sich, sozusagen, 16 links des niederwertigen WORDs.
Um bei Deinem Beispiel zu bleiben: 65000 dez ist FDE8 Hex.
Damit beide Kanäle also diesen Wert bekommen, müsste als Parameter
FDE8FDE8 übergeben werden.

Dazu kannst Du dann einfach einer Variablen vom Typ DWORD den gewünschten Wert geben, und musst dann beim Aufruf der Funktion nur noch dafür sorgen, dass dieser Wert auch im höherwertigen WORD steht.
Dies geht am einfachsten mit shl (Shift Left)

Beispiel:

Delphi-Quellcode:
var
  dwVolume : DWORD;

begin
  dwVolume := $FDE8; // Die 65000 aus Deinem Beispiel
  // durch shl 16 wird der Wert in das höherwertige WORD verschoben
  // dwVolume shl 16 wäre also gleich $FDE80000
  // dwVolume selber ist $0000FDE8
  WaveOutSetVolume(wave_mapper,(dwVolume shl 16) or dwVolume);
end;
War das jetzt verständlicher?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 Uhr.
Seite 1 von 2  1 2      

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