[ANNOUNCE] pulsecontrol 0.1.9 - Pulseaudio aus dem OSD heraus steuern

  • Moin!


    Edit: Bugfix-Release 0.1.1
    Edit: Passthrough-Release 0.1.2
    Edit: Hotkey-Release 0.1.3
    Edit: Startup-Script-Release 0.1.4
    Edit: Run-Scripts-Release 0.1.5
    Edit: Sink-Formats-Release 0.1.6
    Edit: Next-Sink-Release 0.1.7
    Edit: yaScriptCommand-Release 0.1.8
    Edit: move-sink-input-next-hotkey-Release 0.1.9
    Quelle: https://github.com/flensrocker…ontrol/releases/tag/0.1.9


    Da ich mich mal ein wenig mit Pulseaudio beschäftigen wollte, und wie man es per API ansteuert, hab ich mal ein kleines Plugin geschrieben.
    Man kann:

    • Das verwendete Profil einer Karte umstellen
    • Eine Wiedergabe zwischen verschiedenen Ausgabegeräten hin und her schieben
    • Das Standard-Ausgabegerät setzen
    • Passthrough-Einstellungen pro Ausgabegerät speichern
    • "move sink input" und "set card profile" lassen sich über die keymacros.conf direkt aufrufen
    • Script mit Befehlen beim Start ausführen
    • per OSD eine *.script-Datei aus dem Config-Verzeichnis des Plugins auswählen und ausführen können


    Am spannendsten finde ich das zweite, weil man damit z.B. on-the-fly zwischen analogen Anschluss und HDMI wechseln kann.


    Ich will noch herausfinden, wie man passthrough bei Pulseaudio konfiguriert (in pavucontrol gibt's da ja Häkchen für, also sollte es möglich sein). Dann könnte man das noch spontan über das OSD konfigurieren. (erledigt mit Version 0.1.2)


    Evtl. wird es auch noch möglich sein, verschiedene Konfigurationen zu speichern, damit man je nach Situation eine auswählen kann. Und falls Pulseaudio irgendwie vergesslich ist, wäre es auch noch denkbar, beim Start eine bestimmte Konfiguration zu laden, damit man in /etc/pulse/system.pa bzw. default.pa nicht herumfuhrwerken muss. (prinzipiell erledigt mit Version 0.1.4 und 0.1.5)


    Passthrough-Einstellungen über einen Befehl im Script setzen können (erledigt mit Version 0.1.6, "set-sink-formats", siehe "svdrpsend plug pulsecontrol list-formats" für eine Liste von verfügbaren Formaten)


    "move-sink-input" versteht nun den speziellen Sinknamen "next" und verschiebt den Input einfach auf den nächsten Sink.


    Anregungen werden durchaus entgegengenommen, ich behalte mir aber das Recht vor zu sagen, dass es über meine Vorstellungen hinausgehen würde.


    Viel Spaß
    wünscht Lars.

  • Kaum veröffentlich man etwas, gibt's auch schon Bugfixes... :)
    Der aktuelle git-Stand crasht jetzt nicht mehr, wenn das Plugin keine Verbindung zu Pulseaudio aufbauen kann.


    Wenn ich jetzt noch ein bisschen Fehlerrückmeldungen im OSD eingebaut habe, gibt's dann wohl noch einen Release.


    Lars.

  • Lars ich muss dich loben, sauber getaggt dein Plugin :tup

    Gruß utiltiy



    VDR Projekte EPGD EPG2VDR

  • Da ich in meiner Firma der git-Guru bin, sollte ich zumindest taggen können... :)


    Ich freue mich auf Rückmeldungen!


    Lars

  • Das klingt gut, hatte zwischenzeitlich mal nen Versuch mit Pulse bin aber wieder zurück auf ALSA. Riecht nach nem neuen Anlauf über die Feiertage :D

    Asus M3N78-EM, AMD Athlon II X2 240e, 4GB DDR21066GeilGreen, Crucial M4 SSD+3TB WD Red, Mystique SaTiX-S2 Dual, Archlinux -> VDR4Arch


    "Freunde sind Menschen, die dich mögen obwohl sie dich kennen"

  • Ja, die pulse-API ist ein klein bisschen gewöhnungsbedürftig, aber das ist jede asynchrone API. Die Doku ist nicht sehr aussagekräftig, man muss schon in den Code schauen, um eine Vorstellung zu bekommen. Wenn man sich loop.* und action* in meinem Plugin ansieht, dann sollte man sehen, wie man neue Abfragen hinzufügen kann.


    Das mit den passthrough-Einstellungen hab ich auch schon gefunden, pavucontrol ist zum Glück halbwegs übersichtlich.


    Mal sehen, was da noch geht. Und wer weiß, vielleicht schaffe ich es ja auch noch irgendwann, Audio direkt auszugeben. Das wäre dann nützlich, um softhddevice um eine native Pulseaudio-Unterstützung zu erweitern. Aber das wird noch dauern...


    Pulseaudio selbst läuft zumindest bei mir unauffällig, ich nutze das Alsa-Pulse-Modul, so dass softhddevice Alsa sieht und Alsa den Ton an Pulseaudio weitergibt, welches dann die eigentliche Hardware ansteuert. Ich hab aber von anderen gehört, dass sie manchmal Aussetzer oder gar keinen Ton haben. Einen Grund konnte ich aber noch nicht finden. Gerüchteweise ist der nvidia-Treiber wohl etwas komisch, da das Sounddevice erst nach dem Start von X da ist oder so. Konnte ich hier aber noch nicht beobachten.


    Lars

  • ich hab das ganze jetzt mal getestet. was soll ich sagen, es funktionierte auf anhieb problemlos.
    kann sauber zwischen analog und digital umschalten, ton ist sofort da. endlich ist die
    frickelei auf der konsole passé. ton-delay lasst sich sauber, unabhaengig zwischen analog
    und digital, einstellen


    fuer die bedienung musste ich eine maus einsetzen. mit der fernbedienung, die eine tastatur
    simuliert, konnte nichts angewaehlt werden.


    wuensche:
    schnelles umschalten der ausgaenge per hotkey oder audiomenu. passthrough ist ja schon in arbeit

  • Hotkey sollte möglich sein.


    Eigentlich wird das OSD ganz normal mit Pfeil hoch/runter und Ok bedient. Da mache ich eigentlich nichts spezielles...


    Lars

  • Eigentlich wird das OSD ganz normal mit Pfeil hoch/runter und Ok bedient. Da mache ich eigentlich nichts spezielles...


    da wird dann aber etwas wohl falsch interpretiert. hoch/runter hat die gleiche auswirkung wie links/rechts.
    wird z.b. der lautstaerkebalken verschoben, ist die auswahl der weiteren punkte mit den genannten tasten nicht moeglich.
    ok und exit funktioniert nach den ersten tests anscheinend.


    hab das eben noch mit der tastatur und den pfeiltasten gegengetestet. gleiches verhalten

  • links/rechts ist ja seitenweise scrollen, bei nur zwei Einträgen sieht es aus, als ob man hoch/runter drückt.


    Ich frage nur die Ok-Taste ab, den Rest lasse ich den vdr machen. Hat sonst immer in meinen Plugins funktioniert.
    https://github.com/flensrocker…ol/blob/0.1.1/menu.c#L101


    An meinem Dev-System hab ich allerdings nur eine Tastatur dran, keine Fernbedienung. Deshalb wird es ein wenig dauern, bis ich das mal in Ruhe getestet habe.


    Lars.

  • Ab Version 0.1.2 lassen sich nun auch die Passthrough-Einstellungen im OSD konfigurieren.
    https://github.com/flensrocker…ontrol/releases/tag/0.1.2


    Evtl. lässt sich das Menü jetzt auch besser bedienen. Ich hab "irgendwas" gemacht bzw. mir woanders abgeguckt. Es ist leider nicht so ganz klar, wie man in einem cOsdMenu bei ProcessKey mit SubMenus umgehen soll... :)


    Lars.

  • Pulseaudio läuft bei yavdr 0.6 als Systemdienst (auch, wenn man das normalerweise nicht machen soll, aber yavdr ist eine dieser Ausnahmen, wo das ok ist).


    Meine /etc/asound.conf:

    Code
    1. pcm.!default {
    2. type pulse
    3. }
    4. ctl.!default {
    5. type pulse
    6. }


    Dann kann man als vdr-User pavucontrol starten und Pulseaudio konfigurieren. Oder man trägt in /etc/pulse/system.pa am Ende die passenden Befehle ein (ich hab da z.B. "load-module module-device-manager" und "load-module module-dbus-protocol" hinzugefügt, wirklich nötig sind die aber nicht). Machbar ist da auch sowas wie "set-default-sink ..." usw..


    Oder man nutzt eben pulsecontrol für die Einstellungen. :)


    Ansonsten funktioniert es bei mir "einfach so". Ach ja, was man bedenken sollte: für passthrough über HDMI muss man ein "hdmi-stereo"-Profil wählen und dann die passthrough-Formate setzen. Der AVR bekommt dann die rohen Daten und kann tun, was er soll. "hdmi-surround" funktioniert nicht, da kommt nur Knattern. Ist verwirrend, aber so steht es z.B. auch in der Kodi-Doku.


    Lars.

  • Ach ja, und dann passiert da vor dem Start und nach dem Stopp im Upstart-Job noch ein wenig Magie, obwohl ich nicht weiß, ob das noch aktuell nötig ist.


    /etc/init/pulseaudio.override


    Lars.

  • pulsecontrol 0.1.3 kann jetzt auch über die keymacros.conf aufgerufen werden.
    https://github.com/flensrocker…ontrol/releases/tag/0.1.3


    keymacros.conf:

    Code
    1. # move sink input
    2. User7 @pulsecontrol 1
    3. # set card profile
    4. User8 @pulsecontrol 2


    Wenn es bei "move sink input" nur einen sink input gibt (d.h. nur eine aktive Wiedergabe läuft), dann wird diese schon direkt ausgewählt und man muss nur noch das Ziel auswählen. Das spart Tastendrücke.


    Lars.


  • und jetzt waere es noch klasse, wenn das ganze per svdrp ebenso funktionieren wuerde


    nutzt eigentlich noch jemand reinen stereo-output? falls ja, waere es nicht schlecht, man koennte per osd die 5.1 nach 2.0 umsetzung waehlen.
    sonst ist der ton (vorwiegend sprache) bei 5.1 ziemlich leise

  • und jetzt waere es noch klasse, wenn das ganze per svdrp ebenso funktionieren wuerde


    Ok, mal schauen. Aber ein paar Befehle gibt es da schon.
    https://github.com/flensrocker…aster/pulsecontrol.c#L143


    nutzt eigentlich noch jemand reinen stereo-output? falls ja, waere es nicht schlecht, man koennte per osd die 5.1 nach 2.0 umsetzung waehlen.
    sonst ist der ton (vorwiegend sprache) bei 5.1 ziemlich leise


    Wenn du mir genauer sagst, was das bzgl. Pulseaudio bedeutet (evtl. mit Screenshot von pavucontrol), dann ist es bestimmt möglich.
    Alternativ nehme ich auch pactl bzw. pacmd Parameter, die könnte ich verstehen.


    Lars.

  • Version 0.1.4 kann nun (momentan noch sehr spartanische) Scripte ausführen.
    Bisher unterstützte Befehle: set-card-profile und move-sink-input


    Und wenn im Config-Directory des Plugins ein Script mit dem Namen startup.script liegt, dann wird es beim Start des Plugins ausgeführt.
    Das kann man nutzen, um beim Start von vdr Pulseaudio mit einem bestimmten Setting zu versorgen.


    Es gibt dann auch einen passenden SVDRP-Befehl EXEC dazu.


    Mal sehen, wie ich das noch weiter ausbaue...


    Lars.