Entwickler-Ecke

Windows API - Lautstärke erhöhen ohne zugriff auf die Lautstärkeregelung


Smilebey - Mo 18.04.05 21:22
Titel: Lautstärke erhöhen ohne zugriff auf die Lautstärkeregelung
Wie erhöhe ich die Lautstärke ohne die Lautstärkeregelung zu ändern? :?: :)


AXMD - Mo 18.04.05 21:26

Abgesehen davon, dass sich deine Frage selbst widerspricht habe ich absolut keine Ahnung was du meinst. Systemlautstärke, die vom Mediaplayer... :roll:

AXMD


Smilebey - Mo 18.04.05 21:35

Also WinAmp, Win MediaPlayer haben ihre eigene Lautstärkeregelung(Volumen+,-). Und wenn man da die Lautstärke im WinAmp erhöht, ändert man nichts in der Lautstärkeregelung unten rechts abgebildet im Taskbar. (Isch gucke):) :lol:


toms - Mo 18.04.05 21:44

Wessen Lautstärke möchtest du denn ändern?


Smilebey - Mo 18.04.05 21:59

Mann, ich wil einfach nur die Lautstärke erhöhen. :roll:


AXMD - Mo 18.04.05 22:01

user profile iconSmilebey hat folgendes geschrieben:
Mann, ich wil einfach nur die Lautstärke erhöhen. :roll:


Ja welche :roll:

AXMD


Smilebey - Mo 18.04.05 22:10

Also ich mache ein kleines Projekt mit dem man Musik hoeren kann. Jetzt will ich eine Option hinzügen mit der man die Lautstärke (der Lautsprächer) ändern kann. Genau wie in WinAmp oder Windows MediaPlayer.


BenBE - Mo 18.04.05 22:15

Wenn wir hier nur von der Lautstärkeerhöhung sprächen, ist das dann ganz einfach, wenn Du sagst, auf welchem Weg:

Lösungen wären:
1. Nutzung der Volume Control der Soundkarte über MCI
2. Resampling des Soundsignals um selber die Lautstärke zu erhöhen
3. Kombination beider Möglichkeiten

P.S.: Konjunktiv lässt grüßen ...


toms - Mo 18.04.05 22:16

Wie spielst du denn den Sound ab?


Kroni - Mo 18.04.05 22:42

Mist, ich hätte gesagt, wenn du den Sound ändern willst, ohne die Systemlautstärke zu erhöhen, dreh an den boxen :lol:


AXMD - Mo 18.04.05 22:44

user profile iconKroni hat folgendes geschrieben:
Mist, ich hätte gesagt, wenn du den Sound ändern willst, ohne die Systemlautstärke zu erhöhen, dreh an den boxen :lol:


:rofl:

Alternativ neue 1000W-Boxen kaufen ^^

AXMD


Karlson - Di 19.04.05 20:23

SmileBey, was du meinst ist folgendes: es wird dir wohl noch nicht aufgefallen sein, aber es gibt zwei relevanten Lautstärken. Einmal die gesamtlautstärke für die gesamte Box, und dann nochmal ~5 Unterlautstärken für bestimmte Aufgaben. Da gibt es dann die Wave-Lautstärke, zuständig für Musik. Diese Lautstärke verändern WinAmp und co.


JayEff - Fr 29.04.05 15:07

Und wie änder ich nun die Lautstärke vom Winamp? (es wurde gerade erwähnt, drum dachte ich, gehört wohl zur Topic...) Es gibt WinampAPI komponenten, aber die, die ich gefunden habe, kann das nicht.


JayEff - Fr 29.04.05 17:25

Lösung gefunden :D

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Procedure LowerVol(Percent: Integer);
Var
    i: Integer;
Begin
    If (Percent <= 100And (Percent >= 1Then
        For i := 1 To (Percent Div 2) + 1 Do
            SendMessage(WinAmpHandle, WM_Command, 400590);
End;

Procedure RaiseVol(Percent: Integer);
Var
    i: Integer;
Begin
    If (Percent <= 100And (Percent >= 1Then
        For i := 1 To (Percent Div 2) + 1 Do
            SendMessage(WinAmpHandle, WM_Command, 400580);
End;


andras - Di 09.08.05 16:40

hallo
hab mal den quelltext von oben probiert, aber bei mir regt sich der compiler über "WINApHandle" auf.
Muss ich da noch netwas bestimmtes einbinden??
danke schon im voraus!


noidic - Di 09.08.05 16:45

So wie ich das von 12s draufschauen sehe, ist WinAMPHandle ein Platzhalter für das Handle vom Winamp, das musst du natürlich irgendwo herbekommen.


andras - Di 09.08.05 16:48

und was soll ich jetzt tun?? :oops:


noidic - Di 09.08.05 16:54

Mit FindWindow kriegst du das Handle des Fensters, das einfach entsprechend an den Stellen einsetzen.

Wenn du nicht weisst, wie man FindWindow verwendet Suche in: Delphi-Forum, Delphi-Library FINDWINDOW

Gruß

Noidic


Gausi - Di 09.08.05 16:54


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
const  
  WINAMP_VOLUMEUP  : integer = 40058// volume up
  WINAMP_VOLUMEDOWN: integer = 40059// volume down

procedure WinampVolumeUp;
var hwndWinamp: THandle;
begin
  hwndWinamp:= FindWindow('Winamp v1.x',nil);
  if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_VOLUMEUP, 0);
end;

procedure WinampVolumeDown;
var hwndWinamp: THandle;
begin
  hwndWinamp:= FindWindow('Winamp v1.x',nil);
  if hwndWinamp<>0 then SendMessage(hwndWinamp,WM_COMMAND, WINAMP_VOLUMEDOWN, 0);
end;


andras - Di 09.08.05 17:12

also bei mir ändert sich da gar nix (zumindest nix hörbares und um das f´gehts ja schließlich :D )
ich glaub nämlich, dass hwndwinamp immmer 0 (null) ist.


AXMD - Di 09.08.05 17:16

user profile iconandras hat folgendes geschrieben:
ich glaub nämlich, dass hwndwinamp immmer 0 (null) ist.


Wieso glaubst du? Wende dich vertrauensvoll an deinen Debugger ;)

AXMD


Gausi - Di 09.08.05 17:18

Hoffentlich keine blöde Frage: Läuft denn Winamp bei dir überhaupt?


andras - Di 09.08.05 17:19

ich weiß es.

Aber gibst einen anderen weg di lautstärke zu ändern, muss ja nicht gerade der sein


Moderiert von user profile iconGausi: Beiträge zusammengefasst.


TM - Mi 07.09.05 19:24

Hallo.

Im EH steht:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
uses mmsystem;

// ...

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, 000);
  // 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, 000);
  vol:= volL + volR shl 16;
  // set volume
  waveOutSetVolume(hWO, vol);
  waveOutClose(hWO);
end;


Funtz bei meinem Player auch ohne Probleme.


..


Freiberger - Mi 15.02.06 19:45

Hy,
Also ich habe gerade das gleich Problem... :oops:
Ich habe ein Musik-Programm geschrieben, mit 2 TMediaplayer'n.
So wie im Windows-Media-Player sollen die Titel x Sekunden überlappen und die Lautstärke ändern.
Wie kann ich für jeden Media-Player einzeln die Lautstärke ändern ?
Oder gibt es ne andere Lösung als Media-Player ? Ich will nur MP3's abspielen...
:?:


BenBE - Do 16.02.06 12:48

Da gibt es zahlreiche:

OpenAL, FMOD, Bass, ... Wobei FMOD und Bass bei MP3s am einfachsten sein sollten.