Звуковой триггер

Функция Sound Trigger позволяет приложениям распознавать определённые акустические события, например, ключевые слова, экономя при этом электроэнергию и обеспечивая конфиденциальность. Примеры использования Sound Trigger: Assistant и Now Playing.

На этой странице представлен обзор архитектуры Sound Trigger и ее интерфейса HAL (Hardware Abstraction Layer).

Стек звукового триггера

Подсистема звукового триггера построена по слоям, как показано на рисунке 1:

sound_trigger_stack

Рисунок 1: Стек звуковых триггеров

Следующий список более подробно описывает каждый слой, показанный на рисунке 1:

  • Слой HAL (зеленый) содержит специфичный для поставщика код, который реализует интерфейс Sound Trigger HAL (STHAL).

  • SoundTriggerMiddleware (выделено жёлтым) располагается над интерфейсом HAL. Он взаимодействует с HAL и отвечает за такие функции, как совместное использование HAL различными клиентами, ведение журнала, обеспечение прав доступа и обеспечение совместимости со старыми версиями HAL.

  • Система SoundTriggerService (отмечена синим цветом) располагается над промежуточным программным обеспечением. Она обеспечивает интеграцию с другими функциями системы, такими как телефония и события батареи. Она также поддерживает базу данных звуковых моделей, индексированных по уникальным идентификаторам.

  • Над уровнем SoundTriggerService стек (коричневого цвета) обрабатывает функции, специфичные для Assistant и общих приложений, по отдельности.

Функция стека Sound Trigger заключается в доставке дискретных событий, представляющих собой акустические события-триггеры. В большинстве случаев стек Sound Trigger не работает со звуком. При получении событий-триггеров приложения получают доступ к фактическому аудиопотоку, соответствующему моменту времени событий, открывая объект AudioRecord через фреймворк Audio. API Sound Trigger HAL предоставляют обработку инициированного события, используемую в фреймворке Audio. Следовательно, поскольку Sound Trigger HAL и Audio HAL связаны внутри, они обычно используют общий процесс.

Интерфейс HAL звукового триггера

Интерфейс Sound Trigger HAL (STHAL) — это специфичная для поставщика часть стека Sound Trigger, которая обеспечивает аппаратное распознавание командных слов и других звуков. STHAL предоставляет один или несколько движков, каждый из которых использует свой алгоритм, предназначенный для распознавания определённого класса звуков. Когда STHAL обнаруживает триггер, он отправляет событие фреймворку и затем останавливает распознавание.

Интерфейс STHAL указан в /hardware/interfaces/soundtrigger/ .

Интерфейс ISoundTriggerHw поддерживает возможность запуска одного или нескольких сеансов обнаружения одновременно и прослушивания акустических событий. Вызов метода ISoundTriggerHw.getProperties() возвращает структуру Properties содержащую описание реализации и возможности.

Основной процесс настройки сеанса поясняется на рисунке 2:

sthal_state

Рисунок 2: Диаграмма состояний STHAL

Следующие шаги описывают каждое состояние более подробно:

  1. Клиент HAL загружает модель с помощью loadSoundModel() или loadPhraseSoundModel() . Предоставленный объект модели указывает, какой алгоритм обнаружения (движок) конкретной реализации следует использовать, а также параметры, применимые к этому алгоритму. В случае успешного выполнения эти методы возвращают дескриптор, который используется для ссылки на эту модель в последующих вызовах.

  2. После успешной загрузки модели клиент HAL вызывает startRecognition() для начала распознавания. Распознавание продолжается в фоновом режиме до тех пор, пока не наступит одно из следующих событий:

    1. Для этой модели был вызван метод stopRecognition() .
    2. Произошло обнаружение.
    3. Обнаружение прерывается из-за нехватки ресурсов, например, когда инициирован вариант использования с более высоким приоритетом.

    В последних двух случаях событие распознавания отправляется через интерфейс обратного вызова, регистрируемый клиентом HAL при загрузке. Во всех случаях после наступления любого из этих событий обнаружение деактивируется, и дальнейшие обратные вызовы распознавания не допускаются.

    Эту же модель можно запустить снова позднее, и этот процесс можно повторять столько раз, сколько необходимо.

  3. Наконец, неактивная модель, которая больше не нужна, выгружается клиентом HAL с помощью unloadModel() .

Обработка ошибок HAL

Для обеспечения надёжного и согласованного поведения различных реализаций драйверов в Android 11 любые коды ошибок, возвращаемые HAL, обрабатываются как программные ошибки, для устранения которых требуется перезапуск процесса HAL. Это крайняя мера восстановления, и ожидается, что в исправной системе подобные случаи не произойдут.