O Google recentemente liberou a primeira versão de produção do Oboe. O Oboe é uma biblioteca em C++ para construção de apps de áudio de alta performance no Android, fornecendo a menor latência possível em dispositivos Android.
Desenvolvedores que precisam criar jogos musicais, apps de áudio, etc, normalmente tem que lidar com problemas de latência. O Oboe visa resolver problemas de latência fornecendo uma simples API que é compatível com a API 16+ (Jelly Bean). Internamente, o Oboe se beneficia das funcionalidade e performance do AAudio na API 27+ (Oreo MR1) e usa o OpenSL ES na API 16+.
O AAudio é uma Android C API adicionada no Android O, projetada para apps de áudio de alta performance que requerem baixa latência. As apps se comunicam com o AAudio através da leitura e escrita de dados em streams.
O OpenSL ES no Android é uma implementação específica da especificação da API Open SL ES realizado pelo Khronos Group. Assim como o AAudio, essa biblioteca é projetada para apps de áudio de alta performance que requerem baixa latência. Além disso, o OpenSL ES expoem funcionalidades de áudio similares às encontradas nas APIs do MediaPlayer e MediaRecorder.
É necessário o NDK r17 ou superior para usar o Oboe. É possível instalar através do Android Studio SDK manager, ou através de download direto.
Após a instalação do NDK r17 ou superior, clone o repositório do GitHub e adicione os seguintes comandos no fim do arquivo CMakeLists.txt.
cmake_minimum_required(VERSION 3.4.1)
# Build our own native library
add_library (native-lib SHARED src/main/cpp/native-lib.cpp )
# Specify the libraries which our native library is dependent on, including Oboe
target_link_libraries (native-lib log oboe)
# Build the Oboe library
set (OBOE_DIR ../../../oboe)
add_subdirectory (${OBOE_DIR} ./oboe)
# Make the Oboe public headers available to our app
include_directories (${OBOE_DIR}/include)
Os desenvolvedores podem criar um audio stream com apenas algumas linhas de código no Oboe:
AudioStreamBuilder builder;
AudioStream *stream = nullptr;
Result result = builder.openStream(&stream);
Mais detalhes podem ser encontrados nas páginas de documentação, API reference and exemplos de código. Além disso, há também um codelab no qual os desenvolvedores podem construir um simples jogo musical usando o Oboe.