unplugged-system/external/oboe/samples/SoundBoard
2025-10-06 13:59:42 +00:00
..
src/main Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
build.gradle Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
proguard-rules.pro Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
README.md Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00
soundboard_image.png Initial commit: AOSP 14 with modifications for Unplugged OS 2025-10-06 13:59:42 +00:00

Soundboard

Do you want to just jam with some digital tunes? Now you can!

This sample demonstrates how to obtain the lowest latency and optimal computational throughput by:

  1. Leaving Oboe to choose the best default stream properties for the current device
  2. Setting performance mode to LowLatency
  3. Setting sharing mode to Exclusive
  4. Setting the buffer size to 2 bursts
  5. Using the -Ofast compiler optimization flag, even when building the Debug variant
  6. Using a StabilizedCallback which aims to spend a fixed percentage of the callback time to avoid CPU frequency scaling (video explanation)

The following article explaining how to debug CPU performance problems may also be useful when looking at this code.

Implementation details

The stream properties are left to Oboe as such the app must output audio data in a format which matches that of the stream.

Four different formats are supported:

Channel count Format
1 - Mono 16-bit int
2 - Stereo 16-bit int
1 - Mono Float
2 - Stereo Float

The signal chain for mono streams is:

SynthSound->Mixer

For stereo chains a mono to stereo converter is added to the end of the chain:

SynthSound->Mixer->MonoToStereo

The compiler optimization flag -Ofast can be found in CMakeLists.txt.

Each SynthSound is a series of 5 Oscillators, creating a pleasant sounding note when combined.

There are 30 notes, corresponding to G3 to C6, moving left to right, top to bottom.

In order to determine whether a note should be played, MusicTileView demonstrates how to keep track of where each finger is.

Images

soundboard_image