Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Lautstärke andere Programm veringern, ohne die des eigenen (https://www.delphipraxis.net/196076-lautstaerke-andere-programm-veringern-ohne-die-des-eigenen.html)

Alallart 21. Apr 2018 15:06

Lautstärke andere Programm veringern, ohne die des eigenen
 
Ich habe letztens eine Programm gesehen, das die Lautstärke aller anderen Programme zuerst reduziert und erst dann die eigene Musik abspielt. So was würde ich auch gerne in einem meiner Programme nutzen, da es einen Alarm raus gibt, und der gelegentlich untergeht wenn andere Musik an ist. Hat jemand einen Ansatz?

KodeZwerg 21. Apr 2018 19:26

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Google nach Windows Mixer Api und Du wirst fündig werden.

EWeiss 22. Apr 2018 06:09

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1400102)
Google nach Windows Mixer Api und Du wirst fündig werden.

sorry aber das kannst du dir schminken.
Wenn er nach Core Audio sucht! Dann wird er vielleicht fündig.

gruss

API 22. Apr 2018 06:44

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Ab Windows 7 dürfte das mit der Windows Core Audio Library funktionieren.

Beispiel resp. Ansatz in C# als Idee:
https://stackoverflow.com/questions/...-by-process-id

KodeZwerg 22. Apr 2018 07:16

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Moin, also der erster Treffer bei Bei Google suchenWindows Mixer Api führt mich hier hin.
Ist das was Microsoft da schreibt ungültig?

Daniel 22. Apr 2018 07:31

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Warum sollte es ungültig sein? Diese API passt nur nicht zum Problem.
Aber wo ist dort eine Referenz auf andere Prozesse? Wie kannst Du mit den von Dir verlinkten Funktionen einen andren Prozess wie z.B. iTunes runterregeln, wie es der Fragesteller möchte?

KodeZwerg 22. Apr 2018 08:15

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Mir war so als ob man über MIXERLINE es steuern kann, also welches "Gerät" was macht. "Gerät" muss vorher mit caps gesucht werden.

edit 1
ISimpleAudioVolume interface
IAudioSessionManager interface
Damit sollte es besser klappen, ok, ihr habt alle recht.

edit 2
Ich habe mich da gerade mal etwas durchgewühlt und das sollte exakt das sein was der TE nutzen könnte um ans Ziel zu gelangen. (Die edit 1 Links meine ich)

EWeiss 22. Apr 2018 15:15

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von KodeZwerg (Beitrag 1400128)
Mir war so als ob man über MIXERLINE es steuern kann, also welches "Gerät" was macht. "Gerät" muss vorher mit caps gesucht werden.

edit 1
ISimpleAudioVolume interface
IAudioSessionManager interface
Damit sollte es besser klappen, ok, ihr habt alle recht.

edit 2
Ich habe mich da gerade mal etwas durchgewühlt und das sollte exakt das sein was der TE nutzen könnte um ans Ziel zu gelangen. (Die edit 1 Links meine ich)

Nein der Mixer ist nach WinXp out-of-date das ist alles.
Kein Programmierer der kein XP mehr unterstützt wird sich dieser veralteten API annehmen.

Ok bin raus, vom Thread Ersteller kommt nix mehr. :)

gruss

Alallart 22. Apr 2018 23:40

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von EWeiss (Beitrag 1400156)
Ok bin raus, vom Thread Ersteller kommt nix mehr. :)

Der Thread Ersteller ist immer noch da, nur voll damit beschäftigt aus dem Zipfel an Informationen ein Hemd zu machen. Die Antwort: "Windows Mixer Api" ist so allgemein, als wenn man auf die Frage: "ich muss am Freitag in Brasilien sein, nur wie komme ich dahin?" die Antwort bekommt: "Über den Ocean". An für sich nicht falsch und gibt eine grobe Richtung vor, hilft aber nur in Massen weiter.

Ich suche mit den mir gegebenen Stichworten momentan nach Lösungen und bin noch etwa drei Wochen von der Lösung entfernt. Der Tipp war sehr allgemein und zwingt mich mich mit einem Thema auseinander zu setzen, das ich danach wohl nie wieder benötigen werden. Aber danach werde ich wohl wissen wie man den Ton alle anderen Programme reduzieren kann, nur nicht des eigenen.

