谷歌已經發佈了第一個生產就緒的Oboe版本。Oboe是一個C++庫,它用來構建在99%的安卓設備上都有着最低可能延遲的高性能音頻應用。
需要構建音樂類遊戲,音頻應用等的開發者通常不得不處理延遲問題。Oboe的目標是通過提供一個簡單的與安卓API 16+(Jelly Bean)版本兼容的API來解決這些延遲問題。在底層,Oboe利用了API 27+(Oreo MR1)裏AAudio的性能和特性,在API 16+上使用了OpenSL ES。
AAudio是一個安卓上的C語言API,它被設計用來開發要求低延遲的高性能音頻應用。在安卓版本O中引入了它。應用通過讀寫流與AAudio交互。
安卓上的OpenSL ES是Khronos Group的OpenSL ES API規範的一種特定實現。類似AAudio,這個庫也被設計用來開發要求低延遲的高性能音頻應用。另外,OpenSL ES還暴露了一些與MediaPlayer和MediaRecorder API中音頻特性類似的特性。
使用Oboe需要安卓NDK版本r17或以上。它可以通過Android Studio SDK管理器安裝,或者直接安裝。
安裝安卓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開發一個簡單的音樂遊戲;這個遊戲的目標是通過點擊屏幕複製聽到的拍手模式。