Автоматичне перемикання профілів PulseAudio на основі кількості вхідних каналів


39

Я використовую аудіо через HDMI до свого приймача, до якого підключена повна настройка 7.1. Однак у більшості речей, які я слухаю, є набагато менше каналів - деякі є моно, більшість - стерео, трохи - 5.1. Коли приймач подається на потрібну кількість каналів, він має різні ефекти DSP, які спрацьовують досить добре (наприклад, в розбитті центрального каналу, при відправці бази на сабвуфер, автоматичному виявленні оточення матриці Dolby тощо). Це припиняє роботу, якщо ви надсилаєте йому повний 7.1-сигнал із купою безшумних каналів.

Кількість вихідних каналів у PulseAudio конфігурується, за карткою / раковиною, за профілем, присвоєним картці. Ви можете змінити призначений профіль з pacmd, pactlі різними програмами з графічним інтерфейсом.

Як я можу налаштувати його на автоматичну зміну профілю на основі використання каналу в потоці вводу? Наприклад, якщо вхідні потоки використовують лише передній лівий і правий фронт, перейдіть до стереопрофілю. Якщо вони також використовують задній-лівий і задній-правий, перейдіть на квадрофонічний тощо.


3
Можливо, я помиляюся, але я не думаю, що це взагалі можливо. Pulseaudio керує кількома потоками одночасно: який профіль буде правильним, якщо різні потоки з різними номерами каналів грають разом?
Алессіо Гаета

@meden Та, що має найбільшу кількість каналів, я думаю.
дероберт

Так, звичайно, але все ж будуть випадки, коли ви не змогли досягти своєї мети. До речі, я не думаю, що в Pulseaudio є спосіб умовно переключити профіль. Можливо, посібник Kodi по Pulseaudio [ kodi.wiki/view/PulseAudio] може бути корисним, щоб мати якусь підказку (тобто, використовуючи "passthrough" і нехай ваш приймач виконує всю роботу, за умови, що він підтримує всі формати, які ви використовуєте).
Алессіо Гаета

Це цікаве питання. У мене немає доступних налаштувань аудіо для перевірки цього, але для вирішення проблеми, якщо ви створили профілі для кожного передбаченого вами екземпляра, встановіть сценарій, щоб заздалегідь проаналізувати потоки (можливо, переглянувши вихід mediainfoабо ffmpegабо avconv) а потім скористайтеся pacmdдля вибору відповідного профілю перед запуском плеєра. З логічної точки зору, я б очікував, що він спрацює, якщо ви відтворюєте по одному аудіо за раз.
Старійшина Гейк

4
Можливо, варто надіслати це запитання як запит на функцію у startpad.net/bugs/bugtrackers/pulseaudio-bugs, якщо він ще не був надісланий туди. Це було б цікавою особливістю, і імпульсне звучання, можливо, може вирішити це краще всередині, ніж за допомогою зовнішнього сценарію.
Олександр

Відповіді:


1

Це просто концепція і не має повного рішення:

Можливо, ви зможете самостійно керувати подіями, patcl subscribeякщо зможете призначити конфігурації клієнтам pulsaudio (наприклад, якщо підключений плеєр фільму, ви переходите на конфігурацію 7.1, інакше ви використовуєте стереоконфігурацію). Ви отримаєте постійний потік подій, з patcl subscribeяким можна впоратися, спостерігаючи за підключеннями клієнтів. Тоді ви можете просто зателефонувати на pactl / pacmd, щоб змінити профіль.

Приклад виведення підписки на 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

Зауважте, що у вас все ще виникає проблема вирішувати випадки, коли у вас є кілька клієнтів з різною кількістю каналів.

Крім того, вищезазначений підхід досить обмежений. Налаштування для кожної програми недостатньо для виявлення реальної кількості використаних каналів програми (наприклад, vlc може відтворити відео 5.1 або 7.1). Я не знайшов способу отримати кількість фактично використаних каналів імпульсного клієнта через pactl, але я, можливо, пропустив тут деякі варіанти. Крім того, ви також зможете підключитися до програми для відеоплеєра і отримати там форму пропущених бітів.


З pactl list | grep format.channelsвами ви зможете дізнатися макс. кількість використаних каналів (і також більше інформації). Використання цієї інформації в сценарії, ініційованому абонентськими подіями, може призвести до рішення.
гребіж
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.