1. 程式人生 > >Oboe,安卓上的低延遲音訊應用開發庫

Oboe,安卓上的低延遲音訊應用開發庫

谷歌已經釋出了第一個生產就緒的Oboe版本。Oboe是一個C++庫,它用來構建在99%的安卓裝置上都有著最低可能延遲的高效能音訊應用。

需要構建音樂類遊戲,音訊應用等的開發者通常不得不處理延遲問題。Oboe的目標是通過提供一個簡單的與安卓API 16+(Jelly Bean)版本相容的API來解決這些延遲問題。在底層,Oboe利用了API 27+(Oreo MR1)裡AAudio的效能和特性,在API 16+上使用了OpenSL ES

Oboe,安卓上的低延遲音訊應用開發庫

AAudio是一個安卓上的C語言API,它被設計用來開發要求低延遲的高效能音訊應用。在安卓版本O中引入了它。應用通過讀寫流與AAudio互動。

安卓上的OpenSL ES是

Khronos Group的OpenSL ES API規範的一種特定實現。類似AAudio,這個庫也被設計用來開發要求低延遲的高效能音訊應用。另外,OpenSL ES還暴露了一些與MediaPlayerMediaRecorder API中音訊特性類似的特性。

安裝安卓NDK版本r17或以上以後,克隆GitHub倉庫,新增如下命令到CMakeLists.txt檔案的末尾(如果你沒有這個檔案,那麼應該為專案新增C++支援)。

cmake_minimum_required(VERSION 3.4.1)

# 構建我們的本地庫
add_library (native-lib SHARED src/
main/cpp/native-lib.cpp ) # 指定我們的本地庫依賴的庫,包含Oboe target_link_libraries (native-lib log oboe) # 構建Oboe庫 set (OBOE_DIR ../../../oboe) add_subdirectory (${OBOE_DIR} ./oboe) # 讓Oboe公有標頭檔案對我們的應用可見 include_directories (${OBOE_DIR}/include)

開發者可以用Oboe的以下幾行程式碼建立一個音訊流:

AudioStreamBuilder builder;
AudioStream *stream = nullptr; Result result = builder.openStream(&stream);

可以在文件API指南程式碼樣例上找到更多細節。此外,你可以在codelab上使用Oboe開發一個簡單的音樂遊戲;這個遊戲的目標是通過點選螢幕複製聽到的拍手模式。

檢視英文原文https://www.infoq.com/news/2018/10/android-oboe