Systemlautstärke setzen und auslesen

Hallo,

ich suche einen verlässlichen, stabilen, latenzarmen und updatesicheren Weg, die Lautstärke einer Soundkarte auszulesen und zu setzen. Bislang verwende ich nircmd. Das ist als externe .exe die jedes Mal aufgerufen werden muss alles andere als schnell, auch kann man damit die Ist-Laustärke nicht lesen, was mich besonders stört (wenn z.B. am Medienrechner jemand per Tastatur die Lautstärke verändert hat).

Ich hatte zwischendrin das ToniTool SoundSource probiert, aber es hat meine IPS-Installation zerschossen und ich musste es wieder rausnehmen. So eine Lösung mit Plugin ist mir leider zu unsicher, das knallt spätestens beim nächsten Update wieder selbst wenn man es zum Laufen bekommt.

Am liebsten wäre mir eigentlich eine Lösung mit einem Windows-Dienst, zu dem ich mich bspw. per UDP verbinden kann. Das wäre auch deshalb toll, weil man dann auch auf einem Remote-Host diese Dinge regeln könnte, ohne dass man da wieder über IPS gehen muss.

Kennt jemand schon etwas in die Richtung oder muss ich mir das selbst stricken?

Oder hat jemand noch eine ganz andere gute Idee wie er das umsetzt?

Lösung im Anhang.

sysvolsvc.exe ist kein richtiger Service sondern einfach ein Programm ohne Interface, das man im Hintergrund laufen lassen kann.

Dann erstellt man sich eine Client Socket die sich auf Port 6400 mit localhost (oder dem entsprechenden entfernten Rechner) verbindet.

Sendet man einen Byte-Wert zwischen 0…100, so wird die Summen-Lautstärke der Standard-Soundkarte auf diesen %-Wert gesetzt. Ändert sich die Systemlautstärke anderweitig, so wird der Wert auf die selbe Weise zurück and die Client Socket übertragen (Registervariable verwenden zum Auswerten). Außerdem wird der aktuelle Wert periodisch an den Client übertragen.

Selbstverständlich ist diese Lösung simpelst gehalten und man könnte jede Menge Features hinzufügen wenn man wollte. Ich persönlich brauche das aber nicht und teile diese Lösung nur für den Fall dass jemand das Problem ähnlich lösen möchte wie ich.

Quellcode kann ich auch herausgeben, das Programm ist in Purebasic geschrieben.

sysvolsvc.exe.zip (8.06 KB)

Super Idee,

eine Frage, wäre es möglich damit auch andere Geräte wie z.B. den StereoMix Ein/Ausgang anzusprechen?

Danke Jo

Gehen tut das theoretisch alles. Müsste halt jemand entwickeln :wink:

Ich habe mir das wie gesagt so simpel gestrickt, weil ich nicht mehr brauche und im Moment auch keine Zeit habe, einen universellen Soundkarten-Fernsteuerdienst zu stricken. Toll wäre so etwas aber, keine Frage.

Ja, man muss nur die Zeit und die Muse dafür haben.
Bin im Moment schon sehr damit beschäftigt mein PHP-Wissen zu festigen.
Evtl. erbarmt sich mal jemand. Eine eigene IPS-Funktion dafür wäre schon Klasse.

Jo

fürs zur Verfügung stellen des Services.

Sowas habe ich schon lange vermisst. Man kann ja über das Webfront Audiodaten wiedergeben, aber mangels Einstellmöglichkeit der Lautstärke, war das nicht so richtig brauchbar.
Jetzt habe ich den Service installiert und kann ihn per Script ansprechen.
Mal sehen was ich jetzt draus machen kann.

Hm, mit den hierbei eingerichteten Mediplayern klappt das bie mir eigentlich richtig gut.

Grüße
galleto

Hallo zusammen,

ich möchte diesen Thread nochmal auch der Versenkung nach oben holen. Ich habe meinen Server hinter der Soundkarte mit eine Vertärker und Lautsprechern aufgemotzt. Nun ist das Poti des Verstärker (nackte Platine hinter Verkofferung) nicht zugänglich. Ich möchte daher die Lautstärke Windows-seitig aber über IPS steuern können.
Der Hinweis auf „sysvolsvc.exe“ war schon gut … ich habe auch eine Client Socket erstellt, aber dann?
Oder geht es vllt auch ganz anders? Wie macht Ihr das?