Also wie gesagt, ich bin aktuell mich da am durchlesen, und wie so oft gibt es da nicht einen fertigen Befehl. Also wäre ich für jede weitere Hilfe dankbar.

EWeiss 23. Apr 2018 01:03

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Na ja irgendwie bist du nicht gerade in Freundlichkeit gebadet (Kommt irgendwie immer etwas Angriffslustig herüber).
Desto trotz hier ist meine TVolumeAudio Komponente.

Diese arbeitet über die Core Audio Api Gesamt Volumen und die Lautstärke der eigenen Anwendung kann geändert werden.
Mit etwas frischem Mut denke ich könnte es dir gelingen auch die Lautstärke anderer Programm zu reduzieren.

Die Basis hättest du dann aber schon mal.
Um die eigene Lautstärke zu reduzieren lade ein Midi File damit und regele dann das Anwendungsvolumen.

Du kannst jetzt dazu eine Art Mixer hinzugefügten also alle laufende Prozesse enumerieren.
Wenn bei einen dieser Prozesse das Volumen > 0 dann den Mixer (Anwendungslautstärke Regler) hinzufügen.
Oder halt auf deine weise.

gruss

OLDIE1950 23. Apr 2018 08:48

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Danke für den Link!
Mit WAV-Files geht es, mit MP3-Files friert es ein.

Nachtrag:
Den MediaPlayer habe ich jetzt durch den VLC-Player ersetzt.
https://wiki.videolan.org/Using_libvlc_with_Delphi/

KodeZwerg 23. Apr 2018 11:17

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von Alallart (Beitrag 1400186)
Die Antwort: "Windows Mixer Api" ist so allgemein

Ich hatte mich ja bereits verbessert und Entschuldige mich hiermit nochmals für eine falsch erste Antwort, das war wirklich nur für alles oder nichts Methodik.
Zitat:

Zitat von Alallart (Beitrag 1400186)
Ich suche mit den mir gegebenen Stichworten

Dann hättest Du auch was gefunden, MfPack zum Beispiel auf Sourceforge. Da hast du eine komplette Delphi Komponente die genau das machen kann was Du willst. Fremde Prozesse stumm schalten.
Zitat:

Zitat von Alallart (Beitrag 1400186)
Der Tipp war sehr allgemein

In meinem dritten Post gab ich Dir Links zu exakt den zwei Api's die Du brauchst, EWeiss sagte Dir wonach Du suchen solltest, da kam sogar ein Link mit einem kompletten Source Code!
Zitat:

Zitat von Alallart (Beitrag 1400186)
und wie so oft gibt es da nicht einen fertigen Befehl

Delphi-Quellcode:
uses
  MMDeviceApi, ActiveX, AudioPolicy;
var
  DeviceEnumerator: IMMDeviceEnumerator;
  DefaultDevice: IMMDevice;
  SessionManager: IAudioSessionManager;
  SessionControl: IAudioSessionControl;
begin
  if Succeeded(CoCreateInstance(CLSID_MMDeviceEnumerator, nil, CLSCTX_INPROC_SERVER, IID_IMMDeviceEnumerator, DeviceEnumerator))
    and Succeeded(DeviceEnumerator.GetDefaultAudioEndpoint(eRender, eMultimedia, DefaultDevice))
    and Succeeded(DefaultDevice.Activate(IID_IAudioSessionManager, CLSCTX_INPROC_SERVER, nil, IUnknown(SessionManager)))
    and Succeeded(SessionManager.GetAudioSessionControl(nil, 0, SessionControl)) then
    SessionControl.SetDisplayName('Mein Programm', nil);
ein Befehl der Dir eine Schnittstelle "SessionControl" anbietet, gefunden auf Stackoverflow.

EWeiss 23. Apr 2018 14:35

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von OLDIE1950 (Beitrag 1400206)
Danke für den Link!
Mit WAV-Files geht es, mit MP3-Files friert es ein.

