Posted by Dan Galpin

High Performance Game Audio with Oboe graphic

We’ve included the Oboe C++ sound collection to the
Android Game SDK. Oboe’s assistance of high-performance, low-latency sound throughout the largest series of Android tools is the appropriate selection for the majority of video game designers.

Single API

On Android tools running Android 8.1 (API degree 27) as well as greater, Oboe benefits from the enhanced efficiency as well as functions of AAudio while keeping in reverse compatibility (making use of OpenSL ES) with Android 4.1 (API degree 16) as well as greater. Oboe likewise includes crucial functions in addition to the system APIs to boost the audio programmer experience, such as resampling, style conversion, as well as vibrant latency adjusting. It executes audio information improvements, such as network matter conversion, when required to boost efficiency on picked tools, as well as has workarounds for various other device-specific actions that boost the effectiveness of your sound code. In short, Oboe is currently the suggested means to create audio code in C/C++ on Android.

Integrating Oboe

There are 2 main means to include Oboe collection prebuilts right into your job. If you’re making use of the Android Gradle plugin variation 4.1.0 or greater together with CMake, as well as are making use of or can allow common STL, allowing Oboe is as very easy as including Oboe to your Gradle dependences, allowing prefabs, as well as including a couple of lines to your CMakeLists documents.

You can likewise incorporate Oboe by statically connecting making use of the Android Game SDK. Begin by downloading and install the collection as well as inspecting it right into your resource control system. You require to be making use of minSdkVersion of 16 or greater with NDK launch 18 or greater. Then, to define the variation of the video game SDK to web link because’s been assembled for the offered ABI, API degree, NDK, as well as STL mix, include a compiler consist of course in this kind:

Example: gamesdk/libs/arm64-v8a_API24_NDK18_cpp_static_Release

Then include -loboe_static to your linker command. Since you do not require to pack the liboboe.so shared collection, fixed connecting provides you a smaller sized code impact. If the ABI, API degree, NDK, as well as STL mix does not have a precompiled variation readily available for your setups, you can at the same time connect versus the common collection. We have extra assistance, consisting of exactly how to set up CMake for fixed collections, in our programmer paperwork.

Oboe Basics

To outcome sound, you start by developing a stream with the called for homes, consisting of a callback that is made use of when the stream calls for brand-new information.

oboe:: AudioStreamBuilder home builder;
builder.setPerformanceSetting(oboe:: PerformanceSetting::LowLatency)
  ->setSharingMode(oboe::SharingMode:: Exclusive)
  ->collectionForfloor covering(oboe:: AudioForfloor covering:: Float);

You’ll after that occupy the audio information within the callback. If the stream produces effectively, that indicates you obtained the asked for stream kind. If you really did not define these kinds, you’ll need to quiz to see what style was returned.

course MyCallback : public oboe:: AudioStreamDataCallback {
    onAudioPrepared(oboe:: AudioStream *audioStream, space *audioData, int32_t numFrames) {
        // We asked for AudioForfloor covering:: Float
        car *outputData = static_cast<float *>(audioData);
        // TODO: occupy audioData below
        return oboe::DataCallbackResult:: Continue;

For complete information on making use of Oboe, take a look at the paperwork, code examples as well as API referral. There’s also a codelab which reveals you exactly how to develop a straightforward rhythm-based video game.

If you have any type of problems, please submit them below. We’d like to learn through you.