Звук

Для роботи зі звуком Ubuntu Touch використовує звуковий сервер Pulseaudio, який умовно лежить між звуковим HAL-драйвером пристрою та програмами (або іншими системними компонентами). Крім того, він відповідає також за використання звукового HAL-драйвера для голосових викликів та підтримки Bluetooth-гарнітур (та навушників).

../../_images/sound-architecture.svg

Для спілкування зі звуковим HAL-драйвером Ubuntu Touch використовує pulseaudio-modules-droid від SailfishOS. Цей модуль відповідає за:

  • Завантаження відповідного звукового HAL-драйвера з розділу постачальника (vendor).

  • Забезпечення доступу Pulseaudio до звукових входу та виходу.

  • Правильне налаштування звукового HAL-драйвера для голосових викликів, перенаправлення голосу на навушники, динамік чи на Bluetooth-гарнітуру.

Налаштування нюансів pulseaudio-modules-droid

Через велику різноманітність того як виробники реалізовують звуковий HAL-драйвер в Android, іноді потрібно передати pulseaudio-modules-droid деякі параметри. В Ubuntu Touch це робиться через додатковий ключ Deviceinfo PulseaudioModulesDroid_ExtraCardArgs.

З повним переліком опцій можна ознайомитися на сторінці pulseaudio-modules-droid’s у GitHub. Проте, нижче наведені декілька опцій, які можна додати:

  • pulseaudio-modules-droid може на деяких пристроях неправильно визначити частоту дискретизації. Якщо звук на виході клацає, грає швидше чи повільніше, спробуйте додати rate=48000 або rate=44100.

  • якщо схоже, що не регулюється гучність, можна додати hw_volume=false.

  • якщо PulseAudio під час голосового виклику аварійно завершує роботу та/або голосовий виклик не видає звуку можна спробувати use_legacy_stream_set_parameters=true.

Налаштуйте pulseaudio-modules-droid для зв’язку з HAL-драйвером, основаним на Binder

На деяких пристроях pulseaudio-modules-droid може не завантажувати звуковий HAL-драйвер напряму, але повинен для цього «спілкуватися» через Binder. Але оскільки у pulseaudio-modules-droid не було задумано, щоб він обмінювався інформацією із HAL-драйвером через Binder, необхідні обхідні шляхи.

Перевірити, чи для Вашого пристрою потрібні ці обхідні шляхи можна командою:

ls /android/*/lib64/hw/audio.primary.*

Якщо відповідь буде тільки audio.primary.default.so, зазвичай це означає, що ці обхідні шляхи потрібні. Для їх реалізації виконайте наступні кроки:

  1. Підмініть («Overlay») модуль audio.primary.default.so іншим сумісним через сімлінк. У репозиторії джерельного коду пристрою виконайте команду:

ln -s \
    /system/lib64/hw/audio.hidl_compat.default.so \
    overlay/vendor/lib64/hw/audio.primary.default.so

audio.hidl_compat.default.so — це модуль обгортки з реалізацією інтерфейсу звукового HAL-драйвера через з’єднання з наявним драйвером HAL через Binder, що дозволяє таким чином pulseaudio-modules-droid з ним з’єднуватися.

  1. Підмініть init.disabled.rc, щоб процес звукового драйвера не був деактивований. Стандартно процес звукового HAL-драйвера вимкнений, оскільки очікується, що pulseaudio-modules-droid зможе використовувати Audio HAL напряму. Це робиться таким чином:
    • Візьміть копію init.disabled.rc з робочої системи. Це можна зробити після завантаження системи через ADB або SSH. Наприклад:

    adb pull /system/etc/init/init.disabled.rc
    
    • Відредагуйте цей файл, позначивши як коментар секцію з audio-hal. Цю всю частину можна закоментувати додавши на початку кожного рядку #. Наприклад:

    # service vendor.audio-hal-2-0 android.hardware.audio@2.0-service_HYBRIS_DISABLED
    #     disabled
    #     oneshot
    #     override
    
    • Покладіть змінений файл до теки для підміни у репозиторії пристрою: overlay/system/etc/init/init.disabled.rc.

Примітка

Якщо Ваш порт не перенесено на метод підміни «overlaystore», вам знадобляться підміни в інших місцях. По допомогу зверніться до групи портування UBports porting group.