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
, pactl
i 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.
źródło
mediainfo
lubffmpeg
lubavconv
) a następnie użyj,pacmd
aby 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.Odpowiedzi:
To tylko koncepcja, a nie pełne rozwiązanie:
Możesz być w stanie samodzielnie obsługiwać zdarzenia,
patcl subscribe
jeś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ń, zpatcl subscribe
któ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:
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.
źródło
pactl list | grep format.channels
powinieneś 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.