聲響觸發事件功能可讓應用程式以低耗電量且重視隱私權的方式,監聽特定聲響事件 (例如熱字詞)。聲控觸發功能的用途包括 Google 助理和現在播放。
本頁面將概略介紹 Sound Trigger 架構及其 HAL (硬體抽象層) 介面。
音訊觸發事件堆疊
如圖 1 所示,Sound Trigger 子系統是分層建構的:
圖 1:聲音觸發事件堆疊
下列清單詳細說明圖 1 中顯示的各個圖層:
HAL 層 (以綠色表示) 包含供應商專屬程式碼,可實作 Sound Trigger HAL (STHAL) 介面。
SoundTriggerMiddleware
(以黃色顯示) 位於 HAL 介面上方。它會與 HAL 進行通訊,並負責執行各種功能,例如在不同用戶端之間共用 HAL、記錄、強制執行權限,以及處理與舊版 HAL 的相容性。SoundTriggerService
(以藍色標示) 系統位於中介軟體之上。這有助於整合其他系統功能,例如通訊和電池事件。它也會維護音效模型資料庫,並以獨特 ID 建立索引。在
SoundTriggerService
層之上,堆疊 (以棕色表示) 會分別處理 Google 助理和一般應用程式的特定功能。
聲響觸發事件堆疊的功能是提供代表聲響觸發事件的個別事件。在大多數情況下,音訊觸發堆疊不會處理音訊。收到觸發事件後,應用程式會透過 Audio 架構開啟 AudioRecord
物件,取得事件發生前後的實際音訊串流。Sound Trigger HAL API 會提供一個句柄,其中包含與音訊架構搭配使用的觸發事件。因此,由於 Sound Trigger HAL 和 Audio HAL 在幕後連結,因此通常會共用一個程序。
聲響觸發器 HAL 介面
音訊觸發器 HAL (STHAL) 介面是音訊觸發器堆疊的供應商專屬部分,可處理硬體對熱鍵和其他音訊的辨識。STHAL 提供一或多個引擎,每個引擎都會執行不同的演算法,用於偵測特定類型的聲音。當 STHAL 偵測到觸發事件時,會將事件傳送至架構,然後停止偵測。
在 /hardware/interfaces/soundtrigger/
下方指定 STHAL 介面。
ISoundTriggerHw
介面支援在特定時間執行一或多個偵測工作階段,並監聽聲響事件。對 ISoundTriggerHw.getProperties()
的呼叫會傳回 Properties
結構,其中包含實作說明和功能。
圖 2 說明設定工作階段的基本流程:
圖 2:STHAL 狀態圖
以下步驟將詳細說明各個狀態:
HAL 用戶端會使用
loadSoundModel()
或loadPhraseSoundModel()
載入模型。提供的模型物件會指出要使用的特定實作檢測演算法 (引擎),以及適用於此演算法的參數。成功後,這些方法會傳回一個句柄,用於在後續呼叫中參照此模型。模型成功載入後,HAL 用戶端會呼叫
startRecognition()
開始偵測。系統會在背景持續執行辨識作業,直到發生下列任一事件為止:- 此模型已呼叫
stopRecognition()
。 - 系統偵測到問題。
- 系統會因資源限制而中止偵測,例如在已啟動優先順序較高的用途時。
在後兩種情況中,系統會透過回呼介面傳送辨識事件,該介面是在載入時由 HAL 用戶端註冊。無論發生何種事件,偵測功能都會變為非活動狀態,且不再允許辨識回呼。
同一個模型可在稍後重新啟動,且可視需要重複這項程序多次。
- 此模型已呼叫
最後,HAL 用戶端會透過
unloadModel()
卸載不再需要的非活動模型。
處理 HAL 錯誤
為確保驅動程式實作之間的行為可靠且一致,在 Android 11 中,從 HAL 傳回的任何非成功錯誤代碼都會視為程式設計錯誤,需要重新啟動 HAL 程序才能復原。這是最後的復原策略,正常運作的系統不會發生這種情況。