Nachtrag:
Den MediaPlayer habe ich jetzt durch den VLC-Player ersetzt.
https://wiki.videolan.org/Using_libvlc_with_Delphi/

Was habe ich denn dabei geschrieben.. Lesen
Zitat:

Um die eigene Lautstärke zu reduzieren lade ein Midi File damit und regele dann das Anwendungsvolumen.
Sollte eigentlich klar sein das der MCI Player für MP3 nicht sonderlich taugt.
Das ist ja auch kein abspielgerät sondern eine Volumen Komponente.

gruss

OLDIE1950 23. Apr 2018 16:38

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Warum bist Du eigentlich immer so aggressiv???

EWeiss 23. Apr 2018 16:41

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von OLDIE1950 (Beitrag 1400262)
Warum bist Du eigentlich immer so aggressiv???

Wo?
Ich habe kein Problem zu lesen.
Du prangerst Fehler an ohne vorher zu lesen was die Vorrausetzungen für das Programm sind.

gruss

jaenicke 24. Apr 2018 07:39

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Der Suchbegriff zu dem Thema lautet Ducking. Hier findet sich in der API z.B. etwas dazu:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Man kann unter Windows einstellen wie darauf reagiert werden soll, wenn eine Kommunikation erkannt wird. Zum Beispiel alles andere um 80% herunterregeln. Das heißt man müsste nur noch den Alarm als Kommunikation flaggen und schon sollte Windows das je nach Einstellung selbst machen. Wie das geht weiß ich allerdings nicht aus dem Hut.

EWeiss 24. Apr 2018 07:44

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von jaenicke (Beitrag 1400294)
Der Suchbegriff zu dem Thema lautet Ducking. Hier findet sich in der API z.B. etwas dazu:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
Man kann unter Windows einstellen wie darauf reagiert werden soll, wenn eine Kommunikation erkannt wird. Zum Beispiel alles andere um 80% herunterregeln. Das heißt man müsste nur noch den Alarm als Kommunikation flaggen und schon sollte Windows das je nach Einstellung selbst machen. Wie das geht weiß ich allerdings nicht aus dem Hut.

Dann nur das Interface IAudioVolumeDuckNotification noch implementieren und gut ist.
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

gruss

jaenicke 24. Apr 2018 10:07

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von EWeiss (Beitrag 1400295)
Dann nur das Interface IAudioVolumeDuckNotification noch implementieren und gut ist.

Das ist ja die andere Richtung. Reagieren darauf, dass eine Kommunikation läuft um das Ducking selbst umzusetzen. Das kenne ich. Hier soll es aber initiiert werden. Sprich die Soundausgabe muss als Kommunikationsstream erfolgen.

Alallart 24. Apr 2018 16:49

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zuerst vielen Dank an alle.

@KodeZwerg

Ich hoffe nicht, dass du mich falsch verstanden hast, natürlich bin ich auch für die "allgemeine Antwort" dankbar. Aber das alles ist keine fertige Funktion, sondern viel Stoff, wenn man es nicht mit Copy&Paste nutzen will. Also mein Hinweis, dass ich noch drei Wochen vor der Lösung stehe war nicht böse gemeint, sondern sollte heißen, dass ich mich da einarbeiten muss.

Wie auch immer, inzwischen weiß schon mal wie man allgemein die Lautstärke regelt. Ist schon etwas.


@jaenicke, EWeiss

Wenn man in der Systemsteuerung von Windows 7 geht, und da auf Sound, gibt es im Register Kommunikation die Möglichkeit andere Programme in der Lautstärke um 50 oder 80% zu reduzieren, wenn zB das Telefin klingelt. Um das geht es mir.

Ich dachte zuerst daran die Gesamt-Lautstärke um 50% zu reduzieren und/oder meinen Programm dann lauter zu machen, aber wenn das Programm abstürzt, bleibt die Einstellung so. Der Methode von jaenicke beschreibt aber eine Funktion die die anderen Programme allgemein leiser macht, während das eigene Programm normal laut bleibt.