Moin honk0504,

ich nutze dazu die Nircmd Tools und habe in einem Skript folgende Defines deklariert:

define ("KCD_SET_VOL_SYSTEM", "IPS_ExecuteEx('C:/IP-symcon/media/nircmd.exe', 'setsysvolume 34000', false, false, 1);");
define ("KCD_SET_VOL_SYSTEM_PLUS", "IPS_ExecuteEx('C:/IP-symcon/media/nircmd.exe', 'changesysvolume 5000', false, false, 1);");
define ("KCD_SET_VOL_SYSTEM_MINUS", "IPS_ExecuteEx('C:/IP-symcon/media/nircmd.exe', 'changesysvolume -5000', false, false, 1);");

Diese vordefinierten Befehle werden dann mit eval aufgerufen um die Lautstärke zu regulieren. Dies funktioniert ohne Probleme :wink:

Gruß
Hans

Wie geht das mit dem eval?

Gesendet von meinem Nexus 7 mit Tapatalk

Moin,

zum Nachlesen hier PHP: eval - Manual schauen :slight_smile: Konkret als Beispiel so:

eval(KCD_SET_VOL_SYSTEM);
//Erhöung der Systemlautstärke
eval(KCD_SET_VOL_SYSTEM_PLUS);

Die define und eval Konstruktion habe ich nur gewählt, damit derartige Befehle in einem zentralen Skript definiert sind. Ohne diese Konstruktion sollte es direkt auch so gehen, wenn sich nircmd im Verzeichnis IP-Symcon\media befindet.:

IPS_ExecuteEx('C:/IP-symcon/media/nircmd.exe', 'changesysvolume -5000', false, false, 1); 

Gruß
Hans

Hallo Hans,

vielen Dank für Deine Alternative, allerdings würde ich es schon gerne mit „sysvolsvc.exe“ machen wollen, da ich damit bidirektional die Werte bekomme (setzen und lesen).
Ich habe nun alles eingerichtet und bekomme auch den Wert der Systemlautstärke im Debug von der RegisterVariable angezeigt.

TXT: 30.07.2018 13:12:40.00 | RECEIVED | /
HEX: 30.07.2018 13:12:40.00 | RECEIVED | 2F
TXT: 30.07.2018 13:12:40.00 | PROCESSED | /
HEX: 30.07.2018 13:12:40.00 | PROCESSED | 2F
TXT: 30.07.2018 13:12:41.00 | RECEIVED | C
HEX: 30.07.2018 13:12:41.00 | RECEIVED | 43
TXT: 30.07.2018 13:12:41.00 | PROCESSED | C
HEX: 30.07.2018 13:12:41.00 | PROCESSED | 43
TXT: 30.07.2018 13:13:33.00 | RECEIVED | C
HEX: 30.07.2018 13:13:33.00 | RECEIVED | 43
TXT: 30.07.2018 13:13:33.00 | PROCESSED | C
HEX: 30.07.2018 13:13:33.00 | PROCESSED | 43

Wie bekomme ich nun diesen Wert in meine Variable (Integer) und von der Variablen (über Webfront) per RegisterVariable in die Systemlaustärke?

Hallo, hast du es hinbekommen ? Stehe gerade vor derselben Frage bzw. suche einer Möglichkeit. Zumindest das Switchen des Audiodevice konnte ich schon mal ermöglichen (aktuell nicht bidirektional). Ich führe vom Rock Pi via ssh eine auf dem Zielrechner befindliches Powershell script aus (welches ich zuvor in eine .exe verwandelt habe) etwas umständllich… aber es funktioniert. Jetzt fehlt mir nur noch die Lautstärke… Bidirektional wäre natürlich der Hammer! Hat jemand eine Idee wie ich vom Rock Pi aus auch Powershell scripte starten kann und deren Rückmeldungen lesen kann bzw verarbeiten?