Автоматическое переключение предустановок эквалайзера на основе аудиовыхода (внутренний динамик или внешний)
Приведенные ниже факты основаны на опыте использования Ubuntu 13.10 на 64-разрядном ноутбуке.
Контекст / проблема: плохие ораторы
Как известно многим, у динамиков ноутбука "частотная характеристика очень неравна", как сказал бы профессионал в области звука. Нормальные люди говорят: "Они звучат очень плохо ".
Решение первого шага: выравнивание
Выравнивание обеспечивает ценный обходной путь, значительно улучшая качество звука за один раз. Например, я установил PulseAudio Equalizer из Web Upd8.
Для получения хороших результатов значения эквалайзера следует выбирать на основе измерений, но это уже другая история (я мог бы сделать это только с Ubuntu, хотя это сложно, спросите меня о деталях).
Оставшаяся проблема: кривая выравнивания зависит от выхода
Значения эквалайзера привязаны ко всей цепочке, хотя, как правило, только динамики являются основным источником неравного отклика.
Это означает, что у меня есть два профиля выравнивания:
- один для динамиков ноутбука (с сильно изменяющейся кривой эквалайзера)
- другая (намного более плоская кривая, поэтому отключение эквалайзера часто допустимо), когда внешнее стерео подключено, например, к разъему 3,5 мм.
Текущая ситуация на практике: auto un / mute, хорошо, но недостаточно
- При подключении 3,5-мм разъема к внешней стереосистеме внутренние динамики автоматически отключаются, а уровень громкости регулируется стеком Ubuntu. Это хорошо, но недостаточно.
- При отключении внутренние динамики автоматически активируются снова. Это хорошо, но недостаточно.
Улучшение: не только автоматическое отключение звука, но и автоматический выбор кривой эквалайзера
Было бы намного лучше иметь правильную предустановку эквалайзера при отключении / подключении разъема 3,5 мм. Подключите внешний стерео, плоская кривая выбрана. Отключите стерео, внутренний динамик получит кривую коррекции.
Вопросы
Как сделать быстрый и грязный взлом? Как обнаружить штекер из скрипта?
Относительно обнаружения события подключения. Я не смог найти документацию в Интернете, плюс ключевое слово "jack" возвращает результаты, относящиеся к набору программного обеспечения jack, не относящемуся к делу. Скудные стартовые точки: звук - Как автоматически изменить уровень громкости при отключении / подключении наушников? - Спросите Ubuntu Jack для обнаружения аудио: Чертежи: Ubuntu
Относительно изменения кривой эквалайзера я не смог найти никакой документации о
pulseaudio-equalizer-gtk
, Скрипт для проверки концепции, работающий с файлами, затем вызывающийpulseaudio-equalizer interface.applysettings
может изменить настройки, но GUI не будет знать.
Как выполнить чистую настройку: назначьте кривую выравнивания внутреннему динамику, а не просто подключите событие.
Например, я подключил аудиоустройство USB и воспроизводил аудио через него. Быстрый и грязный хак изменит кривую эквалайзера всякий раз, когда разъем 3,5 мм не подключен / не подключен, хотя звук фактически продолжает поступать на аудиоустройство USB, а не на внутренний динамик, что делает изменение кривой эквалайзера несущественным.
В "чистой" настройке профиль эквалайзера будет четко назначен внутреннему динамику, что сделает его более надежным. Безотносительно ситуации это будет всегда (и только) применено когда необходимо.
Кто-нибудь работает над этим? Любой намек?
Спасибо за Ваше внимание.
2 ответа
Поскольку у меня есть похожая проблема, я создал "быстрый и грязный" скрипт на python, который использует DBus-Events для Pulaudio, чтобы определить, когда активировать какой профиль эквалайзера.
Монтаж
Чтобы использовать его, вы должны добавить следующую строку в /etc/pulse/default.pa:
load-module module-dbus-protocol
Затем отключите эквалайзер с помощью pulseaudio-equalizer-gtk и нажмите "Применить настройки", теперь закройте графический интерфейс.
Загрузите apply-equalizer.py, сохраните его где-нибудь и сделайте его исполняемым.
Выполните это как пользователь (!). Может быть, вам нужно установить некоторые дополнительные модули Python. Также вы можете автоматически запускать его при входе в систему (я не знаю, как это лучше всего сделать).
использование
Сценарий создает конфигурации эквалайзера для каждого порта [1] в ~/.config/apply-equalizer и выполняет их символическую ссылку, если устройство меняет выходной порт (например, наушники подключены или нет).
[1]: многие звуковые карты имеют разные порты, например, один порт динамика и один порт для наушников
Так:
- Отключите наушники.
- Открытый импульсный аудио-эквалайзер GUI
- Настройте эквалайзер-настройки, пока он не будет звучать хорошо
- Затем "Применить настройки" назначит выполненную вами конфигурацию (в том числе, если эквалайзер вообще включен) текущему порту (в данном случае динамики)
- закройте GUI и повторите шаги 2 для каждого порта, который вы хотите назначить (наушники не подключены)
Теперь настройки эквалайзера автоматически настраиваются при переключении между динамиками и наушниками.
Вот ручное решение для переключения между Equalizor ON (с вашими любимыми настройками) и OFF:
if [ "$(pulseaudio-equalizer status | grep "Equalizer status" | cut -d"[" -f2 | cut -d"]" -f1)" == "enabled" ]; then
pulseaudio-equalizer disable
else
pulseaudio-equalizer enable
fi
Сохраните как файл как скрипт bash, создайте новый стартер панели, чтобы иметь возможность запускать скрипт непосредственно с рабочего стола или с панели меню.