Kích hoạt âm thanh

Tính năng Sound Trigger cung cấp cho ứng dụng khả năng nghe các sự kiện âm thanh nhất định, chẳng hạn như từ nóng, theo cách tiết kiệm năng lượng và nhạy cảm với quyền riêng tư. Các trường hợp sử dụng ví dụ của Trình kích hoạt âm thanh là Trợ lý và Đang phát.

Trang này cung cấp thông tin tổng quan về kiến ​​trúc Sound Trigger và giao diện HAL (Lớp trừu tượng phần cứng) của nó.

Ngăn xếp kích hoạt âm thanh

Hệ thống con Sound Trigger được xây dựng theo các lớp như trong Hình 1:

sound_trigger_stack

Hình 1: Ngăn xếp kích hoạt âm thanh

Danh sách sau đây mô tả chi tiết hơn từng lớp được hiển thị trong Hình 1:

  • Lớp HAL (màu xanh lá cây) chứa mã dành riêng cho nhà cung cấp triển khai giao diện Sound Trigger HAL (STHAL).

  • SoundTriggerMiddleware (màu vàng) nằm phía trên giao diện HAL. Nó giao tiếp với HAL và chịu trách nhiệm về các chức năng như chia sẻ HAL giữa các máy khách khác nhau, ghi nhật ký, thực thi quyền và xử lý khả năng tương thích với các phiên bản HAL cũ hơn.

  • Hệ thống SoundTriggerService (màu xanh lam) nằm phía trên phần mềm trung gian. Nó tạo điều kiện tích hợp với các tính năng khác của hệ thống, chẳng hạn như các sự kiện về điện thoại và pin. Nó cũng duy trì một cơ sở dữ liệu về các mẫu âm thanh, được lập chỉ mục theo các ID duy nhất.

  • Phía trên lớp SoundTriggerService , ngăn xếp (màu nâu) xử lý riêng các tính năng dành riêng cho Trợ lý và ứng dụng chung.

Chức năng của ngăn xếp Trình kích hoạt âm thanh là cung cấp các sự kiện riêng biệt đại diện cho các sự kiện kích hoạt, âm thanh. Trong hầu hết các trường hợp, ngăn xếp Sound Trigger không xử lý được âm thanh. Sau khi nhận được sự kiện kích hoạt, ứng dụng sẽ có quyền truy cập vào luồng âm thanh thực tế xung quanh thời gian diễn ra sự kiện bằng cách mở đối tượng AudioRecord thông qua khung Âm thanh. API HAL của Trình kích hoạt âm thanh cung cấp khả năng xử lý sự kiện được kích hoạt được sử dụng với Khung âm thanh. Do đó, vì Sound Trigger HAL và Audio HAL được kết nối bên trong nên chúng thường chia sẻ một quy trình.

Giao diện HAL kích hoạt âm thanh

Giao diện Sound Trigger HAL (STHAL) là một phần dành riêng cho nhà cung cấp trong ngăn xếp Sound Trigger và nó xử lý nhận dạng phần cứng của các từ nóng và các âm thanh khác. STHAL cung cấp một hoặc nhiều công cụ, mỗi công cụ chạy một thuật toán khác nhau được thiết kế để phát hiện một loại âm thanh cụ thể. Khi STHAL phát hiện trình kích hoạt, nó sẽ gửi một sự kiện đến khung và sau đó dừng phát hiện.

Giao diện STHAL được chỉ định trong /hardware/interfaces/soundtrigger/ .

Giao diện ISoundTriggerHw hỗ trợ khả năng chạy một hoặc nhiều phiên phát hiện tại một thời điểm nhất định và nghe các sự kiện âm thanh. Lệnh gọi tới ISoundTriggerHw.getProperties() trả về cấu trúc Properties chứa mô tả và khả năng triển khai.

Luồng cơ bản của việc thiết lập một phiên được giải thích như sau trong Hình 2:

sthal_state

Hình 2: Sơ đồ trạng thái STHAL

Các bước sau đây mô tả từng trạng thái chi tiết hơn:

  1. Máy khách HAL tải mô hình bằng cách sử dụng loadSoundModel() hoặc loadPhraseSoundModel() . Đối tượng mô hình được cung cấp cho biết thuật toán (công cụ) phát hiện cụ thể nào sẽ sử dụng, cũng như các tham số có thể áp dụng cho thuật toán này. Sau khi thành công, các phương thức này trả về một điều khiển được sử dụng để tham chiếu mô hình này trong các lệnh gọi tiếp theo.

  2. Khi mô hình đã được tải thành công, máy khách HAL gọi startRecognition() để bắt đầu phát hiện. Tính năng nhận dạng tiếp tục chạy ở chế độ nền cho đến khi xảy ra một trong các sự kiện sau:

    1. stopRecognition() đã được gọi trên mô hình này.
    2. Một phát hiện đã xảy ra.
    3. Việc phát hiện bị hủy bỏ do hạn chế về tài nguyên, chẳng hạn như khi trường hợp sử dụng có mức ưu tiên cao hơn được bắt đầu.

    Trong hai trường hợp sau, một sự kiện nhận dạng sẽ được gửi qua giao diện gọi lại được máy khách HAL đăng ký khi tải. Trong mọi trường hợp, sau khi bất kỳ sự kiện nào trong số này xảy ra, tính năng phát hiện sẽ không hoạt động và không cho phép gọi lại nhận dạng nữa.

    Mô hình tương tự có thể được bắt đầu lại sau đó và quá trình này có thể được lặp lại nhiều lần nếu cần.

  3. Cuối cùng, một mô hình không hoạt động không còn cần thiết sẽ được máy khách HAL dỡ bỏ thông qua unloadModel() .

Xử lý lỗi HAL

Để đảm bảo hoạt động nhất quán và đáng tin cậy giữa các lần triển khai trình điều khiển, trong Android 11, mọi mã lỗi không thành công được trả về từ HAL đều được coi là lỗi lập trình và việc khôi phục sẽ yêu cầu khởi động lại quy trình HAL. Đây là chiến lược phục hồi cuối cùng và kỳ vọng là những trường hợp như vậy sẽ không xảy ra trong một hệ thống hoạt động bình thường.