Прямое управление звуковым процессором.
Цель
Звуковой процессор, установленный на наших устройствах, а это ROHM BD37534FV и аналоги, включая часто встречающиеся BD3702FV, имеет следующие функции:
- Трехполосный параметрический эквалайзер с регулировкой усиления в пределах -20dB – +20dB, частоты и добротности фильтра в каждой полосе. Настраиваемый блок тонкомпенсации с усилением от 0dB до +20dB, с настройкой частоты фильтра и уровня подавления высоких частот. Настройки выхода сабвуфера, включая выбор источника сигнала, частоты среза, фазы и усиления в канале.
В штатной реализации, все вышеперечисленное не учтено и не поддерживается:
- Вместо 3-полосного параметрического эквалайзера прикручен внешне 9-полосный графический, с весьма странной логикой работы – каждая из 3 групп по 3 полосы регулирует одну полосу процессора, усредняя свои значения. Видимо, дитя китайского маркетинга. Тонкомпенсация производится не с использованием встроенного аппаратного блока, а простым подъемом низких и высоких частот, что далеко не то же самое. Настройки сабвуфера фиксированы и не настраиваются.
Кроме того, в штатной реализации настройки эквалайзера относятся к любому входу, будь то система, радио, DVD и т. д. Опыт подсказывает, что желательно иметь отдельные настройки эквалайзера для разных входов – звук от радио, например, чаще хочется скорректировать совсем не так, как при прослушивании музыки из файлов или CD.
Описание
Доработка состоит из аппаратной модификации и программной.
Аппаратная модификация заключается в переключении шины I2C, по которой управляется звуковой процессор, с MCU на плату Android.
Программная модификация разделена на две части – системный патч и пользовательское приложение-эквалайзер.
Системный патч состоит из модуля для Xposed Framework, и двух файлов – библиотеки, позволяющей вызывать функции Linux из Android и драйвера устройства для управления шиной I2C.
Пользовательское приложение позволяет удобно всем этим управлять – это эквалайзер, баланс и настройки.
Аппаратная модификация
Необходимо переключить шину управления I2C звуковым процессором, как показано на схеме:

Рисунок 1, схема аппаратной модификации
Печатные платы у различных устройств разные, поэтому общую инструкцию дать невозможно. Общее правило таково: найти на плате сам звуковой процессор и микросхему-звуковой кодек WM8731, и прозвонить от их соответствующих выводов резисторы. Ну и далее по обстоятельствам.
Ниже фотографии того, как это выглядит в головном устройстве Joying на RK3188 и экраном 1024х600, версия для Volkswagen. Фотографии делались несколько сумбурно, поэтому резисторы то есть, то нет, но на изображениях все отмечено.

Рисунок 2, звуковой процессор, резисторы выпаяны

Рисунок 3, пайка проводов к резисторам со стороны звукового процессора

Рисунок 4, со стороны платы Android и звукового кодека WM8731
Программный патч
Скопировать файл libjnidispatch. so в директорию /system/lib и выставить права доступа в 644.
Проверить, есть ли в директории /dev файлы i2c-0 … i2c-4, если их нет, то скопировать файл i2c-dev. ko в директорию /system/lib/modules и выставить права доступа 644; если же файлы i2c-0 … i2c-4 уже есть, то ничего делать не надо – значит, драйвер шины I2C уже вкомпилирован в ядро. По наблюдениям, в прошивках для RK3066 драйвера в ядре нет и копировать надо, а в прошивках для RK3188 драйвер уже есть в ядре.
Далее нужно установить MTCCSC. apk – это модуль для Xposed Framework – и активировать его в самом Xposed.
Теперь нужно перезагрузиться. После перезагрузки идем в Xposed Installer, Modules, находим там MTC Custom Sound Control, жмем на него, и он выводит статус. Если все прошло успешно, то увидим такое (channel может меняться, но, как правило он равен 4 на RK3188 и 0 на RK3066):

Рисунок 5, проверка статуса, успех
Если же что-то пошло не так, то увидим следующее:

