Функция Sound Trigger позволяет приложениям распознавать определённые акустические события, например, ключевые слова, экономя при этом электроэнергию и обеспечивая конфиденциальность. Примеры использования Sound Trigger: Assistant и Now Playing.
На этой странице представлен обзор архитектуры Sound Trigger и ее интерфейса HAL (Hardware Abstraction Layer).
Стек звукового триггера
Подсистема звукового триггера построена по слоям, как показано на рисунке 1:
Рисунок 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:
Рисунок 2: Диаграмма состояний STHAL
Следующие шаги описывают каждое состояние более подробно:
Клиент HAL загружает модель с помощью
loadSoundModel()
илиloadPhraseSoundModel()
. Предоставленный объект модели указывает, какой алгоритм обнаружения (движок) конкретной реализации следует использовать, а также параметры, применимые к этому алгоритму. В случае успешного выполнения эти методы возвращают дескриптор, который используется для ссылки на эту модель в последующих вызовах.После успешной загрузки модели клиент HAL вызывает
startRecognition()
для начала распознавания. Распознавание продолжается в фоновом режиме до тех пор, пока не наступит одно из следующих событий:- Для этой модели был вызван метод
stopRecognition()
. - Произошло обнаружение.
- Обнаружение прерывается из-за нехватки ресурсов, например, когда инициирован вариант использования с более высоким приоритетом.
В последних двух случаях событие распознавания отправляется через интерфейс обратного вызова, регистрируемый клиентом HAL при загрузке. Во всех случаях после наступления любого из этих событий обнаружение деактивируется, и дальнейшие обратные вызовы распознавания не допускаются.
Эту же модель можно запустить снова позднее, и этот процесс можно повторять столько раз, сколько необходимо.
- Для этой модели был вызван метод
Наконец, неактивная модель, которая больше не нужна, выгружается клиентом HAL с помощью
unloadModel()
.
Обработка ошибок HAL
Для обеспечения надёжного и согласованного поведения различных реализаций драйверов в Android 11 любые коды ошибок, возвращаемые HAL, обрабатываются как программные ошибки, для устранения которых требуется перезапуск процесса HAL. Это крайняя мера восстановления, и ожидается, что в исправной системе подобные случаи не произойдут.