Audio para juegos de alto rendimiento con Oboe


Publicado por Dan Galpin

Audio para juegos de alto rendimiento con gráficos Oboe

Hemos agregado la biblioteca de audio Oboe C ++ al SDK de juegos de Android. La compatibilidad de Oboe con audio de alto rendimiento y baja latencia en la más amplia gama de dispositivos Android es la elección correcta para la mayoría de los desarrolladores de juegos.

API única

En los dispositivos Android que ejecutan Android 8.1 (API nivel 27) y superior, Oboe aprovecha el rendimiento y la funcionalidad mejorados de AAudio mientras mantiene la compatibilidad con versiones anteriores (usando OpenSL ES) con Android 4.1 (API nivel 16) y superior. Oboe también agrega características clave más allá de las API de la plataforma para mejorar la experiencia del desarrollador de audio, como remuestreo, conversión de formato y optimización de latencia dinámica. Realiza transformaciones de datos de audio, como conversión de recuento de canales, cuando es necesario para mejorar el rendimiento en dispositivos seleccionados, y tiene soluciones para otros comportamientos específicos del dispositivo que mejoran la solidez del código de audio. En resumen, Oboe es ahora la forma recomendada de escribir código de audio en C / C ++ en Android.

Integración de oboe

Hay dos formas principales de incorporar los ajustes preestablecidos de la biblioteca de Oboe en su proyecto. Si está utilizando la versión 4.1.0 del complemento de Android Gradle o posterior junto con CMake y está usando o puede habilitar STL compartido, habilitar Oboe es tan fácil como agregar Oboe a las dependencias de Gradle, habilitar prefabs y agregar algunas líneas a sus CMakeLists.

También puede integrar Oboe mediante la vinculación estática utilizando el SDK de juegos de Android. Empezar desde descargar la biblioteca y comprobarlo en su sistema de control de fuente. Debe utilizar minSdkVersion de 16 o superior con NDK versión 18 o superior. Luego, para especificar la versión del SDK del juego para vincular que se ha compilado para la combinación de ABI, nivel de API, NDK y STL especificados, agregue una ruta de inclusión del compilador en este módulo:

gamesdk/libs/[architecture]_API[apiLevel]_NDK[ndkVersion]_[stlVersion]_Release
Example: gamesdk/libs/arm64-v8a_API24_NDK18_cpp_static_Release

Luego añade -loboe_static a su comando enlazador. Dado que no es necesario agrupar la biblioteca compartida liboboe.so, la vinculación estática proporciona una huella de código más pequeña. Si la combinación de ABI, nivel de API, NDK y STL no tiene una versión precompilada disponible para su configuración, también puede vincularlo a la biblioteca compartida. Tenemos más orientación, incluido cómo configurar CMake para bibliotecas estáticas, en la nuestra documentación para desarrolladores.

Conceptos básicos del oboe

Para generar el audio, comience por crear una transmisión con las propiedades requeridas, incluida una devolución de llamada que se usa cuando la transmisión solicita nuevos datos.

oboe::AudioStreamBuilder builder;
builder.setPerformanceMode(oboe::PerformanceMode::LowLatency)
  ->setSharingMode(oboe::SharingMode::Exclusive)
  ->setDataCallback(myCallback)
  ->setFormat(oboe::AudioFormat::Float);

Luego, completará los datos de audio dentro de la devolución de llamada. Si el flujo se crea correctamente, significa que ha obtenido el tipo de flujo requerido. Si no especificó estos tipos, deberá consultar para ver qué formato se devolvió.

class MyCallback : public oboe::AudioStreamDataCallback {
public:
    oboe::DataCallbackResult
    onAudioReady(oboe::AudioStream *audioStream, void *audioData, int32_t numFrames) {
        // We requested AudioFormat::Float
        auto *outputData = static_cast<float *>(audioData);
        // TODO: populate audioData here
        return oboe::DataCallbackResult::Continue;
    }
};

Para obtener todos los detalles sobre el uso de Oboe, comprobar la documentación, ejemplos de código es Referencia de API. También hay un laboratorio de código mostrando cómo construir un juego simple basado en el ritmo.

Si tiene algún problema, archívelo Aquí. Nos encantaría saber de ti.



Compruebe también

La actualización de CameraX hace que las cámaras duales simultáneas sean aún más fáciles

Publicado por Donovan McMurray – Ingeniero de relaciones con desarrolladores CámaraXLa biblioteca de cámaras Jetpack …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *