Google釋出開源低延遲音訊C++函式庫Oboe,可用於建構即時音訊應用程式,並且為廣泛的Android裝置,提供盡可能最低延遲的音訊操作功能。

Oboe負責處理應用程式間的音訊資料移動,或是Android裝置上的音訊輸出與輸入,應用程式透過讀取或是寫入串流,來進行資料傳輸,Oboe讀取或是寫入的呼叫,可以選擇是堵塞式(Blocking)或是非堵塞式(Non-blocking)的。

Oboe的串流由三部分組成,分別是音訊裝置(Audio Device)、模式以及音訊格式。每個串流都會連接到一個單一的音訊裝置,音訊裝置可以解釋成硬體介面或是虛擬端點,以作為數位音訊資料連續串流的來源或是接受器。Google提醒,這與裝置上的麥克風或是藍牙耳機的聲音裝置,或是其他手機或手錶等Android裝置不同。

 

每個音訊裝置在Android裝置上都有一個唯一的ID,開發者可以利用這個ID,將音訊串流綁定到特定的音訊裝置上,但多數的情況下,可以讓Oboe選擇預設主裝置,而不需要自行設定。附加到音訊裝置上需要設定輸出還是輸入,串流只能以一個方向移動,因此開發者在定義串流的時候,需設定讓音訊裝置與串流方向一致。

Oboe的音訊串流提供獨占和分享模式。獨占串流會獨占存取音訊裝置上的端點,任何其他的音訊串流都無法使用該端點,也就是說,當端點正被使用時,其他端點是無法獲得其存取權限的。由於獨占串流繞過混音器,因此能達到最低的延遲,開發者應該讓應用程式在不使用時,關閉獨占串流,以便其他應用程式可以存取被占用的端點,但也並非所有音訊裝置都提供獨占端點。使用獨占串流仍然可以聽到其他應用程式或是系統的聲音,因為這些應用使用不同的端點。Oboe允許混合音訊,Oboe會混合所有指定到音訊裝置上相同端點的分享串流。

Oboe音訊串流的格式包含三種屬性,樣本格式、每幀樣本以及採樣率,開發者必須在定義串流時指定這些屬性,Oboe可能會自動執行樣本轉換,而在任何串流方向上都可能發生轉換,當開發者的應用程式處理音訊輸入,明智的作法則要事先驗證格式,以便之後轉換需要。

Oboe除了能在Orea MR1(API 27+)上利用了AAudio效能和功能的改進外,也維持在API 16+的向後相容性。Google表示,Oboe以C++編寫而成,開發者能撰寫較少的程式碼,只需要三行程式碼就能創建音訊串流,但使用OpenSL ES則需要超過50行程式碼。另外,Oboe是以函式庫的方式釋出,因此有獨立更快的更新周期,而非Android平臺的發布周期。


Advertisement

更多 iThome相關內容