Peralihan otomatis profil PulseAudio berdasarkan input jumlah saluran


39

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.


3
Mungkin saya salah, tapi saya pikir itu tidak layak sama sekali. Pulseaudio mengelola beberapa aliran sekaligus: profil mana yang benar jika aliran berbeda dengan nomor saluran berbeda diputar bersama?
Alessio Gaeta

@meden Yang dengan jumlah saluran tertinggi, kurasa.
derobert

Ya, tentu saja, tetapi masih akan ada kasus di mana Anda tidak dapat mencapai tujuan Anda. BTW, saya tidak berpikir ada cara di Pulseaudio untuk mengubah profil secara kondisional. Mungkin panduan Kodi untuk Pulseaudio [ kodi.wiki/view/PulseAudio] dapat berguna untuk memiliki beberapa petunjuk (yaitu menggunakan passthrough dan biarkan penerima Anda melakukan semua pekerjaan, asalkan mendukung semua format yang Anda gunakan).
Alessio Gaeta

Ini pertanyaan yang menarik. Saya tidak memiliki pengaturan audio yang tersedia untuk menguji ini, tetapi sebagai upaya untuk menyelesaikannya, jika Anda ingin membuat profil untuk setiap contoh yang Anda bayangkan, siapkan skrip untuk menganalisis aliran di muka (mungkin dengan menangkap keluaran mediainfoatau ffmpegatau avconv) dan kemudian gunakan pacmduntuk memilih profil yang sesuai sebelum meluncurkan pemain Anda, Dari sudut pandang logis saya harapkan itu berfungsi asalkan Anda memutar satu audio pada suatu waktu.
Penatua Geek

4
Mungkin layak mengirimkan pertanyaan ini sebagai permintaan fitur di launchpad.net/bugs/bugtrackers/pulseaudio-bugs jika belum diajukan di sana. Ini akan menjadi fitur yang menarik dan audio pulsa mungkin bisa menyelesaikan ini secara internal lebih baik daripada dengan menggunakan skrip eksternal.
Alexander

Jawaban:


1

Ini hanya konsep dan tidak ada solusi lengkap:

Anda mungkin dapat melakukan penanganan acara sendiri dengan patcl subscribejika 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 konstan patcl subscribe, yang dapat Anda tangani dengan mengamati koneksi klien. Kemudian Anda bisa memanggil pactl / pacmd untuk mengubah profil.

Contoh output dari pactl berlangganan:

$ 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

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.


Dengan pactl list | grep format.channelsAnda 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.
Ridgy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.