Функция Sound Trigger предоставляет приложениям возможность прослушивать определенные акустические события, например горячие слова, с низким энергопотреблением и с учетом конфиденциальности. Примерами использования Sound Trigger являются «Ассистент» и «Сейчас исполняется».
На этой странице представлен обзор архитектуры Sound Trigger и ее интерфейса HAL (уровень аппаратной абстракции).
Звуковой триггерный стек
Подсистема Sound Trigger построена по слоям, как показано на рисунке 1:
Рисунок 1: Стек звуковых триггеров
В следующем списке более подробно описан каждый уровень, показанный на рисунке 1:
Уровень HAL (зеленый цвет) содержит код конкретного поставщика, который реализует интерфейс Sound Trigger HAL (STHAL).
SoundTriggerMiddleware
(желтым цветом) находится над интерфейсом HAL. Он взаимодействует с HAL и отвечает за такие функции, как совместное использование HAL между различными клиентами, ведение журнала, обеспечение разрешений и обеспечение совместимости со старыми версиями HAL.Система
SoundTriggerService
(синим цветом) находится над промежуточным программным обеспечением. Это облегчает интеграцию с другими функциями системы, такими как события телефонии и батареи. Он также поддерживает базу данных звуковых моделей, индексированную по уникальным идентификаторам.Над слоем
SoundTriggerService
стек (выделен коричневым цветом) отдельно обрабатывает функции, специфичные для Assistant и общих приложений.
Функция стека Sound Trigger заключается в доставке дискретных событий, которые представляют собой акустические события-триггеры. В большинстве случаев стек Sound Trigger не работает со звуком. При получении триггерных событий приложения получают доступ к фактическому аудиопотоку, соответствующему времени событий, путем открытия объекта AudioRecord
через платформу Audio. API-интерфейсы HAL Sound Trigger предоставляют дескриптор инициируемого события, который используется с Audio Framework. Следовательно, поскольку 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. Это стратегия восстановления в крайнем случае, и ожидается, что такие случаи не возникнут в правильно работающей системе.