Ich verwende Audio über HDMI zu meinem Receiver, an den ein vollständiges 7.1-Setup angeschlossen ist. Das meiste, was ich höre, hat jedoch viel weniger Kanäle - einige sind Mono, die meisten Stereo, ein bisschen 5.1. Wenn der Receiver mit der richtigen Anzahl von Kanälen gespeist wird, hat er verschiedene DSP-Effekte, die recht gut funktionieren (z. B. beim Aufteilen eines Center-Kanals, beim Senden der Basis an den Subwoofer, beim automatischen Erkennen des Dolby-Matrix-Surrounds usw.). Dies funktioniert nicht mehr, wenn Sie ein vollständiges 7.1-Signal mit einer Reihe stiller Kanäle senden.
Die Anzahl der Ausgangskanäle in PulseAudio wird pro Karte / Senke anhand des der Karte zugewiesenen Profils konfiguriert. Sie können das zugewiesene Profil ändern mit pacmd
, pactl
und verschiedene GUI - Programme.
Wie kann ich festlegen, dass das Profil basierend auf der Kanalnutzung in den Eingabestreams automatisch geändert wird? Wenn die Eingabestreams beispielsweise nur von vorne links und von vorne rechts verwendet werden, wechseln Sie zum Stereoprofil. Wenn sie auch Links-Links und Rechts-Links verwenden, wechseln Sie zu Quadrophonic usw.
quelle
mediainfo
oderffmpeg
oderavconv
). und verwenden Sie dannpacmd
, um das entsprechende Profil vor dem Starten Ihres Players auszuwählen. Aus logischer Sicht würde ich davon ausgehen, dass es funktioniert, vorausgesetzt, Sie spielen jeweils ein Audio.Antworten:
Dies ist nur ein Konzept und keine vollständige Lösung:
Möglicherweise können Sie Ereignisse
patcl subscribe
selbst verwalten, indem Sie pulsaudio-Clients Konfigurationen zuweisen (z. B. wenn der Movie Player eine Verbindung herstellt, wechseln Sie zur 7.1-Konfiguration, andernfalls verwenden Sie die Stereokonfiguration). Sie erhalten einen konstanten Strom von Ereignissenpatcl subscribe
, die Sie verarbeiten können, indem Sie Clientverbindungen beobachten. Dann können Sie einfach pactl / pacmd aufrufen, um das Profil zu ändern.Beispielausgabe von pactl subscribe:
Beachten Sie, dass Sie immer noch Probleme haben, Fälle zu behandeln, in denen Sie mehrere Clients mit einer unterschiedlichen Anzahl von Kanälen haben.
Darüber hinaus ist der obige Ansatz eher begrenzt. Die Einstellungen pro Anwendung reichen nicht aus, um die tatsächliche Anzahl der verwendeten Kanäle der Anwendung zu ermitteln (z. B. kann vlc ein 5.1- oder 7.1-Video abspielen). Ich habe keine Möglichkeit gefunden, die tatsächlich verwendeten Kanäle eines pulseaudio-Clients über pactl abzurufen, aber ich habe hier möglicherweise einige Optionen verpasst. Alternativ können Sie sich auch in die Videoplayer-Anwendung einbinden und die fehlenden Bits dort abrufen.
quelle
pactl list | grep format.channels
sollten Sie in der Lage sein, die max herauszufinden. Anzahl der verwendeten Kanäle (und weitere Informationen). Die Verwendung dieser Informationen in einem Skript, das von abonnierten Ereignissen ausgelöst wird, kann zu einer Lösung führen.