並行擷取

Android 10 改善了需要同時進行多項有效音訊擷取作業的使用者體驗,例如使用者想透過輔助服務提供的語音指令控制 VoIP 通話或錄影機時。

音訊架構會實作這項政策,只允許特定特權應用程式與一般應用程式同時擷取。

並行政策的方式是將擷取的音訊靜音,而不是預防 不再使用某個應用程式這可讓架構動態處理有效擷取用例的數量和類型變更,且不會在其他應用程式完成擷取後,阻止應用程式恢復對麥克風的完整存取權。

音訊 HAL 和音訊子系統的後果是,它們必須同時支援多個有效輸入串流,即使在某些情況下,只有一個串流為有效用戶端提供非靜音音訊。

CDD 規定

如要瞭解同時拍攝功能的支援需求,請參閱 CDD

擷取音訊 HAL 的情況

並行擷取情境可能會導致使用中的數量不同 輸入串流、輸入裝置選取或預先處理設定

下列方式可進行並行:

  • 來自應用程式處理器 (AP) 的多個輸入串流
  • 輸入串流和語音通話
  • 輸入串流和音訊 DSP 實作低功耗啟動字詞偵測

AP 輸入串流的並行活動

音訊架構會使用音訊政策設定檔 audio_policy_configuration.xml,判斷可同時開啟及啟用多少個輸入串流。

音訊 HAL 必須至少支援每個輸入的一個例項 個人資料 (mixPort角色 sink),登錄於開啟的 和使用中的設定檔

裝置選擇

當多個有效的用戶端連結至同一個 HAL 輸入串流時,架構會根據用途優先順序,為此輸入串流選取適當的裝置。

當有多個輸入串流處於活動狀態時,每個串流可以有不同的裝置選項。

如果這項技術相容,建議您選用音訊 HAL 子系統可讓不同的串流從不同裝置擷取,例如藍牙耳機 內建麥克風

如果不相容 (例如兩部裝置共用相同的數位音訊介面或後端),音訊 HAL 就必須選擇要控制裝置選項的串流。

在這種情況下:

  • 結果狀態必須一致,並提供相同的裝置選項,但也相同 情況重複。
  • 並行作業狀態結束後,剩餘的有效串流必須轉送至此串流上最初要求的裝置。

如果音訊 HAL 在有效用途之間定義了優先順序,請按照 frameworks/av/services/audiopolicy/common/include/policy.h 中的 source_priority() 所示順序進行操作。

預先處理選取項目

音訊架構可使用 addEffect()removeEffect() HAL 方法,要求對輸入串流進行預處理。

如果是特定輸入串流的預先處理,音訊架構僅會啟用 與 輸入串流不過,在啟用和停用用途的過程中,可能會出現重疊,導致兩個同時處於活動狀態的程序 (例如兩個回音消除器例項) 在同一個輸入串流上執行。在這個例子中,HAL 實作會選擇 ;它會追蹤執行中的要求,並恢復正確的狀態 程序已停用。

當多個擷取串流同時啟用時,不同的串流可能會執行不同的預處理要求。

HAL 和音訊子系統實作應允許將不同的預處理作業套用至不同的串流,即使這些串流共用相同的輸入裝置也一樣。也就是說,應在從主要擷取來源解析串流後,再套用預先處理程序。

如果音訊子系統因技術原因而無法運作,則音訊 HAL 應適用 選取裝置

同時透過 AP 接聽來電及進行語音通話

在進行語音通話時,AP 可能會擷取內容。這種情況在 Android 10 中並非新現象,也不直接與並行擷取功能相關,但針對這種情況提供規範仍很有幫助。

在通話期間,需要從 AP 擷取兩種不同類型的內容。

擷取通話 RX 和 TX

使用音訊來源會觸發通話 RX 和 TX 擷取作業 AudioSource.VOICE_UPLINK AudioSource.VOICE_DOWNLINK,和/或裝置 AudioDevice.IN_TELEPHONY_RX

音訊 HAL 應透過裝置 AudioDevice.IN_TELEPHONY_RX 提供可用的路徑,在輸入設定檔 (sink 角色的 mixPort) 上公開。

可連線至通話時 (音訊模式為 AudioMode.IN_CALL), 「AudioDevice.IN_TELEPHONY_RX」裝置上至少有一個有效的擷取串流。

在通話進行時從輸入裝置擷取內容

通話處於活動狀態 (音訊模式為 AudioMode.IN_CALL) 時,應可依照「AP 輸入串流的並行活動」一節所述,開啟及啟用 AP 的輸入串流。

不過,如果裝置選取和預先處理的優先順序與 AP 輸入串流的請求發生衝突,則應一律以語音通話為準。

從 DSP 和 AP 同時擷取

如果音訊子系統包含支援低功耗音訊內容或熱字詞偵測功能的 DSP,實作方式應支援同時擷取 AP 和音訊 DSP 的內容。這包括 DSP 在初始偵測階段擷取的內容,以及 DSP 觸發偵測後,AP 使用 AudioSource.HOTWORD 擷取的內容。

這個情況應該由聲音觸發事件 HAL 回報的並行擷取旗標透過 實作描述元:ISoundTriggerHw.Properties.concurrentCapture = true

音訊 HAL 也應公開並輸入專屬於熱字詞擷取的設定檔,並由標記 AudioInputFlag.HW_HOTWORD 識別。實作應支援開幕和 在此設定檔中啟用多個串流,至少要等於 可以透過音效觸發條件 HAL 並行載入

在已啟用其他輸入設定檔的情況下,系統才能從這個輸入設定檔擷取內容。

對 Google 助理實作的影響

資料使用情形和使用者通知的相關規定

由於同時使用麥克風和濫用情況,可能導致使用者私人資料外洩,因此我們須符合下列條件 條件及保證,這些權限適用於要求 「Google 助理」角色。

  • 除非使用者與 Google 助理互動,否則透過麥克風收集的資料不應離開裝置。例如觸發啟動字詞後。
  • 同時進行收聽的應用程式應在偵測到熱字詞後,向使用者提供視覺提示。這有助於使用者瞭解,後續對話是透過不同的 例如 Google 助理
  • 使用者應能關閉麥克風或 Google 助理觸發條件。
  • 儲存音訊錄音後,使用者應有權存取、查看和 隨時刪除錄音檔

Android 10 的功能改善

Google 助理不會封鎖彼此

在 Android 9 以下版本中,如果裝置上有兩個一律開啟的 Google 助理,則只有其中一個可以聆聽熱字詞。因此,我們需要在 這兩個助理。在 Android 10 中,預設的 Google 助理可以與其他 Google 助理同時聆聽。這樣一來,使用者就能在兩個助理之間切換,享有更流暢的體驗。

麥克風已開啟的應用程式

當 Shazam 或 Waze 等應用程式保持麥克風開啟時,預設的 Google 助理仍可聽取你的語音指令 。

對於非預設的 Google 助理應用程式,Android 10 的行為並未有所變更。

音訊 HAL 實作範例

如要查看符合本文件規範的音訊 HAL 實作範例,請前往 Android 開放原始碼計畫