Automatyczne przełączanie profili PulseAudio na podstawie liczby kanałów wejściowych


39

Przesyłam dźwięk przez HDMI do mojego odbiornika, który ma podłączoną pełną konfigurację 7.1. Jednak większość rzeczy, których słucham, ma znacznie mniej kanałów - niektóre to mono, większość to stereo, trochę 5.1. Gdy odbiornik jest zasilany odpowiednią liczbą kanałów, ma różne efekty DSP, które działają dość dobrze (np. Przy rozdzielaniu kanału środkowego, w wysyłaniu bazy do subwoofera, automatyczne wykrywanie surround Dolby Matrix itp.). To przestaje działać, jeśli wyślesz mu pełny sygnał 7.1 z wieloma cichymi kanałami.

Liczba kanałów wyjściowych w PulseAudio jest konfigurowana, na kartę / zlew, według profilu przypisanego do karty. Można zmienić przypisany profil z pacmd, pactli różne programy GUI.

Jak mogę ustawić automatyczne zmienianie profilu w oparciu o wykorzystanie kanału w strumieniach wejściowych? Na przykład, jeśli strumienie wejściowe wykorzystują tylko lewy przedni i prawy przedni, przełącz się na profil stereo. Jeśli używają również lewy i tylny prawy, przełącz się na kwadrofoniczny itp.


3
Może się mylę, ale nie sądzę, aby było to w ogóle wykonalne. Pulseaudio zarządza wieloma strumieniami jednocześnie: który profil byłby poprawny, gdyby różne strumienie o różnych numerach kanałów były odtwarzane razem?
Alessio Gaeta,

@meden Chyba ten z największą liczbą kanałów.
derobert

Tak, oczywiście, ale nadal będą przypadki, w których nie uda ci się osiągnąć swojego celu. BTW, nie sądzę, że istnieje sposób w Pulseaudio na warunkową zmianę profilu. Być może poradnik Kodi do Pulseaudio [ kodi.wiki/view/PulseAudio] może być przydatny, aby uzyskać jakąś wskazówkę (tj. Użycie przejścia i pozwolić odbiornikowi wykonać całą pracę, pod warunkiem, że obsługuje wszystkie używane formaty).
Alessio Gaeta,

To interesujące pytanie. Nie mam dostępnej konfiguracji audio, aby to przetestować, ale w ramach obejścia, jeśli chcesz utworzyć profile dla każdej przewidywanej instancji, skonfiguruj skrypt do wcześniejszej analizy strumieni (być może poprzez grepowanie wyjścia mediainfolub ffmpeglub avconv) a następnie użyj, pacmdaby wybrać odpowiedni profil przed uruchomieniem odtwarzacza. Z logicznego punktu widzenia spodziewałbym się, że zadziała, pod warunkiem, że grasz po jednym dźwięku na raz.
Starszy Geek

4
Być może warto przesłać to pytanie jako prośbę o funkcję na launchpad.net/bugs/bugtrackers/pulseaudio-bugs, jeśli nie zostało jeszcze tam przesłane. Byłaby to interesująca funkcja, a dźwięk pulsacyjny mógłby prawdopodobnie rozwiązać to wewnętrznie lepiej niż przy użyciu zewnętrznego skryptu.
Alexander

Odpowiedzi:


1

To tylko koncepcja, a nie pełne rozwiązanie:

Możesz być w stanie samodzielnie obsługiwać zdarzenia, patcl subscribejeśli możesz przypisać konfiguracje do klientów pulsaudio (np. Jeśli odtwarzacz filmów się połączy, przełączysz się na konfigurację 7.1, w przeciwnym razie użyjesz konfiguracji stereo). Otrzymasz stały strumień zdarzeń, z patcl subscribektórych możesz sobie poradzić obserwując połączenia klientów. Następnie możesz po prostu wywołać pactl / pacmd, aby zmienić profil.

Przykładowe dane wyjściowe subskrypcji pactl:

$ pactl subscribe 
Event 'change' on sink #0
Event 'remove' on sink-input #93
Event 'change' on sink #0
Event 'change' on source #0
Event 'change' on sink #0
Event 'change' on source #0
Event 'new' on sink-input #98
Event 'change' on sink-input #98

Pamiętaj, że nadal masz problem z obsługą przypadków, w których masz wielu klientów z inną liczbą kanałów.

Ponadto powyższe podejście jest raczej ograniczone. Ustawienia poszczególnych aplikacji nie są wystarczające do wykrycia rzeczywistej liczby używanych kanałów aplikacji (np. VLC może odtwarzać wideo 5.1 lub 7.1). Nie znalazłem sposobu, aby uzyskać liczbę faktycznie używanych kanałów klienta pulseaudio przez Pactl, ale mogłem tutaj pominąć niektóre opcje. Alternatywnie możesz również podłączyć się do samej aplikacji odtwarzacza wideo i uzyskać tam brakujące bity.


Z pactl list | grep format.channelspowinieneś być w stanie znaleźć maks. Liczba wykorzystanych kanałów (i więcej informacji). Wykorzystanie tych informacji w skrypcie wywołanym przez subskrybowane zdarzenia może prowadzić do rozwiązania.
Ridgy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.