Автоматическое переключение предустановок эквалайзера на основе аудиовыхода (внутренний динамик или внешний)

Приведенные ниже факты основаны на опыте использования Ubuntu 13.10 на 64-разрядном ноутбуке.

Контекст / проблема: плохие ораторы

Как известно многим, у динамиков ноутбука "частотная характеристика очень неравна", как сказал бы профессионал в области звука. Нормальные люди говорят: "Они звучат очень плохо ".

Решение первого шага: выравнивание

Выравнивание обеспечивает ценный обходной путь, значительно улучшая качество звука за один раз. Например, я установил PulseAudio Equalizer из Web Upd8.

Для получения хороших результатов значения эквалайзера следует выбирать на основе измерений, но это уже другая история (я мог бы сделать это только с Ubuntu, хотя это сложно, спросите меня о деталях).

Оставшаяся проблема: кривая выравнивания зависит от выхода

Значения эквалайзера привязаны ко всей цепочке, хотя, как правило, только динамики являются основным источником неравного отклика.

Это означает, что у меня есть два профиля выравнивания:

  • один для динамиков ноутбука (с сильно изменяющейся кривой эквалайзера)
  • другая (намного более плоская кривая, поэтому отключение эквалайзера часто допустимо), когда внешнее стерео подключено, например, к разъему 3,5 мм.

Текущая ситуация на практике: auto un / mute, хорошо, но недостаточно

  • При подключении 3,5-мм разъема к внешней стереосистеме внутренние динамики автоматически отключаются, а уровень громкости регулируется стеком Ubuntu. Это хорошо, но недостаточно.
  • При отключении внутренние динамики автоматически активируются снова. Это хорошо, но недостаточно.

Улучшение: не только автоматическое отключение звука, но и автоматический выбор кривой эквалайзера

Было бы намного лучше иметь правильную предустановку эквалайзера при отключении / подключении разъема 3,5 мм. Подключите внешний стерео, плоская кривая выбрана. Отключите стерео, внутренний динамик получит кривую коррекции.


Вопросы

Как сделать быстрый и грязный взлом? Как обнаружить штекер из скрипта?

Как выполнить чистую настройку: назначьте кривую выравнивания внутреннему динамику, а не просто подключите событие.

Например, я подключил аудиоустройство 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]: многие звуковые карты имеют разные порты, например, один порт динамика и один порт для наушников

Так:

  1. Отключите наушники.
  2. Открытый импульсный аудио-эквалайзер GUI
  3. Настройте эквалайзер-настройки, пока он не будет звучать хорошо
  4. Затем "Применить настройки" назначит выполненную вами конфигурацию (в том числе, если эквалайзер вообще включен) текущему порту (в данном случае динамики)
  5. закройте 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, создайте новый стартер панели, чтобы иметь возможность запускать скрипт непосредственно с рабочего стола или с панели меню.

Другие вопросы по тегам