Oboe,安卓上的低延遲音訊應用開發庫
谷歌已經ofollow,noindex" target="_blank">釋出 了第一個生產就緒的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/">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開發一個簡單的音樂遊戲;這個遊戲的目標是通過點選螢幕複製聽到的拍手模式。
檢視英文原文:https://www.infoq.com/news/2018/10/android-oboe
感謝冬雨對本文的審校。