Saya menjalankan audio melalui HDMI ke receiver saya, yang memiliki pengaturan 7.1 penuh yang terhubung dengannya. Namun, sebagian besar hal yang saya dengarkan memiliki saluran yang jauh lebih sedikit — ada yang mono, sebagian stereo, sedikit 5.1. Ketika penerima diumpankan dengan jumlah saluran yang tepat, ia memiliki berbagai efek DSP yang bekerja dengan cukup baik (misalnya dalam membagi saluran pusat, dalam mengirim basis ke subwoofer, auto-deteksi Dolby matrix surround, dll.). Ini berhenti berfungsi jika Anda mengirimkannya sinyal 7.1 penuh dengan sekelompok saluran diam.
Jumlah saluran output di PulseAudio dikonfigurasikan, per-kartu / sink, oleh profil yang diberikan ke kartu. Anda dapat mengubah profil ditugaskan dengan pacmd
, pactl
, dan berbagai program GUI.
Bagaimana saya mengaturnya untuk secara otomatis mengubah profil berdasarkan penggunaan saluran dalam aliran input? Misalnya, jika aliran input hanya menggunakan kiri-depan dan kanan-depan, beralihlah ke profil stereo. Jika mereka menggunakan back-left dan back-right juga, beralihlah ke quadrophonic, dll.
sumber
mediainfo
atauffmpeg
atauavconv
) dan kemudian gunakanpacmd
untuk memilih profil yang sesuai sebelum meluncurkan pemain Anda, Dari sudut pandang logis saya harapkan itu berfungsi asalkan Anda memutar satu audio pada suatu waktu.Jawaban:
Ini hanya konsep dan tidak ada solusi lengkap:
Anda mungkin dapat melakukan penanganan acara sendiri dengan
patcl subscribe
jika Anda dapat menetapkan konfigurasi untuk klien pulsaudio (misalnya, jika pemutar film terhubung, Anda beralih ke konfigurasi 7.1, jika tidak, Anda menggunakan konfigurasi stereo). Anda akan mendapatkan aliran peristiwa yang konstanpatcl subscribe
, yang dapat Anda tangani dengan mengamati koneksi klien. Kemudian Anda bisa memanggil pactl / pacmd untuk mengubah profil.Contoh output dari pactl berlangganan:
Harap dicatat, bahwa Anda masih memiliki masalah untuk menangani kasus di mana Anda memiliki banyak klien dengan jumlah saluran yang berbeda.
Lebih jauh, pendekatan di atas agak terbatas. Pengaturan per aplikasi tidak cukup untuk mendeteksi jumlah sebenarnya dari saluran aplikasi yang digunakan (mis. Vlc mungkin memutar video 5.1 atau 7.1). Saya belum menemukan cara untuk mendapatkan saluran yang benar-benar digunakan oleh klien pulseaudio melalui pactl, tetapi saya mungkin melewatkan beberapa opsi di sini. Atau, Anda mungkin juga bisa menghubungkan ke aplikasi pemutar video itu sendiri dan mendapatkan bentuk bit yang hilang di sana.
sumber
pactl list | grep format.channels
Anda harus dapat mengetahui maks. # saluran yang digunakan (dan lebih banyak informasi juga). Menggunakan informasi itu dalam skrip yang dipicu oleh peristiwa berlangganan dapat mengarah pada solusi.