EWeiss 24. Apr 2018 16:57

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Der Methode von jaenicke beschreibt aber eine Funktion die die anderen Programme allgemein leiser macht, während das eigene Programm normal laut bleibt.
Das wäre doch die Lösung ;)
Musst du halt noch ein bisschen basteln :)

PS:
Allerdings musst du die aktuelle Lautstärke der Anwendungen natürlich erfassen und beibehalten um sie später zurück zu setzen.
Ist zumindest besser falls deine Anwendung abstürzt.

gruss

OLDIE1950 24. Apr 2018 18:47

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von Alallart (Beitrag 1400372)

Wenn man in die Systemsteuerung geht, und da auf Sound, gibt es im Register Kommunikation die Möglichkeit andere Programme in der Lautstärke um 50 oder 80% zu reduzieren, wenn zB das Telefon klingelt. Um das geht es mir.

Delphi-Quellcode:
// uses WinApi.ShellApi,
procedure RunControlPanelApplet(AppletFileName: string);
begin
  ShellExecute(0, 'open', PChar('rundll32.exe'),
    PChar('shell32.dll,Control_RunDLL '+AppletFileName), nil, SW_SHOWNORMAL);
end;

procedure TForm1.ButtonClick(Sender: TObject);
begin
   RunControlPanelApplet('mmsys.cpl,,3');
end;

jaenicke 24. Apr 2018 19:23

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Ihm geht es aber darum wie er selbst den Alarm als Kommunikationsstream ausgibt um in diese Kategorie zu kommen, nicht darum die Einstellungen dafür aufzurufen.

KodeZwerg 24. Apr 2018 19:38

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Zitat:

Zitat von Alallart (Beitrag 1400372)
Ich hoffe nicht, dass du mich falsch verstanden hast

Alles ist gut. Es gibt viele Wege die ans Ziel führen. Ich wünsche Dir viel Erfolg, bei welchen Weg auch immer Du abzweigst! Hauptsache das Endprodukt stimmt, ob nun über eine Kommunikation-Api oder ob du Dritt-Prozesse leiser/Stumm schaltest, vom Resultat beides das gleiche für mich :thumb:

EWeiss 29. Apr 2018 03:08

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Damit geht's aber nicht mit der Methode von @jaenicke aber egal..
Gib irgendeinen Prozessnamen in die Edit ein der Musik wieder gibt und teste es.

Du kannst Mute verwenden oder aber das Volumen der anderen Anwendungen selbst verringern.
Ich denke mal nicht das irgendeine Anwendung dadurch abstürzt.
Ist ja am ende nichts anderes als wenn du es von Hand im Tray Mixer selber regelst.

Sind wohl noch ein paar kleine dinge drin die ich noch berücksichtigen muss. (Nur ein Spiel Projekt)
Aber von der Basis her stimmt's schon.
Win7! (Ich glaube für Win10 wird ein nicht dokumentiertes Interface verwendet daher kann ich nicht garantieren das es da funktioniert)

Zitat:

gibt es im Register Kommunikation die Möglichkeit andere Programme in der Lautstärke um 50 oder 80% zu reduzieren, wenn zB das Telefin klingelt.
Es ist aber nicht genau das was du gerne möchtest.

gruss

Alallart 29. Apr 2018 15:56

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Ja, dein Programm macht es so wie ich es mir vorgestellt habe. Es senkt anscheinend allgemein die Lautstärke, bis auf das ausgesuchte Programm.

KodeZwerg 5. Mai 2018 12:03

AW: Lautstärke andere Programm veringern, ohne die des eigenen
 
Liste der Anhänge anzeigen (Anzahl: 1)
getting-peak-meters-and-volume-settings-for-all-apps-and-audio-devices-on-the-system, da wird einem in CPP gezeigt wie es geht.
Im Anhang ist der komplette CPP Sourcecode. Vielleicht bekommt den ja jemand unter Delphi zum laufen dann wäre alles geklärt.

edit
Und wenn alle Stricke reißen, nircmd ist ein kleines Konsolen Programm was auch wie hier how-to-control-the-volume-level-of-specific-application-from-command-line-on-windows beschrieben eingesetzt werden kann um Zugriff auf Lautstärke eines bestimmten Prozesses zu erlangen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:37 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