Рисунок 6, проверка статуса, ошибка
При наличии ошибок дальше не имеет смысла продолжать, сначала необходимо добиться успеха.
Status может быть одним из следующих:
- No patch detected – либо MTCCSC модуль не активирован, либо устройство еще не перезагружалось после установки. mcu, No device driver i2c-dev – значит, что на устройстве, требующем драйвера i2c-dev. ko, его не скопировали в /system/lib/modules, либо проблема с правами доступа. mcu, Exception com/sevenfloor/mtccsc/I2cBus$CLib – свидетельствует об отсутствии файла библиотеки libjnidispatch. so или о проблемах с правами доступа к этому файлу. No access to /dev/i2c-?; <дополнительный текст ошибки> - несмотря на наличие драйвера, не получается получить программный доступ к шине i2c через файлы драйвера. Нормально такое не должно случаться, а если случилось, нужно связываться с автором для дальнейших разбирательств. mcu, Error in write() 11 (no response from i2c slave) – программный доступ к шине работает, но звуковой процессор на шине не обнаружен – необходимо проверять пайку, где-то что-то сделали не так. mcu, Error in write() 110 (no response from i2c slave) – то же самое. i2c, Channel x (x - число) – все работает верно
Приложение эквалайзера
После установки программного патча и при наличии успешного статуса, можно установить SoundControl. apk – это и есть эквалайзер. При установке он автоматически интегрируется с системой, т. е. он будет запускаться вместо штатного из настроек и из шторки уведомлений.
Если вы его установите, не добившись сначала успеха с патчем, то при запуске увидите следующее:

Рисунок 7, эквалайзер после запуска, если есть проблемы с патчем
Если же все нормально, получим:

Рисунок 8, панель эквалайзера
Слева вертикальная панель навигации с тремя пунктами: эквалайзер, баланс и настройки.
Режим эквалайзера
Эти настройки применяются и сохраняются отдельно для каждого входа (Система, Радио, ТВ, ДВД и т. п.)
Усиление – уровень предварительного усиления, то, что штатно можно настроить в заводских настройках с перезагрузкой. Здесь выведено для оперативного регулирования на ходу. Зачем нужно – разные входы изначально имеют или могут иметь разный уровень сигнала. Для того, чтобы при переключении между радио и системой или, например, линейным входом, громкость не прыгала при одном и том же положении главного регулятора громкости, используется этот регулятор. Плюс, многих не устраивает слишком тихий звук при максимальном положении главной громкости – можно поднять тут.
Низкие/Средние/Высокие – три полосы аппаратного эквалайзера. Регулируется уровень усиления от -20dB до +20dB, частота и добротность фильтра. Чтобы понимать эти настройки, стоит ознакомиться с принципом работы параметрического эквалайзера, все легко ищется в Интернете. В двух словах, мы изменяем уровень сигнала на частоте, при этом изменяется уровень и в некотором диапазоне вокруг. Чем меньше добротность, тем на более широкий диапазон частот распространяется регулировка, а чем больше добротность, тем, наоборот, ширина затрагиваемой полосы частот меньше.
Тонкомпенсация – тоже можно почитать в Википедии, вкратце – это нелинейное, зависящее от громкости, искажение АЧХ для более одинакового восприятия звука на разных уровнях громкости. В целом, регулировка занижает уровень на выбранной частоте. Так же, немного приглушаются и высокие частоты параметром HiCut – чем меньше, тем в меньшей степени это происходит, чем больше – тем сильнее. Ниже графическая иллюстрация от производителя чипа, как это работает.

Рисунок 9, работа тонкомпенсации
В общем и целом, звук все равно придется настраивать на слух ☺
Справа – кнопки, показывающие текущий статус и позволяющие включать-выключать эквалайзер, тонкомпенсацию и режим тишины (mute). То есть, эквалайзер и тонкомпенсацию мало настроить, их еще надо и включить. Сделано для возможности временно отключить, не сбивая настройки, иначе пришлось бы двигать все по нулям, а потом восстанавливать.
И в правом верхнем углу – надпись-индикатор текущего активного входа (Система, Радио и т. д.), просто для информации.
Режим баланса

Рисунок 10, режим баланса
Тут все понятно, визуально представлен салон от Toyota Land Cruiser Prado, для вашего комфорта, кружок по-прежнему можно таскать пальцем и двигать кнопками. Сброс – вернуть точно в центр.
Режим настроек

Рисунок 11, режим настроек
Здесь можно настроить сабвуфер и диапазон регулировки громкости.
Выход сабвуфера в наших устройствах может брать сигнал с фронтальных каналов, с тыловых, и со специально предназначенного канала с фильтром низких частот. Если сабвуфер подключен к фронту или тылу, на него будет подаваться весь диапазон частот. Если же выбран вход от ФНЧ, то вступают в силу настройки частоты среза (можно и отключить для подачи полного диапазона), фазы (0 или 180 градусов) и так же уровня усиления.
Настройки громкости позволяют подогнать границы регулировки громкости под вашу аппаратуру или желание. Минимальный уровень – это когда системный регулятор на минимуме, максимальный уровень – когда он на максимуме. По данным производителя, при регулировке громкости выше 0dB значительно возрастают шумы, так что я бы, наверное, советовал не превышать этот уровень, а лучше чуть поднять уровень предварительного усиления (первый регулятор в эквалайзере).


