The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .github
    ├── ISSUE_TEMPLATE
    │   └── bug_report.md
    ├── dependabot.yml
    └── workflows
    │   ├── build-ci.yml
    │   └── update-docs.yml
├── .gitignore
├── AUTHORS
├── CMakeLists.txt
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── Doxyfile
├── LICENSE
├── MODULE_LICENSE_APACHE2
├── README.md
├── apps
    ├── OboeTester
    │   ├── .gitignore
    │   ├── .google
    │   │   └── packaging.yaml
    │   ├── README.md
    │   ├── app
    │   │   ├── CMakeLists.txt
    │   │   ├── build.gradle
    │   │   ├── gradle
    │   │   │   └── wrapper
    │   │   │   │   ├── gradle-wrapper.jar
    │   │   │   │   └── gradle-wrapper.properties
    │   │   ├── gradlew
    │   │   ├── gradlew.bat
    │   │   ├── proguard-rules.pro
    │   │   └── src
    │   │   │   └── main
    │   │   │       ├── AndroidManifest.xml
    │   │   │       ├── cpp
    │   │   │           ├── AudioStreamGateway.cpp
    │   │   │           ├── AudioStreamGateway.h
    │   │   │           ├── FormatConverterBox.cpp
    │   │   │           ├── FormatConverterBox.h
    │   │   │           ├── FullDuplexAnalyzer.cpp
    │   │   │           ├── FullDuplexAnalyzer.h
    │   │   │           ├── FullDuplexEcho.cpp
    │   │   │           ├── FullDuplexEcho.h
    │   │   │           ├── FullDuplexStreamWithConversion.cpp
    │   │   │           ├── FullDuplexStreamWithConversion.h
    │   │   │           ├── InputStreamCallbackAnalyzer.cpp
    │   │   │           ├── InputStreamCallbackAnalyzer.h
    │   │   │           ├── InterpolatingDelayLine.cpp
    │   │   │           ├── InterpolatingDelayLine.h
    │   │   │           ├── MultiChannelRecording.h
    │   │   │           ├── NativeAudioContext.cpp
    │   │   │           ├── NativeAudioContext.h
    │   │   │           ├── OboeStreamCallbackProxy.cpp
    │   │   │           ├── OboeStreamCallbackProxy.h
    │   │   │           ├── OboeTesterStreamCallback.cpp
    │   │   │           ├── OboeTesterStreamCallback.h
    │   │   │           ├── OboeTools.h
    │   │   │           ├── PlayRecordingCallback.cpp
    │   │   │           ├── PlayRecordingCallback.h
    │   │   │           ├── SawPingGenerator.cpp
    │   │   │           ├── SawPingGenerator.h
    │   │   │           ├── SinkMemoryDirect.cpp
    │   │   │           ├── SinkMemoryDirect.h
    │   │   │           ├── TestColdStartLatency.cpp
    │   │   │           ├── TestColdStartLatency.h
    │   │   │           ├── TestErrorCallback.cpp
    │   │   │           ├── TestErrorCallback.h
    │   │   │           ├── TestRapidCycle.cpp
    │   │   │           ├── TestRapidCycle.h
    │   │   │           ├── TestRoutingCrash.cpp
    │   │   │           ├── TestRoutingCrash.h
    │   │   │           ├── analyzer
    │   │   │           │   ├── BaseSineAnalyzer.h
    │   │   │           │   ├── DataPathAnalyzer.h
    │   │   │           │   ├── GlitchAnalyzer.h
    │   │   │           │   ├── InfiniteRecording.h
    │   │   │           │   ├── LatencyAnalyzer.h
    │   │   │           │   ├── ManchesterEncoder.h
    │   │   │           │   ├── PeakDetector.h
    │   │   │           │   ├── PseudoRandom.h
    │   │   │           │   ├── RandomPulseGenerator.h
    │   │   │           │   └── RoundedManchesterEncoder.h
    │   │   │           ├── android_debug.h
    │   │   │           ├── cpu
    │   │   │           │   ├── AudioWorkloadTest.h
    │   │   │           │   ├── AudioWorkloadTestRunner.h
    │   │   │           │   └── SynthWorkload.h
    │   │   │           ├── flowunits
    │   │   │           │   ├── ExponentialShape.cpp
    │   │   │           │   ├── ExponentialShape.h
    │   │   │           │   ├── ImpulseOscillator.cpp
    │   │   │           │   ├── ImpulseOscillator.h
    │   │   │           │   ├── LinearShape.cpp
    │   │   │           │   ├── LinearShape.h
    │   │   │           │   ├── OscillatorBase.cpp
    │   │   │           │   ├── OscillatorBase.h
    │   │   │           │   ├── SawtoothOscillator.cpp
    │   │   │           │   ├── SawtoothOscillator.h
    │   │   │           │   ├── SineOscillator.cpp
    │   │   │           │   ├── SineOscillator.h
    │   │   │           │   ├── TriangleOscillator.cpp
    │   │   │           │   ├── TriangleOscillator.h
    │   │   │           │   ├── WhiteNoise.cpp
    │   │   │           │   └── WhiteNoise.h
    │   │   │           ├── jni-bridge.cpp
    │   │   │           ├── synth
    │   │   │           │   ├── BiquadFilter.h
    │   │   │           │   ├── DifferentiatedParabola.h
    │   │   │           │   ├── EnvelopeADSR.h
    │   │   │           │   ├── IncludeMeOnce.h
    │   │   │           │   ├── LookupTable.h
    │   │   │           │   ├── PitchToFrequency.h
    │   │   │           │   ├── SawtoothOscillator.h
    │   │   │           │   ├── SawtoothOscillatorDPW.h
    │   │   │           │   ├── SimpleVoice.h
    │   │   │           │   ├── SineOscillator.h
    │   │   │           │   ├── SquareOscillatorDPW.h
    │   │   │           │   ├── SynthTools.h
    │   │   │           │   ├── Synthesizer.h
    │   │   │           │   ├── UnitGenerator.h
    │   │   │           │   └── VoiceBase.h
    │   │   │           ├── unused
    │   │   │           │   └── unused.h
    │   │   │           └── util
    │   │   │           │   ├── WaveFileWriter.cpp
    │   │   │           │   └── WaveFileWriter.h
    │   │   │       ├── ic_launcher-playstore.png
    │   │   │       ├── java
    │   │   │           └── com
    │   │   │           │   └── mobileer
    │   │   │           │       ├── audio_device
    │   │   │           │           ├── AudioDeviceAdapter.java
    │   │   │           │           ├── AudioDeviceInfoConverter.java
    │   │   │           │           ├── AudioDeviceListEntry.java
    │   │   │           │           ├── AudioDeviceSpinner.java
    │   │   │           │           └── CommunicationDeviceSpinner.java
    │   │   │           │       ├── miditools
    │   │   │           │           ├── EventScheduler.java
    │   │   │           │           ├── MidiConstants.java
    │   │   │           │           ├── MidiDeviceMonitor.java
    │   │   │           │           ├── MidiDispatcher.java
    │   │   │           │           ├── MidiEventScheduler.java
    │   │   │           │           ├── MidiEventThread.java
    │   │   │           │           ├── MidiFramer.java
    │   │   │           │           ├── MidiInputPortSelector.java
    │   │   │           │           ├── MidiOutputPortConnectionSelector.java
    │   │   │           │           ├── MidiOutputPortSelector.java
    │   │   │           │           ├── MidiPortConnector.java
    │   │   │           │           ├── MidiPortSelector.java
    │   │   │           │           ├── MidiPortWrapper.java
    │   │   │           │           ├── MidiTools.java
    │   │   │           │           ├── MusicKeyboardView.java
    │   │   │           │           └── synth
    │   │   │           │           │   ├── AudioLatencyTuner.java
    │   │   │           │           │   ├── EnvelopeADSR.java
    │   │   │           │           │   ├── LatencyController.java
    │   │   │           │           │   ├── SawOscillator.java
    │   │   │           │           │   ├── SawOscillatorDPW.java
    │   │   │           │           │   ├── SawVoice.java
    │   │   │           │           │   ├── SimpleAudioOutput.java
    │   │   │           │           │   ├── SineOscillator.java
    │   │   │           │           │   ├── SineVoice.java
    │   │   │           │           │   ├── SynthEngine.java
    │   │   │           │           │   ├── SynthUnit.java
    │   │   │           │           │   └── SynthVoice.java
    │   │   │           │       └── oboetester
    │   │   │           │           ├── AnalyzerActivity.java
    │   │   │           │           ├── AudioForegroundService.java
    │   │   │           │           ├── AudioInputTester.java
    │   │   │           │           ├── AudioOutputTester.java
    │   │   │           │           ├── AudioQueryTools.java
    │   │   │           │           ├── AudioRecordThread.java
    │   │   │           │           ├── AudioStreamBase.java
    │   │   │           │           ├── AudioStreamTester.java
    │   │   │           │           ├── AudioWorkloadTestActivity.java
    │   │   │           │           ├── AudioWorkloadTestRunnerActivity.java
    │   │   │           │           ├── AutomatedGlitchActivity.java
    │   │   │           │           ├── AutomatedTestRunner.java
    │   │   │           │           ├── BaseAutoGlitchActivity.java
    │   │   │           │           ├── BaseOboeTesterActivity.java
    │   │   │           │           ├── BufferSizeView.java
    │   │   │           │           ├── CachedTextViewLog.java
    │   │   │           │           ├── CircularCaptureBuffer.java
    │   │   │           │           ├── CommunicationDeviceView.java
    │   │   │           │           ├── DeviceReportActivity.java
    │   │   │           │           ├── DoubleStatistics.java
    │   │   │           │           ├── DynamicWorkloadActivity.java
    │   │   │           │           ├── EchoActivity.java
    │   │   │           │           ├── ExponentialSliderView.java
    │   │   │           │           ├── ExponentialTaper.java
    │   │   │           │           ├── ExternalFileWriter.java
    │   │   │           │           ├── ExternalTapToToneActivity.java
    │   │   │           │           ├── ExtraTestsActivity.java
    │   │   │           │           ├── FastButton.java
    │   │   │           │           ├── GlitchActivity.java
    │   │   │           │           ├── InputMarginView.java
    │   │   │           │           ├── IntentBasedTestSupport.java
    │   │   │           │           ├── MainActivity.java
    │   │   │           │           ├── ManualGlitchActivity.java
    │   │   │           │           ├── MicrophoneInfoConverter.java
    │   │   │           │           ├── MidiTapTester.java
    │   │   │           │           ├── MultiLineChart.java
    │   │   │           │           ├── NativeEngine.java
    │   │   │           │           ├── NativeSniffer.java
    │   │   │           │           ├── OboeAudioInputStream.java
    │   │   │           │           ├── OboeAudioOutputStream.java
    │   │   │           │           ├── OboeAudioStream.java
    │   │   │           │           ├── RecorderActivity.java
    │   │   │           │           ├── RoundTripLatencyActivity.java
    │   │   │           │           ├── StreamConfiguration.java
    │   │   │           │           ├── StreamConfigurationView.java
    │   │   │           │           ├── TapLatencyAnalyser.java
    │   │   │           │           ├── TapToToneActivity.java
    │   │   │           │           ├── TapToToneTester.java
    │   │   │           │           ├── TestAudioActivity.java
    │   │   │           │           ├── TestColdStartLatencyActivity.java
    │   │   │           │           ├── TestDataPathsActivity.java
    │   │   │           │           ├── TestDisconnectActivity.java
    │   │   │           │           ├── TestErrorCallbackActivity.java
    │   │   │           │           ├── TestInputActivity.java
    │   │   │           │           ├── TestOutputActivity.java
    │   │   │           │           ├── TestOutputActivityBase.java
    │   │   │           │           ├── TestPlugLatencyActivity.java
    │   │   │           │           ├── TestRapidCycleActivity.java
    │   │   │           │           ├── TestRouteDuringCallbackActivity.java
    │   │   │           │           ├── VolumeBarView.java
    │   │   │           │           ├── WaveformView.java
    │   │   │           │           └── WorkloadView.java
    │   │   │       └── res
    │   │   │           ├── drawable
    │   │   │               ├── button_shape.xml
    │   │   │               ├── ic_launcher_background.xml
    │   │   │               ├── ic_launcher_foreground.xml
    │   │   │               └── ic_notification.xml
    │   │   │           ├── layout
    │   │   │               ├── activity_audio_workload_test.xml
    │   │   │               ├── activity_audio_workload_test_runner.xml
    │   │   │               ├── activity_auto_glitches.xml
    │   │   │               ├── activity_cold_start_latency.xml
    │   │   │               ├── activity_data_paths.xml
    │   │   │               ├── activity_device_report.xml
    │   │   │               ├── activity_dynamic_workload.xml
    │   │   │               ├── activity_echo.xml
    │   │   │               ├── activity_error_callback.xml
    │   │   │               ├── activity_external_tap_to_tone.xml
    │   │   │               ├── activity_extra_tests.xml
    │   │   │               ├── activity_main.xml
    │   │   │               ├── activity_manual_glitches.xml
    │   │   │               ├── activity_rapid_cycle.xml
    │   │   │               ├── activity_recorder.xml
    │   │   │               ├── activity_routing_crash.xml
    │   │   │               ├── activity_rt_latency.xml
    │   │   │               ├── activity_tap_to_tone.xml
    │   │   │               ├── activity_test_disconnect.xml
    │   │   │               ├── activity_test_input.xml
    │   │   │               ├── activity_test_output.xml
    │   │   │               ├── activity_test_plug_latency.xml
    │   │   │               ├── audio_devices.xml
    │   │   │               ├── auto_test_runner.xml
    │   │   │               ├── buffer_size_view.xml
    │   │   │               ├── comm_device_view.xml
    │   │   │               ├── exponential_slider_view.xml
    │   │   │               ├── input_margin_view.xml
    │   │   │               ├── merge_audio_common.xml
    │   │   │               ├── merge_audio_simple.xml
    │   │   │               ├── sample_fast_button.xml
    │   │   │               ├── sample_multi_line_chart.xml
    │   │   │               ├── stream_config.xml
    │   │   │               └── workload_view.xml
    │   │   │           ├── menu
    │   │   │               └── menu_main.xml
    │   │   │           ├── mipmap-anydpi-v26
    │   │   │               ├── ic_launcher.xml
    │   │   │               └── ic_launcher_round.xml
    │   │   │           ├── mipmap-hdpi
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-mdpi
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xhdpi
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xxhdpi
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── mipmap-xxxhdpi
    │   │   │               ├── ic_launcher.png
    │   │   │               └── ic_launcher_round.png
    │   │   │           ├── raw
    │   │   │               └── sine441stereo.mp3
    │   │   │           ├── values-w600dp
    │   │   │               └── dimens.xml
    │   │   │           ├── values
    │   │   │               ├── arrays.xml
    │   │   │               ├── attrs_exponential_slider.xml
    │   │   │               ├── attrs_fast_button.xml
    │   │   │               ├── attrs_multi_line_chart.xml
    │   │   │               ├── attrs_waveform.xml
    │   │   │               ├── colors.xml
    │   │   │               ├── dimens.xml
    │   │   │               ├── strings.xml
    │   │   │               └── styles.xml
    │   │   │           └── xml
    │   │   │               ├── button_color_selector.xml
    │   │   │               ├── provider_paths.xml
    │   │   │               └── service_device_info.xml
    │   ├── build.gradle
    │   ├── docs
    │   │   ├── AutomatedTesting.md
    │   │   ├── Build.md
    │   │   ├── PrivacyPolicy.md
    │   │   ├── README.md
    │   │   ├── TestOutput.md
    │   │   ├── Usage.md
    │   │   └── images
    │   │   │   ├── auto_glitch_test.png
    │   │   │   ├── echo_input_output.png
    │   │   │   ├── main_activity.png
    │   │   │   ├── recorder.png
    │   │   │   ├── round_trip_latency.png
    │   │   │   ├── tap_to_tone.png
    │   │   │   ├── test_glitches.png
    │   │   │   ├── test_input.png
    │   │   │   ├── test_output.png
    │   │   │   └── test_output_running.png
    │   ├── gradle.properties
    │   ├── gradle
    │   │   └── wrapper
    │   │   │   ├── gradle-wrapper.jar
    │   │   │   └── gradle-wrapper.properties
    │   ├── gradlew
    │   ├── gradlew.bat
    │   ├── scripts
    │   │   └── dsp_timing.py
    │   └── settings.gradle
    └── fxlab
    │   ├── .gitignore
    │   ├── CONTRIBUTING.md
    │   ├── LICENSE
    │   ├── README.md
    │   ├── app
    │       ├── .gitignore
    │       ├── CMakeLists.txt
    │       ├── build.gradle
    │       ├── proguard-rules.pro
    │       └── src
    │       │   └── main
    │       │       ├── AndroidManifest.xml
    │       │       ├── cpp
    │       │           ├── DuplexCallback.h
    │       │           ├── DuplexEngine.cpp
    │       │           ├── DuplexEngine.h
    │       │           ├── FunctionList.h
    │       │           ├── effects
    │       │           │   ├── CombFilter.h
    │       │           │   ├── DelayLineEffect.h
    │       │           │   ├── DoublingEffect.h
    │       │           │   ├── DriveControl.h
    │       │           │   ├── EchoEffect.h
    │       │           │   ├── Effects.h
    │       │           │   ├── FlangerEffect.h
    │       │           │   ├── SingleFunctionEffects.h
    │       │           │   ├── SlapbackEffect.h
    │       │           │   ├── TremoloEffect.h
    │       │           │   ├── VibratroEffect.h
    │       │           │   ├── WhiteChorusEffect.h
    │       │           │   ├── descrip
    │       │           │   │   ├── AllPassDescription.h
    │       │           │   │   ├── DistortionDescription.h
    │       │           │   │   ├── DoublingDescription.h
    │       │           │   │   ├── EchoDescription.h
    │       │           │   │   ├── EffectDescription.h
    │       │           │   │   ├── FIRDescription.h
    │       │           │   │   ├── FlangerDescription.h
    │       │           │   │   ├── GainDescription.h
    │       │           │   │   ├── IIRDescription.h
    │       │           │   │   ├── OverdriveDescription.h
    │       │           │   │   ├── PassthroughDescription.h
    │       │           │   │   ├── SlapbackDescription.h
    │       │           │   │   ├── TremoloDescription.h
    │       │           │   │   ├── VibratoDescription.h
    │       │           │   │   └── WhiteChorusDescription.h
    │       │           │   └── utils
    │       │           │   │   ├── DelayLine.h
    │       │           │   │   ├── PhaseAccumulator.h
    │       │           │   │   ├── SineWave.h
    │       │           │   │   └── WhiteNoise.h
    │       │           ├── logging_macros.h
    │       │           ├── native-lib.cpp
    │       │           └── tests
    │       │           │   ├── .gitignore
    │       │           │   ├── CMakeLists.txt
    │       │           │   ├── DelayLineEffectTest.h
    │       │           │   ├── DelayLineTest.h
    │       │           │   ├── TypeTests.h
    │       │           │   └── testEffects.cpp
    │       │       ├── kotlin
    │       │           └── com
    │       │           │   └── mobileer
    │       │           │       └── androidfxlab
    │       │           │           ├── EffectsAdapter.kt
    │       │           │           ├── MainActivity.kt
    │       │           │           ├── NativeInterface.kt
    │       │           │           └── datatype
    │       │           │               ├── Effect.kt
    │       │           │               ├── EffectDescription.kt
    │       │           │               └── ParamDescription.kt
    │       │       └── res
    │       │           ├── drawable-v24
    │       │               └── ic_launcher_foreground.xml
    │       │           ├── drawable
    │       │               ├── ic_add.xml
    │       │               ├── ic_baseline_audio_is_disabled_24.xml
    │       │               ├── ic_baseline_audio_is_enabled_24.xml
    │       │               ├── ic_baseline_drag_indicator.xml
    │       │               └── ic_launcher_background.xml
    │       │           ├── layout
    │       │               ├── activity_main.xml
    │       │               ├── effect_header.xml
    │       │               ├── effect_view.xml
    │       │               └── param_seek.xml
    │       │           ├── menu
    │       │               ├── add_menu.xml
    │       │               └── toolbar_menu.xml
    │       │           ├── mipmap-anydpi-v26
    │       │               ├── ic_launcher.xml
    │       │               └── ic_launcher_round.xml
    │       │           ├── mipmap-hdpi
    │       │               ├── ic_launcher.png
    │       │               └── ic_launcher_round.png
    │       │           ├── mipmap-mdpi
    │       │               ├── ic_launcher.png
    │       │               └── ic_launcher_round.png
    │       │           ├── mipmap-xhdpi
    │       │               ├── ic_launcher.png
    │       │               └── ic_launcher_round.png
    │       │           ├── mipmap-xxhdpi
    │       │               ├── ic_launcher.png
    │       │               └── ic_launcher_round.png
    │       │           ├── mipmap-xxxhdpi
    │       │               ├── ic_launcher.png
    │       │               └── ic_launcher_round.png
    │       │           └── values
    │       │               ├── colors.xml
    │       │               ├── strings.xml
    │       │               └── styles.xml
    │   ├── build.gradle
    │   ├── docs
    │       ├── Dev-Guide.md
    │       ├── Presentation.pdf
    │       └── README.md
    │   ├── gradle.properties
    │   ├── gradle
    │       └── wrapper
    │       │   ├── gradle-wrapper.jar
    │       │   └── gradle-wrapper.properties
    │   ├── gradlew
    │   ├── gradlew.bat
    │   ├── screenshot.png
    │   └── settings.gradle
├── build_all_android.sh
├── docs
    ├── AndroidAudioHistory.md
    ├── FAQ.md
    ├── FullGuide.md
    ├── GettingStarted.md
    ├── OpenSLESMigration.md
    ├── PrivacyPolicy.md
    ├── README.md
    ├── images
    │   ├── cmakelists-location-in-as.png
    │   ├── getting-started-video.jpg
    │   ├── oboe-lifecycle.png
    │   ├── oboe-sharing-mode-exclusive.jpg
    │   └── oboe-sharing-mode-shared.jpg
    └── index.md
├── include
    └── oboe
    │   ├── AudioClock.h
    │   ├── AudioStream.h
    │   ├── AudioStreamBase.h
    │   ├── AudioStreamBuilder.h
    │   ├── AudioStreamCallback.h
    │   ├── Definitions.h
    │   ├── FifoBuffer.h
    │   ├── FifoControllerBase.h
    │   ├── FullDuplexStream.h
    │   ├── LatencyTuner.h
    │   ├── Oboe.h
    │   ├── OboeExtensions.h
    │   ├── ResultWithValue.h
    │   ├── StabilizedCallback.h
    │   ├── Utilities.h
    │   └── Version.h
├── prefab
    ├── oboe-VERSION.pom
    └── oboe-VERSION
    │   ├── AndroidManifest.xml
    │   └── prefab
    │       ├── modules
    │           └── oboe
    │           │   ├── libs
    │           │       ├── android.arm64-v8a
    │           │       │   └── abi.json
    │           │       ├── android.armeabi-v7a
    │           │       │   └── abi.json
    │           │       ├── android.x86
    │           │       │   └── abi.json
    │           │       └── android.x86_64
    │           │       │   └── abi.json
    │           │   └── module.json
    │       └── prefab.json
├── prefab_build.sh
├── samples
    ├── .gitignore
    ├── LiveEffect
    │   ├── README.md
    │   ├── build.gradle
    │   ├── screenshot.png
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── FullDuplexPass.h
    │   │           ├── LiveEffectEngine.cpp
    │   │           ├── LiveEffectEngine.h
    │   │           ├── jni_bridge.cpp
    │   │           └── ndk-stl-config.cmake
    │   │       ├── java
    │   │           └── com
    │   │           │   └── google
    │   │           │       └── oboe
    │   │           │           └── samples
    │   │           │               └── liveEffect
    │   │           │                   ├── DuplexStreamForegroundService.java
    │   │           │                   ├── LiveEffectEngine.java
    │   │           │                   └── MainActivity.java
    │   │       └── res
    │   │           ├── layout-v21
    │   │               └── activity_main.xml
    │   │           ├── layout
    │   │               └── activity_main.xml
    │   │           ├── mipmap-hdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-mdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-xhdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-xxhdpi
    │   │               └── ic_launcher.png
    │   │           ├── values-v21
    │   │               └── styles.xml
    │   │           ├── values-w820dp
    │   │               └── dimens.xml
    │   │           └── values
    │   │               ├── colors.xml
    │   │               ├── dimens.xml
    │   │               ├── strings.xml
    │   │               └── styles.xml
    ├── MegaDrone
    │   ├── .gitignore
    │   ├── README.md
    │   ├── build.gradle
    │   ├── megadrone-screenshot.png
    │   ├── proguard-rules.pro
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── MegaDroneEngine.cpp
    │   │           ├── MegaDroneEngine.h
    │   │           ├── Synth.h
    │   │           └── native-lib.cpp
    │   │       ├── java
    │   │           └── com
    │   │           │   └── google
    │   │           │       └── oboe
    │   │           │           └── samples
    │   │           │               └── megadrone
    │   │           │                   └── MainActivity.java
    │   │       └── res
    │   │           ├── drawable-v24
    │   │               └── ic_launcher_foreground.xml
    │   │           ├── drawable
    │   │               └── ic_launcher_background.xml
    │   │           ├── layout
    │   │               └── activity_main.xml
    │   │           ├── mipmap-anydpi-v26
    │   │               ├── ic_launcher.xml
    │   │               └── ic_launcher_round.xml
    │   │           ├── mipmap-hdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-mdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xxhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xxxhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           └── values
    │   │               ├── colors.xml
    │   │               ├── strings.xml
    │   │               └── styles.xml
    ├── README.md
    ├── RhythmGame
    │   ├── CMakeLists.txt
    │   ├── README.md
    │   ├── build.gradle
    │   ├── images
    │   │   ├── 1-timeline.png
    │   │   ├── 2-architecture.png
    │   │   ├── 3-audioData.png
    │   │   ├── 4-audio-rendering.png
    │   │   ├── 5-lockfreequeue.png
    │   │   ├── 6-audio-ui-sync.png
    │   │   ├── 7-tap-window.png
    │   │   └── RhythmGame-screenshot.png
    │   ├── proguard-rules.pro
    │   ├── src
    │   │   └── main
    │   │   │   ├── AndroidManifest.xml
    │   │   │   ├── assets
    │   │   │       ├── CLAP.mp3
    │   │   │       └── FUNKY_HOUSE.mp3
    │   │   │   ├── cpp
    │   │   │       ├── Game.cpp
    │   │   │       ├── Game.h
    │   │   │       ├── GameConstants.h
    │   │   │       ├── audio
    │   │   │       │   ├── AAssetDataSource.cpp
    │   │   │       │   ├── AAssetDataSource.h
    │   │   │       │   ├── DataSource.h
    │   │   │       │   ├── FFMpegExtractor.cpp
    │   │   │       │   ├── FFMpegExtractor.h
    │   │   │       │   ├── NDKExtractor.cpp
    │   │   │       │   ├── NDKExtractor.h
    │   │   │       │   ├── Player.cpp
    │   │   │       │   └── Player.h
    │   │   │       ├── native-lib.cpp
    │   │   │       ├── ui
    │   │   │       │   ├── OpenGLFunctions.cpp
    │   │   │       │   └── OpenGLFunctions.h
    │   │   │       └── utils
    │   │   │       │   ├── LockFreeQueue.h
    │   │   │       │   ├── UtilityFunctions.cpp
    │   │   │       │   ├── UtilityFunctions.h
    │   │   │       │   └── logging.h
    │   │   │   ├── java
    │   │   │       └── com
    │   │   │       │   └── google
    │   │   │       │       └── oboe
    │   │   │       │           └── samples
    │   │   │       │               └── rhythmgame
    │   │   │       │                   ├── GameSurfaceView.java
    │   │   │       │                   ├── MainActivity.java
    │   │   │       │                   └── RendererWrapper.java
    │   │   │   └── res
    │   │   │       ├── drawable-v24
    │   │   │           └── ic_launcher_foreground.xml
    │   │   │       ├── drawable
    │   │   │           └── ic_launcher_background.xml
    │   │   │       ├── layout
    │   │   │           └── activity_main.xml
    │   │   │       ├── mipmap-anydpi-v26
    │   │   │           ├── ic_launcher.xml
    │   │   │           └── ic_launcher_round.xml
    │   │   │       ├── mipmap-hdpi
    │   │   │           ├── ic_launcher.png
    │   │   │           └── ic_launcher_round.png
    │   │   │       ├── mipmap-mdpi
    │   │   │           ├── ic_launcher.png
    │   │   │           └── ic_launcher_round.png
    │   │   │       ├── mipmap-xhdpi
    │   │   │           ├── ic_launcher.png
    │   │   │           └── ic_launcher_round.png
    │   │   │       ├── mipmap-xxhdpi
    │   │   │           ├── ic_launcher.png
    │   │   │           └── ic_launcher_round.png
    │   │   │       ├── mipmap-xxxhdpi
    │   │   │           ├── ic_launcher.png
    │   │   │           └── ic_launcher_round.png
    │   │   │       └── values
    │   │   │           ├── colors.xml
    │   │   │           ├── strings.xml
    │   │   │           └── styles.xml
    │   ├── test
    │   │   ├── CMakeLists.txt
    │   │   ├── run_tests.sh
    │   │   └── testLockFreeQueue.cpp
    │   └── third_party
    │   │   └── glm
    │   │       ├── CMakeLists.txt
    │   │       ├── common.hpp
    │   │       ├── detail
    │   │           ├── _features.hpp
    │   │           ├── _fixes.hpp
    │   │           ├── _noise.hpp
    │   │           ├── _swizzle.hpp
    │   │           ├── _swizzle_func.hpp
    │   │           ├── _vectorize.hpp
    │   │           ├── dummy.cpp
    │   │           ├── func_common.hpp
    │   │           ├── func_common.inl
    │   │           ├── func_common_simd.inl
    │   │           ├── func_exponential.hpp
    │   │           ├── func_exponential.inl
    │   │           ├── func_exponential_simd.inl
    │   │           ├── func_geometric.hpp
    │   │           ├── func_geometric.inl
    │   │           ├── func_geometric_simd.inl
    │   │           ├── func_integer.hpp
    │   │           ├── func_integer.inl
    │   │           ├── func_integer_simd.inl
    │   │           ├── func_matrix.hpp
    │   │           ├── func_matrix.inl
    │   │           ├── func_matrix_simd.inl
    │   │           ├── func_packing.hpp
    │   │           ├── func_packing.inl
    │   │           ├── func_packing_simd.inl
    │   │           ├── func_trigonometric.hpp
    │   │           ├── func_trigonometric.inl
    │   │           ├── func_trigonometric_simd.inl
    │   │           ├── func_vector_relational.hpp
    │   │           ├── func_vector_relational.inl
    │   │           ├── func_vector_relational_simd.inl
    │   │           ├── glm.cpp
    │   │           ├── precision.hpp
    │   │           ├── setup.hpp
    │   │           ├── type_float.hpp
    │   │           ├── type_gentype.hpp
    │   │           ├── type_gentype.inl
    │   │           ├── type_half.hpp
    │   │           ├── type_half.inl
    │   │           ├── type_int.hpp
    │   │           ├── type_mat.hpp
    │   │           ├── type_mat.inl
    │   │           ├── type_mat2x2.hpp
    │   │           ├── type_mat2x2.inl
    │   │           ├── type_mat2x3.hpp
    │   │           ├── type_mat2x3.inl
    │   │           ├── type_mat2x4.hpp
    │   │           ├── type_mat2x4.inl
    │   │           ├── type_mat3x2.hpp
    │   │           ├── type_mat3x2.inl
    │   │           ├── type_mat3x3.hpp
    │   │           ├── type_mat3x3.inl
    │   │           ├── type_mat3x4.hpp
    │   │           ├── type_mat3x4.inl
    │   │           ├── type_mat4x2.hpp
    │   │           ├── type_mat4x2.inl
    │   │           ├── type_mat4x3.hpp
    │   │           ├── type_mat4x3.inl
    │   │           ├── type_mat4x4.hpp
    │   │           ├── type_mat4x4.inl
    │   │           ├── type_mat4x4_simd.inl
    │   │           ├── type_vec.hpp
    │   │           ├── type_vec.inl
    │   │           ├── type_vec1.hpp
    │   │           ├── type_vec1.inl
    │   │           ├── type_vec2.hpp
    │   │           ├── type_vec2.inl
    │   │           ├── type_vec3.hpp
    │   │           ├── type_vec3.inl
    │   │           ├── type_vec4.hpp
    │   │           ├── type_vec4.inl
    │   │           └── type_vec4_simd.inl
    │   │       ├── exponential.hpp
    │   │       ├── ext.hpp
    │   │       ├── fwd.hpp
    │   │       ├── geometric.hpp
    │   │       ├── glm.hpp
    │   │       ├── gtc
    │   │           ├── bitfield.hpp
    │   │           ├── bitfield.inl
    │   │           ├── color_encoding.inl
    │   │           ├── color_space.hpp
    │   │           ├── color_space.inl
    │   │           ├── constants.hpp
    │   │           ├── constants.inl
    │   │           ├── epsilon.hpp
    │   │           ├── epsilon.inl
    │   │           ├── functions.hpp
    │   │           ├── functions.inl
    │   │           ├── integer.hpp
    │   │           ├── integer.inl
    │   │           ├── matrix_access.hpp
    │   │           ├── matrix_access.inl
    │   │           ├── matrix_integer.hpp
    │   │           ├── matrix_inverse.hpp
    │   │           ├── matrix_inverse.inl
    │   │           ├── matrix_transform.hpp
    │   │           ├── matrix_transform.inl
    │   │           ├── noise.hpp
    │   │           ├── noise.inl
    │   │           ├── packing.hpp
    │   │           ├── packing.inl
    │   │           ├── quaternion.hpp
    │   │           ├── quaternion.inl
    │   │           ├── quaternion_simd.inl
    │   │           ├── random.hpp
    │   │           ├── random.inl
    │   │           ├── reciprocal.hpp
    │   │           ├── reciprocal.inl
    │   │           ├── round.hpp
    │   │           ├── round.inl
    │   │           ├── type_aligned.hpp
    │   │           ├── type_precision.hpp
    │   │           ├── type_precision.inl
    │   │           ├── type_ptr.hpp
    │   │           ├── type_ptr.inl
    │   │           ├── ulp.hpp
    │   │           ├── ulp.inl
    │   │           ├── vec1.hpp
    │   │           └── vec1.inl
    │   │       ├── gtx
    │   │           ├── associated_min_max.hpp
    │   │           ├── associated_min_max.inl
    │   │           ├── bit.hpp
    │   │           ├── bit.inl
    │   │           ├── closest_point.hpp
    │   │           ├── closest_point.inl
    │   │           ├── color_space.hpp
    │   │           ├── color_space.inl
    │   │           ├── color_space_YCoCg.hpp
    │   │           ├── color_space_YCoCg.inl
    │   │           ├── common.hpp
    │   │           ├── common.inl
    │   │           ├── compatibility.hpp
    │   │           ├── compatibility.inl
    │   │           ├── component_wise.hpp
    │   │           ├── component_wise.inl
    │   │           ├── dual_quaternion.hpp
    │   │           ├── dual_quaternion.inl
    │   │           ├── euler_angles.hpp
    │   │           ├── euler_angles.inl
    │   │           ├── extend.hpp
    │   │           ├── extend.inl
    │   │           ├── extended_min_max.hpp
    │   │           ├── extended_min_max.inl
    │   │           ├── fast_exponential.hpp
    │   │           ├── fast_exponential.inl
    │   │           ├── fast_square_root.hpp
    │   │           ├── fast_square_root.inl
    │   │           ├── fast_trigonometry.hpp
    │   │           ├── fast_trigonometry.inl
    │   │           ├── float_notmalize.inl
    │   │           ├── gradient_paint.hpp
    │   │           ├── gradient_paint.inl
    │   │           ├── handed_coordinate_space.hpp
    │   │           ├── handed_coordinate_space.inl
    │   │           ├── hash.hpp
    │   │           ├── hash.inl
    │   │           ├── integer.hpp
    │   │           ├── integer.inl
    │   │           ├── intersect.hpp
    │   │           ├── intersect.inl
    │   │           ├── io.hpp
    │   │           ├── io.inl
    │   │           ├── log_base.hpp
    │   │           ├── log_base.inl
    │   │           ├── matrix_cross_product.hpp
    │   │           ├── matrix_cross_product.inl
    │   │           ├── matrix_decompose.hpp
    │   │           ├── matrix_decompose.inl
    │   │           ├── matrix_interpolation.hpp
    │   │           ├── matrix_interpolation.inl
    │   │           ├── matrix_major_storage.hpp
    │   │           ├── matrix_major_storage.inl
    │   │           ├── matrix_operation.hpp
    │   │           ├── matrix_operation.inl
    │   │           ├── matrix_query.hpp
    │   │           ├── matrix_query.inl
    │   │           ├── matrix_transform_2d.hpp
    │   │           ├── matrix_transform_2d.inl
    │   │           ├── mixed_product.hpp
    │   │           ├── mixed_product.inl
    │   │           ├── norm.hpp
    │   │           ├── norm.inl
    │   │           ├── normal.hpp
    │   │           ├── normal.inl
    │   │           ├── normalize_dot.hpp
    │   │           ├── normalize_dot.inl
    │   │           ├── number_precision.hpp
    │   │           ├── number_precision.inl
    │   │           ├── optimum_pow.hpp
    │   │           ├── optimum_pow.inl
    │   │           ├── orthonormalize.hpp
    │   │           ├── orthonormalize.inl
    │   │           ├── perpendicular.hpp
    │   │           ├── perpendicular.inl
    │   │           ├── polar_coordinates.hpp
    │   │           ├── polar_coordinates.inl
    │   │           ├── projection.hpp
    │   │           ├── projection.inl
    │   │           ├── quaternion.hpp
    │   │           ├── quaternion.inl
    │   │           ├── range.hpp
    │   │           ├── raw_data.hpp
    │   │           ├── raw_data.inl
    │   │           ├── rotate_normalized_axis.hpp
    │   │           ├── rotate_normalized_axis.inl
    │   │           ├── rotate_vector.hpp
    │   │           ├── rotate_vector.inl
    │   │           ├── scalar_multiplication.hpp
    │   │           ├── scalar_relational.hpp
    │   │           ├── scalar_relational.inl
    │   │           ├── simd_mat4.hpp
    │   │           ├── simd_mat4.inl
    │   │           ├── simd_quat.hpp
    │   │           ├── simd_quat.inl
    │   │           ├── simd_vec4.hpp
    │   │           ├── simd_vec4.inl
    │   │           ├── spline.hpp
    │   │           ├── spline.inl
    │   │           ├── std_based_type.hpp
    │   │           ├── std_based_type.inl
    │   │           ├── string_cast.hpp
    │   │           ├── string_cast.inl
    │   │           ├── transform.hpp
    │   │           ├── transform.inl
    │   │           ├── transform2.hpp
    │   │           ├── transform2.inl
    │   │           ├── type_aligned.hpp
    │   │           ├── type_aligned.inl
    │   │           ├── type_trait.hpp
    │   │           ├── type_trait.inl
    │   │           ├── vector_angle.hpp
    │   │           ├── vector_angle.inl
    │   │           ├── vector_query.hpp
    │   │           ├── vector_query.inl
    │   │           ├── wrap.hpp
    │   │           └── wrap.inl
    │   │       ├── integer.hpp
    │   │       ├── mat2x2.hpp
    │   │       ├── mat2x3.hpp
    │   │       ├── mat2x4.hpp
    │   │       ├── mat3x2.hpp
    │   │       ├── mat3x3.hpp
    │   │       ├── mat3x4.hpp
    │   │       ├── mat4x2.hpp
    │   │       ├── mat4x3.hpp
    │   │       ├── mat4x4.hpp
    │   │       ├── matrix.hpp
    │   │       ├── packing.hpp
    │   │       ├── simd
    │   │           ├── common.h
    │   │           ├── exponential.h
    │   │           ├── geometric.h
    │   │           ├── integer.h
    │   │           ├── matrix.h
    │   │           ├── packing.h
    │   │           ├── platform.h
    │   │           ├── trigonometric.h
    │   │           └── vector_relational.h
    │   │       ├── trigonometric.hpp
    │   │       ├── vec2.hpp
    │   │       ├── vec3.hpp
    │   │       ├── vec4.hpp
    │   │       └── vector_relational.hpp
    ├── SoundBoard
    │   ├── README.md
    │   ├── build.gradle
    │   ├── proguard-rules.pro
    │   ├── soundboard_image.png
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── SoundBoardEngine.cpp
    │   │           ├── SoundBoardEngine.h
    │   │           ├── Synth.h
    │   │           └── native-lib.cpp
    │   │       ├── ic_launcher-playstore.png
    │   │       ├── kotlin
    │   │           └── com
    │   │           │   └── google
    │   │           │       └── oboe
    │   │           │           └── samples
    │   │           │               └── soundboard
    │   │           │                   ├── MainActivity.kt
    │   │           │                   ├── MusicTileView.kt
    │   │           │                   └── NoteListener.kt
    │   │       └── res
    │   │           ├── drawable-v24
    │   │               └── ic_launcher_foreground.xml
    │   │           ├── drawable
    │   │               └── ic_launcher_background.xml
    │   │           ├── layout
    │   │               └── activity_main.xml
    │   │           ├── mipmap-anydpi-v26
    │   │               ├── ic_launcher.xml
    │   │               └── ic_launcher_round.xml
    │   │           ├── mipmap-hdpi
    │   │               └── ic_launcher_foreground.png
    │   │           ├── mipmap-mdpi
    │   │               └── ic_launcher_foreground.png
    │   │           ├── mipmap-xhdpi
    │   │               └── ic_launcher_foreground.png
    │   │           ├── mipmap-xxhdpi
    │   │               └── ic_launcher_foreground.png
    │   │           ├── mipmap-xxxhdpi
    │   │               └── ic_launcher_foreground.png
    │   │           └── values
    │   │               ├── colors.xml
    │   │               ├── strings.xml
    │   │               └── styles.xml
    ├── audio-device
    │   ├── README.md
    │   ├── build.gradle
    │   ├── proguard-rules.pro
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── java
    │   │           └── com
    │   │           │   └── google
    │   │           │       └── oboe
    │   │           │           └── samples
    │   │           │               └── audio_device
    │   │           │                   ├── AudioDeviceAdapter.java
    │   │           │                   ├── AudioDeviceInfoConverter.java
    │   │           │                   ├── AudioDeviceListEntry.java
    │   │           │                   └── AudioDeviceSpinner.java
    │   │       └── res
    │   │           ├── layout
    │   │               └── audio_devices.xml
    │   │           └── values
    │   │               ├── dimens.xml
    │   │               └── strings.xml
    ├── build.gradle
    ├── debug-utils
    │   ├── logging_macros.h
    │   ├── trace.cpp
    │   └── trace.h
    ├── drumthumper
    │   ├── README.md
    │   ├── build.gradle
    │   ├── drumthumper-screenshot.png
    │   ├── playstore
    │   │   ├── DrumSetFeatureImage.png
    │   │   ├── ScreenShotPhone.png
    │   │   ├── ScreenShotWithMix.png
    │   │   └── drumset.jpg
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── assets
    │   │           ├── CrashCymbal.wav
    │   │           ├── HiHat_Closed.wav
    │   │           ├── HiHat_Open.wav
    │   │           ├── KickDrum.wav
    │   │           ├── LowTom.wav
    │   │           ├── MidTom.wav
    │   │           ├── RideCymbal.wav
    │   │           └── SnareDrum.wav
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           └── DrumPlayerJNI.cpp
    │   │       ├── kotlin
    │   │           └── com
    │   │           │   └── plausibleaudio
    │   │           │       └── drumthumper
    │   │           │           ├── DrumPlayer.kt
    │   │           │           ├── DrumThumperActivity.kt
    │   │           │           └── TriggerPad.kt
    │   │       └── res
    │   │           ├── drawable-v24
    │   │               └── _ic_launcher_foreground.xml
    │   │           ├── drawable
    │   │               └── _ic_launcher_background.xml
    │   │           ├── layout-land
    │   │               └── drumthumper_activity.xml
    │   │           ├── layout
    │   │               └── drumthumper_activity.xml
    │   │           ├── mipmap-anydpi-v26
    │   │               ├── _ic_launcher.xml
    │   │               └── _ic_launcher_round.xml
    │   │           ├── mipmap-hdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-mdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xxhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           ├── mipmap-xxxhdpi
    │   │               ├── ic_launcher.png
    │   │               └── ic_launcher_round.png
    │   │           └── values
    │   │               ├── colors.xml
    │   │               ├── strings.xml
    │   │               └── styles.xml
    ├── gradle.properties
    ├── gradle
    │   └── wrapper
    │   │   ├── gradle-wrapper.jar
    │   │   └── gradle-wrapper.properties
    ├── gradlew
    ├── gradlew.bat
    ├── hello-oboe
    │   ├── README.md
    │   ├── build.gradle
    │   ├── hello-oboe-screenshot.png
    │   ├── proguard-rules.pro
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── HelloOboeEngine.cpp
    │   │           ├── HelloOboeEngine.h
    │   │           ├── LatencyTuningCallback.cpp
    │   │           ├── LatencyTuningCallback.h
    │   │           ├── SoundGenerator.cpp
    │   │           ├── SoundGenerator.h
    │   │           └── jni_bridge.cpp
    │   │       ├── java
    │   │           └── com
    │   │           │   └── google
    │   │           │       └── oboe
    │   │           │           └── samples
    │   │           │               └── hellooboe
    │   │           │                   ├── BackgroundRunner.java
    │   │           │                   ├── MainActivity.java
    │   │           │                   └── PlaybackEngine.java
    │   │       └── res
    │   │           ├── layout
    │   │               ├── activity_main.xml
    │   │               ├── audio_apis_spinner.xml
    │   │               ├── buffer_sizes_spinner.xml
    │   │               └── channel_counts_spinner.xml
    │   │           ├── mipmap-hdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-mdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-xhdpi
    │   │               └── ic_launcher.png
    │   │           ├── mipmap-xxhdpi
    │   │               └── ic_launcher.png
    │   │           ├── values-v21
    │   │               └── styles.xml
    │   │           ├── values-w820dp
    │   │               └── dimens.xml
    │   │           └── values
    │   │               ├── dimens.xml
    │   │               ├── strings.xml
    │   │               └── styles.xml
    ├── iolib
    │   ├── .gitignore
    │   ├── README.md
    │   ├── build.gradle
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           └── player
    │   │           │   ├── DataSource.h
    │   │           │   ├── OneShotSampleSource.cpp
    │   │           │   ├── OneShotSampleSource.h
    │   │           │   ├── SampleBuffer.cpp
    │   │           │   ├── SampleBuffer.h
    │   │           │   ├── SampleSource.cpp
    │   │           │   ├── SampleSource.h
    │   │           │   ├── SimpleMultiPlayer.cpp
    │   │           │   └── SimpleMultiPlayer.h
    │   │       └── res
    │   │           └── values
    │   │               └── strings.xml
    ├── minimaloboe
    │   ├── .gitignore
    │   ├── README.md
    │   ├── build.gradle
    │   ├── minimaloboe-screenshot.png
    │   ├── proguard-rules.pro
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── MinimalOboeJNI.cpp
    │   │           ├── SimpleNoiseMaker.cpp
    │   │           └── SimpleNoiseMaker.h
    │   │       ├── kotlin
    │   │           └── com
    │   │           │   └── example
    │   │           │       └── minimaloboe
    │   │           │           ├── AudioPlayer.kt
    │   │           │           ├── MainActivity.kt
    │   │           │           └── ui
    │   │           │               └── theme
    │   │           │                   ├── Color.kt
    │   │           │                   ├── Shape.kt
    │   │           │                   ├── Theme.kt
    │   │           │                   └── Type.kt
    │   │       └── res
    │   │           ├── drawable-v24
    │   │               └── ic_launcher_foreground.xml
    │   │           ├── drawable
    │   │               └── ic_launcher_background.xml
    │   │           ├── mipmap-anydpi-v26
    │   │               ├── ic_launcher.xml
    │   │               └── ic_launcher_round.xml
    │   │           ├── mipmap-hdpi
    │   │               ├── ic_launcher.webp
    │   │               └── ic_launcher_round.webp
    │   │           ├── mipmap-mdpi
    │   │               ├── ic_launcher.webp
    │   │               └── ic_launcher_round.webp
    │   │           ├── mipmap-xhdpi
    │   │               ├── ic_launcher.webp
    │   │               └── ic_launcher_round.webp
    │   │           ├── mipmap-xxhdpi
    │   │               ├── ic_launcher.webp
    │   │               └── ic_launcher_round.webp
    │   │           ├── mipmap-xxxhdpi
    │   │               ├── ic_launcher.webp
    │   │               └── ic_launcher_round.webp
    │   │           └── values
    │   │               ├── colors.xml
    │   │               ├── strings.xml
    │   │               └── themes.xml
    ├── parselib
    │   ├── README.md
    │   ├── build.gradle
    │   └── src
    │   │   └── main
    │   │       ├── AndroidManifest.xml
    │   │       ├── cpp
    │   │           ├── CMakeLists.txt
    │   │           ├── stream
    │   │           │   ├── FileInputStream.cpp
    │   │           │   ├── FileInputStream.h
    │   │           │   ├── InputStream.cpp
    │   │           │   ├── InputStream.h
    │   │           │   ├── MemInputStream.cpp
    │   │           │   └── MemInputStream.h
    │   │           └── wav
    │   │           │   ├── AudioEncoding.cpp
    │   │           │   ├── AudioEncoding.h
    │   │           │   ├── WavChunkHeader.cpp
    │   │           │   ├── WavChunkHeader.h
    │   │           │   ├── WavFmtChunkHeader.cpp
    │   │           │   ├── WavFmtChunkHeader.h
    │   │           │   ├── WavRIFFChunkHeader.cpp
    │   │           │   ├── WavRIFFChunkHeader.h
    │   │           │   ├── WavStreamReader.cpp
    │   │           │   ├── WavStreamReader.h
    │   │           │   └── WavTypes.h
    │   │       └── res
    │   │           └── values
    │   │               └── strings.xml
    ├── settings.gradle
    └── shared
    │   ├── DefaultDataCallback.h
    │   ├── DefaultErrorCallback.h
    │   ├── IRenderableAudio.h
    │   ├── IRestartable.h
    │   ├── ITappable.h
    │   ├── Mixer.h
    │   ├── MonoToStereo.h
    │   ├── Oscillator.h
    │   ├── SynthSound.h
    │   └── TappableAudioSource.h
├── src
    ├── aaudio
    │   ├── AAudioExtensions.h
    │   ├── AAudioLoader.cpp
    │   ├── AAudioLoader.h
    │   ├── AudioStreamAAudio.cpp
    │   └── AudioStreamAAudio.h
    ├── common
    │   ├── AdpfWrapper.cpp
    │   ├── AdpfWrapper.h
    │   ├── AudioSourceCaller.cpp
    │   ├── AudioSourceCaller.h
    │   ├── AudioStream.cpp
    │   ├── AudioStreamBuilder.cpp
    │   ├── DataConversionFlowGraph.cpp
    │   ├── DataConversionFlowGraph.h
    │   ├── FilterAudioStream.cpp
    │   ├── FilterAudioStream.h
    │   ├── FixedBlockAdapter.cpp
    │   ├── FixedBlockAdapter.h
    │   ├── FixedBlockReader.cpp
    │   ├── FixedBlockReader.h
    │   ├── FixedBlockWriter.cpp
    │   ├── FixedBlockWriter.h
    │   ├── LatencyTuner.cpp
    │   ├── MonotonicCounter.h
    │   ├── OboeDebug.h
    │   ├── OboeExtensions.cpp
    │   ├── QuirksManager.cpp
    │   ├── QuirksManager.h
    │   ├── README.md
    │   ├── SourceFloatCaller.cpp
    │   ├── SourceFloatCaller.h
    │   ├── SourceI16Caller.cpp
    │   ├── SourceI16Caller.h
    │   ├── SourceI24Caller.cpp
    │   ├── SourceI24Caller.h
    │   ├── SourceI32Caller.cpp
    │   ├── SourceI32Caller.h
    │   ├── StabilizedCallback.cpp
    │   ├── Trace.cpp
    │   ├── Trace.h
    │   ├── Utilities.cpp
    │   └── Version.cpp
    ├── fifo
    │   ├── FifoBuffer.cpp
    │   ├── FifoController.cpp
    │   ├── FifoController.h
    │   ├── FifoControllerBase.cpp
    │   ├── FifoControllerIndirect.cpp
    │   └── FifoControllerIndirect.h
    ├── flowgraph
    │   ├── ChannelCountConverter.cpp
    │   ├── ChannelCountConverter.h
    │   ├── ClipToRange.cpp
    │   ├── ClipToRange.h
    │   ├── FlowGraphNode.cpp
    │   ├── FlowGraphNode.h
    │   ├── FlowgraphUtilities.h
    │   ├── Limiter.cpp
    │   ├── Limiter.h
    │   ├── ManyToMultiConverter.cpp
    │   ├── ManyToMultiConverter.h
    │   ├── MonoBlend.cpp
    │   ├── MonoBlend.h
    │   ├── MonoToMultiConverter.cpp
    │   ├── MonoToMultiConverter.h
    │   ├── MultiToManyConverter.cpp
    │   ├── MultiToManyConverter.h
    │   ├── MultiToMonoConverter.cpp
    │   ├── MultiToMonoConverter.h
    │   ├── RampLinear.cpp
    │   ├── RampLinear.h
    │   ├── SampleRateConverter.cpp
    │   ├── SampleRateConverter.h
    │   ├── SinkFloat.cpp
    │   ├── SinkFloat.h
    │   ├── SinkI16.cpp
    │   ├── SinkI16.h
    │   ├── SinkI24.cpp
    │   ├── SinkI24.h
    │   ├── SinkI32.cpp
    │   ├── SinkI32.h
    │   ├── SinkI8_24.cpp
    │   ├── SinkI8_24.h
    │   ├── SourceFloat.cpp
    │   ├── SourceFloat.h
    │   ├── SourceI16.cpp
    │   ├── SourceI16.h
    │   ├── SourceI24.cpp
    │   ├── SourceI24.h
    │   ├── SourceI32.cpp
    │   ├── SourceI32.h
    │   ├── SourceI8_24.cpp
    │   ├── SourceI8_24.h
    │   └── resampler
    │   │   ├── HyperbolicCosineWindow.h
    │   │   ├── IntegerRatio.cpp
    │   │   ├── IntegerRatio.h
    │   │   ├── KaiserWindow.h
    │   │   ├── LinearResampler.cpp
    │   │   ├── LinearResampler.h
    │   │   ├── MultiChannelResampler.cpp
    │   │   ├── MultiChannelResampler.h
    │   │   ├── PolyphaseResampler.cpp
    │   │   ├── PolyphaseResampler.h
    │   │   ├── PolyphaseResamplerMono.cpp
    │   │   ├── PolyphaseResamplerMono.h
    │   │   ├── PolyphaseResamplerStereo.cpp
    │   │   ├── PolyphaseResamplerStereo.h
    │   │   ├── README.md
    │   │   ├── ResamplerDefinitions.h
    │   │   ├── SincResampler.cpp
    │   │   ├── SincResampler.h
    │   │   ├── SincResamplerStereo.cpp
    │   │   └── SincResamplerStereo.h
    └── opensles
    │   ├── AudioInputStreamOpenSLES.cpp
    │   ├── AudioInputStreamOpenSLES.h
    │   ├── AudioOutputStreamOpenSLES.cpp
    │   ├── AudioOutputStreamOpenSLES.h
    │   ├── AudioStreamBuffered.cpp
    │   ├── AudioStreamBuffered.h
    │   ├── AudioStreamOpenSLES.cpp
    │   ├── AudioStreamOpenSLES.h
    │   ├── EngineOpenSLES.cpp
    │   ├── EngineOpenSLES.h
    │   ├── OpenSLESUtilities.cpp
    │   ├── OpenSLESUtilities.h
    │   ├── OutputMixerOpenSLES.cpp
    │   └── OutputMixerOpenSLES.h
└── tests
    ├── CMakeLists.txt
    ├── README.md
    ├── UnitTestRunner
        ├── .gitignore
        ├── app
        │   ├── .gitignore
        │   ├── build.gradle
        │   ├── proguard-rules.pro
        │   └── src
        │   │   └── main
        │   │       ├── .gitignore
        │   │       ├── AndroidManifest.xml
        │   │       ├── java
        │   │           └── com
        │   │           │   └── google
        │   │           │       └── oboe
        │   │           │           └── tests
        │   │           │               └── unittestrunner
        │   │           │                   └── MainActivity.java
        │   │       └── res
        │   │           ├── drawable-v24
        │   │               └── ic_launcher_foreground.xml
        │   │           ├── drawable
        │   │               └── ic_launcher_background.xml
        │   │           ├── layout
        │   │               └── activity_main.xml
        │   │           ├── mipmap-anydpi-v26
        │   │               ├── ic_launcher.xml
        │   │               └── ic_launcher_round.xml
        │   │           ├── mipmap-hdpi
        │   │               ├── ic_launcher.png
        │   │               └── ic_launcher_round.png
        │   │           ├── mipmap-mdpi
        │   │               ├── ic_launcher.png
        │   │               └── ic_launcher_round.png
        │   │           ├── mipmap-xhdpi
        │   │               ├── ic_launcher.png
        │   │               └── ic_launcher_round.png
        │   │           ├── mipmap-xxhdpi
        │   │               ├── ic_launcher.png
        │   │               └── ic_launcher_round.png
        │   │           ├── mipmap-xxxhdpi
        │   │               ├── ic_launcher.png
        │   │               └── ic_launcher_round.png
        │   │           └── values
        │   │               ├── colors.xml
        │   │               ├── strings.xml
        │   │               └── styles.xml
        ├── build.gradle
        ├── gradle.properties
        ├── gradle
        │   └── wrapper
        │   │   ├── gradle-wrapper.jar
        │   │   └── gradle-wrapper.properties
        ├── gradlew
        ├── gradlew.bat
        └── settings.gradle
    ├── run_tests.sh
    ├── testAAudio.cpp
    ├── testAudioClock.cpp
    ├── testFlowgraph.cpp
    ├── testFullDuplexStream.cpp
    ├── testResampler.cpp
    ├── testReturnStop.cpp
    ├── testReturnStopDeadlock.cpp
    ├── testStreamClosedMethods.cpp
    ├── testStreamFramesProcessed.cpp
    ├── testStreamOpen.cpp
    ├── testStreamStates.cpp
    ├── testStreamStop.cpp
    ├── testStreamWaitState.cpp
    ├── testUtilities.cpp
    └── testXRunBehaviour.cpp


/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Bug report
 3 | about: Create a report to help us improve Oboe
 4 | title: ''
 5 | labels: bug
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | Android version(s):
11 | Android device(s):
12 | Oboe version:
13 | App name used for testing: 
14 | (Please try to reproduce the issue using the OboeTester or an Oboe sample.)
15 |  
16 | **Short description**
17 | (Please only report one bug per Issue. Do not combine multiple bugs.)
18 | 
19 | **Steps to reproduce**
20 | 
21 | **Expected behavior**
22 | 
23 | **Actual behavior**
24 | 
25 | **Device**
26 | 
27 | Please list which devices have this bug.
28 | If device specific, and you are on Linux or a Macintosh, connect the device and please share the result for the following script. This gets properties of the device. 
29 | 
30 | ```
31 | for p in \
32 |     ro.product.brand ro.product.manufacturer ro.product.model \
33 |     ro.product.device ro.product.cpu.abi ro.build.description \
34 |     ro.hardware ro.hardware.chipname ro.arch "| grep aaudio";
35 |     do echo "$p = $(adb shell getprop $p)"; done
36 | ```
37 | 
38 | **Any additional context**
39 | 
40 | If applicable, please attach a few seconds of an uncompressed recording of the sound in a WAV or AIFF file.
41 | 


--------------------------------------------------------------------------------
/.github/workflows/build-ci.yml:
--------------------------------------------------------------------------------
 1 | name: Build CI
 2 | 
 3 | on:
 4 |   push:
 5 |     branches: [ main ]
 6 |   pull_request:
 7 |     branches: [ main ]
 8 | 
 9 | permissions:
10 |   contents: write
11 |   security-events: write
12 | 
13 | jobs:
14 |   build:
15 |     runs-on: ubuntu-latest
16 | 
17 |     steps:
18 |     - uses: actions/checkout@v4
19 |     - name: set up JDK 17
20 |       uses: actions/setup-java@v4
21 |       with:
22 |         distribution: 'temurin'
23 |         java-version: 18
24 |     - name: build samples and apps
25 |       uses: github/codeql-action/init@v3
26 |       with:
27 |         languages: cpp
28 |     - run: |
29 |         pushd samples
30 |         chmod +x gradlew
31 |         ./gradlew -q clean bundleDebug
32 |         popd
33 |         pushd apps/OboeTester
34 |         chmod +x gradlew
35 |         ./gradlew -q clean bundleDebug
36 |         popd
37 |         pushd apps/fxlab
38 |         chmod +x gradlew
39 |         ./gradlew -q clean bundleDebug
40 |         popd
41 |     - name: Perform CodeQL Analysis
42 |       uses: github/codeql-action/analyze@v3
43 | 


--------------------------------------------------------------------------------
/.github/workflows/update-docs.yml:
--------------------------------------------------------------------------------
 1 | name: Update Docs
 2 | 
 3 | on:
 4 |   push:
 5 |     branches: [ main ]
 6 | 
 7 | permissions:
 8 |   contents: write
 9 | 
10 | jobs:
11 |   build:
12 |     runs-on: ubuntu-latest
13 | 
14 |     steps:
15 |     - uses: actions/checkout@v4
16 | 
17 |     - name: Doxygen Action
18 |       uses: mattnotmitt/doxygen-action@v1.12.0
19 |       with:
20 |         doxyfile-path: "./Doxyfile"
21 |         working-directory: "."
22 | 
23 |     - name: Deploy
24 |       uses: peaceiris/actions-gh-pages@v4
25 |       with:
26 |         github_token: ${{ secrets.GITHUB_TOKEN }}
27 |         publish_dir: ./docs/reference
28 | 


--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | */.DS_Store
2 | .DS_Store
3 | .externalNativeBuild/
4 | .cxx/
5 | .idea
6 | build
7 | .logpile
8 | 
9 | 


--------------------------------------------------------------------------------
/AUTHORS:
--------------------------------------------------------------------------------
 1 | # This is the official list of authors for copyright purposes.
 2 | # This file is distinct from the CONTRIBUTORS files.
 3 | # See the latter for an explanation.
 4 | 
 5 | # Names should be added to this file as:
 6 | # Name or Organization <email address>
 7 | # The email address is not required for organizations.
 8 | 
 9 | Google Inc.
10 | 


--------------------------------------------------------------------------------
/CONTRIBUTORS:
--------------------------------------------------------------------------------
 1 | # People who have agreed to one of the CLAs and can contribute patches.
 2 | # The AUTHORS file lists the copyright holders; this file
 3 | # lists people.  For example, Google employees are listed here
 4 | # but not in AUTHORS, because Google holds the copyright.
 5 | #
 6 | # https://developers.google.com/open-source/cla/individual
 7 | # https://developers.google.com/open-source/cla/corporate
 8 | #
 9 | # Names should be added to this file as:
10 | #     Name <email address>
11 | 
12 | Phil Burk <philburk@google.com>
13 | Don Turner <donturner@google.com>
14 | Mikhail Naganov <mnaganov@google.com>
15 | 


--------------------------------------------------------------------------------
/MODULE_LICENSE_APACHE2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/MODULE_LICENSE_APACHE2


--------------------------------------------------------------------------------
/apps/OboeTester/.gitignore:
--------------------------------------------------------------------------------
 1 | .gradle
 2 | /local.properties
 3 | /.idea/workspace.xml
 4 | /.idea/libraries
 5 | .DS_Store
 6 | /build/
 7 | .idea/
 8 | /app/build/
 9 | /app/release/
10 | /app/debug/
11 | /app/app.iml
12 | *.iml
13 | /app/externalNativeBuild/
14 | 


--------------------------------------------------------------------------------
/apps/OboeTester/.google/packaging.yaml:
--------------------------------------------------------------------------------
1 | status:       PUBLISHED
2 | technologies: [Android, NDK]
3 | categories:   [NDK, C++]
4 | languages:    [C++, Java]
5 | solutions:    [Mobile]
6 | github:       googlesamples/android-ndk
7 | license:      apache2
8 | 


--------------------------------------------------------------------------------
/apps/OboeTester/README.md:
--------------------------------------------------------------------------------
1 | # Oboe Tester
2 | 
3 | OboeTester is an app that can be used to test many of the features of Oboe, AAudio and OpenSL ES.
4 | It can also be used to measure device latency and glitches.
5 | 
6 | # [OboeTester Documentation](docs)
7 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/apps/OboeTester/app/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Apr 11 16:29:30 PDT 2019
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip
7 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # By default, the flags in this file are appended to flags specified
 3 | # in /Users/gfan/dev/android-sdk/tools/proguard/proguard-android.txt
 4 | # You can edit the include path and order by changing the proguardFiles
 5 | # directive in build.gradle.
 6 | #
 7 | # For more details, see
 8 | #   http://developer.android.com/guide/developing/tools/proguard.html
 9 | 
10 | # Add any project specific keep options here:
11 | 
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | #   public *;
17 | #}
18 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/cpp/OboeTools.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2023 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef OBOETESTER_OBOETOOLS_H
18 | #define OBOETESTER_OBOETOOLS_H
19 | 
20 | #define NANOS_PER_MICROSECOND    ((int64_t) 1000)
21 | #define NANOS_PER_MILLISECOND    (1000 * NANOS_PER_MICROSECOND)
22 | #define NANOS_PER_SECOND         (1000 * NANOS_PER_MILLISECOND)
23 | #define MILLISECONDS_PER_SECOND  1000
24 | 
25 | #endif //OBOETESTER_OBOETOOLS_H
26 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/cpp/flowunits/ExponentialShape.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <math.h>
18 | 
19 | #include "ExponentialShape.h"
20 | 
21 | ExponentialShape::ExponentialShape()
22 |         : FlowGraphFilter(1) {
23 | }
24 | 
25 | int32_t ExponentialShape::onProcess(int32_t numFrames) {
26 |     float *inputs = input.getBuffer();
27 |     float *outputs = output.getBuffer();
28 | 
29 |     for (int i = 0; i < numFrames; i++) {
30 |         float normalizedPhase = (inputs[i] * 0.5) + 0.5;
31 |         outputs[i] = mMinimum * powf(mRatio, normalizedPhase);
32 |     }
33 | 
34 |     return numFrames;
35 | }
36 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/cpp/flowunits/OscillatorBase.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include "OscillatorBase.h"
18 | 
19 | using namespace oboe::flowgraph;
20 | 
21 | OscillatorBase::OscillatorBase()
22 |         : frequency(*this, 1)
23 |         , amplitude(*this, 1)
24 |         , output(*this, 1) {
25 |     setSampleRate(48000);
26 | }
27 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/cpp/flowunits/SineOscillator.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2015 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef FLOWGRAPH_SINE_OSCILLATOR_H
18 | #define FLOWGRAPH_SINE_OSCILLATOR_H
19 | 
20 | #include <unistd.h>
21 | 
22 | #include "OscillatorBase.h"
23 | 
24 | /**
25 |  * Oscillator that generates a sine wave at the specified frequency and amplitude.
26 |  */
27 | class SineOscillator : public OscillatorBase {
28 | public:
29 |     SineOscillator();
30 | 
31 |     int32_t onProcess(int32_t numFrames) override;
32 | };
33 | 
34 | #endif //FLOWGRAPH_SINE_OSCILLATOR_H
35 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/cpp/flowunits/WhiteNoise.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2022 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <math.h>
18 | #include <unistd.h>
19 | 
20 | #include "WhiteNoise.h"
21 | 
22 | int32_t WhiteNoise::onProcess(int32_t numFrames) {
23 |     const float *amplitudes = amplitude.getBuffer();
24 |     float *buffer = output.getBuffer();
25 | 
26 |     for (int i = 0; i < numFrames; i++) {
27 |         float noise = (float) mPseudoRandom.nextRandomDouble(); // -1 to +1
28 |         *buffer++ = noise * (*amplitudes++);
29 |     }
30 | 
31 |     return numFrames;
32 | }
33 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/ic_launcher-playstore.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/java/com/mobileer/miditools/synth/SineVoice.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2014 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.miditools.synth;
18 | 
19 | /**
20 |  * Replace sawtooth with a sine wave.
21 |  */
22 | public class SineVoice extends SawVoice {
23 |     public SineVoice(int sampleRate) {
24 |         super(sampleRate);
25 |     }
26 | 
27 |     @Override
28 |     protected SawOscillator createOscillator() {
29 |         return new SineOscillator();
30 |     }
31 | }
32 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/NativeEngine.java:
--------------------------------------------------------------------------------
 1 | package com.mobileer.oboetester;
 2 | 
 3 | public class NativeEngine {
 4 | 
 5 |     static native boolean isMMapSupported();
 6 | 
 7 |     static native boolean isMMapExclusiveSupported();
 8 | 
 9 |     static native void setWorkaroundsEnabled(boolean enabled);
10 | 
11 |     static native boolean areWorkaroundsEnabled();
12 | 
13 |     static native int getCpuCount();
14 | 
15 |     static native void setCpuAffinityMask(int mask);
16 | 
17 |     static native void setWorkloadReportingEnabled(boolean enabled);
18 | 
19 |     static native void setNotifyWorkloadIncreaseEnabled(boolean enabled);
20 | }
21 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/OboeAudioInputStream.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2017 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.oboetester;
18 | 
19 | class OboeAudioInputStream extends OboeAudioStream {
20 | 
21 |     @Override
22 |     public boolean isInput() {
23 |         return true;
24 |     }
25 | 
26 | }
27 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/java/com/mobileer/oboetester/OboeAudioOutputStream.java:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2015 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.oboetester;
18 | 
19 | /**
20 |  * Native synthesizer and audio output.
21 |  */
22 | public class OboeAudioOutputStream extends OboeAudioStream {
23 | 
24 |     @Override
25 |     public boolean isInput() {
26 |         return false;
27 |     }
28 | 
29 |     public native void trigger();
30 | 
31 |     public native void setChannelEnabled(int channelIndex, boolean enabled);
32 | 
33 |     public native void setSignalType(int type);
34 | 
35 |     public native void setAmplitude(float amplitude);
36 | }
37 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/drawable/button_shape.xml:
--------------------------------------------------------------------------------
1 | <shape xmlns:android="http://schemas.android.com/apk/res/android" android:padding="16dp"
2 |     android:shape="rectangle">
3 |     <corners android:radius="6dp" />
4 |     <gradient android:angle="270" android:endColor="#d0e06E" android:startColor="#a07FCE" />
5 |     <stroke android:width="1px" android:color="#050875" />
6 | </shape>
7 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/layout/activity_device_report.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:tools="http://schemas.android.com/tools"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent"
 6 |     android:orientation="vertical"
 7 |     android:paddingBottom="@dimen/activity_vertical_margin"
 8 |     android:paddingLeft="@dimen/activity_horizontal_margin"
 9 |     android:paddingRight="@dimen/activity_horizontal_margin"
10 |     android:paddingTop="@dimen/activity_vertical_margin"
11 |     tools:context="com.mobileer.oboetester.DeviceReportActivity">
12 | 
13 |     <ScrollView
14 |         android:id="@+id/text_log_device_scroller"
15 |         android:layout_width="wrap_content"
16 |         android:layout_height="wrap_content">
17 |     <TextView
18 |         android:id="@+id/text_log_device_report"
19 |         android:layout_width="match_parent"
20 |         android:layout_height="match_parent"
21 |         android:fontFamily="monospace"
22 |         android:gravity="bottom"
23 |         android:scrollbars="vertical"
24 |         android:text="@string/device_report"
25 |         />
26 |     </ScrollView>
27 | 
28 | </LinearLayout>
29 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/layout/audio_devices.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright (C) 2017 The Android Open Source Project
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~      http://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | <TextView xmlns:android="http://schemas.android.com/apk/res/android"
18 |     android:id="@+id/device_name"
19 |     android:layout_width="match_parent"
20 |     android:layout_height="wrap_content"
21 |     android:fontFamily="sans-serif"
22 |     android:text="Device Name" />
23 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/layout/sample_fast_button.xml:
--------------------------------------------------------------------------------
 1 | <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res/com.mobileer.oboetester"
 3 |     android:layout_width="match_parent"
 4 |     android:layout_height="match_parent">
 5 | 
 6 |     <com.mobileer.oboetester.FastButton
 7 |         android:layout_width="300dp"
 8 |         android:layout_height="300dp"
 9 |         android:background="#ccc"
10 |         android:paddingBottom="40dp"
11 |         android:paddingLeft="20dp"
12 |         app:exampleColor="#33b5e5"
13 |         app:exampleDimension="24sp"
14 |         app:exampleDrawable="@android:drawable/ic_menu_add"
15 |         app:exampleString="Hello, FastButton" />
16 | 
17 | </FrameLayout>
18 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/layout/sample_multi_line_chart.xml:
--------------------------------------------------------------------------------
 1 | <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 3 |     android:layout_width="match_parent"
 4 |     android:layout_height="match_parent">
 5 | 
 6 |     <com.mobileer.oboetester.MultiLineChart
 7 |         style="@style/Widget.AppTheme.MyView"
 8 |         android:layout_width="300dp"
 9 |         android:layout_height="300dp"
10 |         android:paddingLeft="20dp"
11 |         android:paddingBottom="40dp"
12 |         app:exampleDimension="24sp"
13 |         app:exampleDrawable="@android:drawable/ic_menu_add"
14 |         app:exampleString="Hello, MultiLineChart" />
15 | 
16 | </FrameLayout>


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/layout/workload_view.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     android:orientation="vertical"
 4 |     android:layout_width="match_parent"
 5 |     android:layout_height="match_parent">
 6 | 
 7 |     <TextView
 8 |         android:id="@+id/textWorkload"
 9 |         android:layout_width="wrap_content"
10 |         android:layout_height="wrap_content"
11 |         android:text="Workload" />
12 | 
13 |     <SeekBar
14 |         android:id="@+id/faderWorkload"
15 |         android:layout_width="match_parent"
16 |         android:layout_height="wrap_content"
17 |         android:max="1000"
18 |         android:progress="0" />
19 | 
20 | </LinearLayout>
21 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
 1 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 2 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 3 |     <item
 4 |         android:id="@+id/action_share"
 5 |         android:orderInCategory="100"
 6 |         android:title="@string/share"
 7 |         app:showAsAction="never" />
 8 | 
 9 | </menu>
10 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/raw/sine441stereo.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/app/src/main/res/raw/sine441stereo.mp3


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values-w600dp/dimens.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <!-- Example customization of dimensions originally defined in res/values/dimens.xml
3 |          (such as screen margins) for screens with more than 600dp of available width. This
4 |          would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
5 |     <dimen name="activity_horizontal_margin">64dp</dimen>
6 | 
7 |     <dimen name="big_font_size">20dp</dimen>
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/arrays.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/attrs_exponential_slider.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Copyright (C) 2025 The Android Open Source Project
 3 | 
 4 |      Licensed under the Apache License, Version 2.0 (the "License");
 5 |      you may not use this file except in compliance with the License.
 6 |      You may obtain a copy of the License at
 7 | 
 8 |           http://www.apache.org/licenses/LICENSE-2.0
 9 | 
10 |      Unless required by applicable law or agreed to in writing, software
11 |      distributed under the License is distributed on an "AS IS" BASIS,
12 |      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |      See the License for the specific language governing permissions and
14 |      limitations under the License.
15 | -->
16 | 
17 | <resources>
18 |     <declare-styleable name="ExponentialSliderView">
19 |         <attr name="sliderLabel" format="string" />
20 |         <attr name="minValue" format="float" />
21 |         <attr name="maxValue" format="float" />
22 |         <attr name="exponent" format="float" />
23 |         <attr name="defaultValue" format="integer" />
24 |     </declare-styleable>
25 | </resources>
26 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/attrs_fast_button.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <declare-styleable name="FastButton">
3 |         <attr name="fastString" format="string" />
4 |         <attr name="fastDimension" format="dimension" />
5 |         <attr name="fastColor" format="color" />
6 |         <attr name="fastDrawable" format="color|reference" />
7 |     </declare-styleable>
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/attrs_multi_line_chart.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 |     <declare-styleable name="MultiLineChart">
 3 |         <attr name="exampleString" format="string" />
 4 |         <attr name="exampleDimension" format="dimension" />
 5 |         <attr name="exampleColor" format="color" />
 6 |         <attr name="lineColor" format="color" />
 7 |         <attr name="backgroundColor" format="color" />
 8 |         <attr name="exampleDrawable" format="color|reference" />
 9 |     </declare-styleable>
10 | </resources>


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/attrs_waveform.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Copyright (C) 2013 The Android Open Source Project
 3 | 
 4 |      Licensed under the Apache License, Version 2.0 (the "License");
 5 |      you may not use this file except in compliance with the License.
 6 |      You may obtain a copy of the License at
 7 | 
 8 |           http://www.apache.org/licenses/LICENSE-2.0
 9 | 
10 |      Unless required by applicable law or agreed to in writing, software
11 |      distributed under the License is distributed on an "AS IS" BASIS,
12 |      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |      See the License for the specific language governing permissions and
14 |      limitations under the License.
15 | -->
16 | 
17 | <resources>
18 |    <declare-styleable name="WaveformView">
19 |        <attr name="showZero"
20 |            format="boolean" />
21 |    </declare-styleable>
22 | </resources>
23 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 |     <!-- Default screen margins, per the Android Design guidelines. -->
 3 |     <dimen name="activity_horizontal_margin">16dp</dimen>
 4 |     <dimen name="activity_vertical_margin">16dp</dimen>
 5 |     <dimen name="small_horizontal_margin">6dp</dimen>
 6 |     <dimen name="small_vertical_margin">6dp</dimen>
 7 |     <dimen name="waveform_stroke_width">2.0dp</dimen>
 8 | 
 9 |     <dimen name="big_font_size">90dp</dimen>
10 | </resources>
11 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light">
 5 |         <!-- Customize your theme here. -->
 6 |     </style>
 7 | 
 8 |     <style name="Widget.AppTheme.MyView" parent="">
 9 |         <item name="android:background">@color/gray_400</item>
10 |         <item name="exampleColor">@color/light_blue_400</item>
11 |     </style>
12 | 
13 | </resources>
14 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/xml/button_color_selector.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <selector xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <item android:state_pressed="true" android:color="#3f000000"/>
4 |     <item android:state_focused="true" android:color="#0f000000"/>
5 | </selector>
6 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <paths xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <external-path name="external_files" path="."/>
4 | </paths>
5 | 


--------------------------------------------------------------------------------
/apps/OboeTester/app/src/main/res/xml/service_device_info.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!-- Copyright (C) 2015 The Android Open Source Project
 3 |      Licensed under the Apache License, Version 2.0 (the "License");
 4 |      you may not use this file except in compliance with the License.
 5 |      You may obtain a copy of the License at
 6 |           http://www.apache.org/licenses/LICENSE-2.0
 7 |      Unless required by applicable law or agreed to in writing, software
 8 |      distributed under the License is distributed on an "AS IS" BASIS,
 9 |      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10 |      See the License for the specific language governing permissions and
11 |      limitations under the License.
12 | -->
13 | 
14 | <devices>
15 |     <!-- These must match the values in MidiTaptester.java -->
16 |     <device manufacturer="Mobileer" product="MidiTapLatencyTester">
17 |         <input-port name="input" />
18 |     </device>
19 | </devices>
20 | 


--------------------------------------------------------------------------------
/apps/OboeTester/build.gradle:
--------------------------------------------------------------------------------
 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
 2 | 
 3 | buildscript {
 4 |     repositories {
 5 |         google()
 6 |         jcenter()
 7 |     }
 8 |     dependencies {
 9 |         classpath 'com.android.tools.build:gradle:8.5.1'
10 |     }
11 | }
12 | 
13 | allprojects {
14 |     repositories {
15 |         google()
16 |         jcenter()
17 |     }
18 | }
19 | 


--------------------------------------------------------------------------------
/apps/OboeTester/docs/README.md:
--------------------------------------------------------------------------------
 1 | # OboeTester Documentation
 2 | 
 3 | OboeTester is an app that can be used to test many of the features of Oboe, AAudio and OpenSL ES.
 4 | It can also be used to test Android devices, measure latency and glitches, etc.
 5 | 
 6 | OboeTester can be run as an interactive app.
 7 | It can also be run as part of an [automated test using Intents](AutomatedTesting.md)
 8 | 
 9 | ## Install OboeTester
10 | 
11 | You have two options:
12 | 1) Download OboeTester from the [Play Store](https://play.google.com/store/apps/details?id=com.mobileer.oboetester)
13 | 2) OR [build the latest version of OboeTester using Android Studio](Build.md)
14 | 
15 | ## [How to Use OboeTester Interactively](Usage.md)
16 | 
17 | ## [Automated Testing with OboeTester](AutomatedTesting.md)
18 | 
19 | -- [Privacy Policy](PrivacyPolicy.md) --
20 | 


--------------------------------------------------------------------------------
/apps/OboeTester/docs/TestOutput.md:
--------------------------------------------------------------------------------
 1 | # Test Output
 2 | 
 3 | DRAFT for testing image embedding.
 4 | 
 5 | 
 6 | <table style="width:100%">
 7 |   <tr>
 8 |     <th>Notes</th>
 9 |     <th>Screenshot</th> 
10 |   </tr>
11 |   <tr>
12 |     <td>
13 |       Tap on the green bar to hide or show the detailed settings dialog.<br/>
14 |       The resulting setting will displayed on the far right when the stream is opened.<br/>
15 |       API: select between OpenSL ES or AAudio (default)<br/>
16 |       Device: setect output device by type.<br/>
17 |       Format: note that the 24 and 32-bit formats are only supported in Android 12+. MP3 is only supported on Android 16+. The test uses a 44.1kHz stereo MP3 file for playback. The stream must be configured as 44.1kHz stereo selecting MP3 format.<br/>
18 |       MMAP: will be disabled if device does not support MMAP<br/>
19 |       Effect: will enable a simple effect, may prevent LOW_LATENCY<br/>
20 |       Convert: conversion done in Oboe may allow you to get LOW_LATENCY<br/>
21 |       SRC: sample rate conversion quality<br/>
22 |       <br/><br/><br/><br/><br/><br/><br/><br/>
23 |     </td>
24 |     <td><img src="/apps/OboeTester/docs/images/test_output.png" width=400></td>
25 |   </tr>
26 | </table>
27 | 
28 | 
29 | 
30 | 
31 | 


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/auto_glitch_test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/auto_glitch_test.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/echo_input_output.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/echo_input_output.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/main_activity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/main_activity.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/recorder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/recorder.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/round_trip_latency.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/round_trip_latency.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/tap_to_tone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/tap_to_tone.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/test_glitches.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/test_glitches.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/test_input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/test_input.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/test_output.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/test_output.png


--------------------------------------------------------------------------------
/apps/OboeTester/docs/images/test_output_running.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/docs/images/test_output_running.png


--------------------------------------------------------------------------------
/apps/OboeTester/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/OboeTester/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/apps/OboeTester/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Mon Aug 03 13:45:58 PDT 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
7 | 


--------------------------------------------------------------------------------
/apps/OboeTester/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | 


--------------------------------------------------------------------------------
/apps/fxlab/.gitignore:
--------------------------------------------------------------------------------
 1 | *.iml
 2 | .gradle
 3 | /local.properties
 4 | /.idea/caches
 5 | /.idea/libraries
 6 | /.idea/modules.xml
 7 | /.idea/workspace.xml
 8 | /.idea/navEditor.xml
 9 | /.idea/assetWizardSettings.xml
10 | .DS_Store
11 | /build
12 | /captures
13 | .externalNativeBuild
14 | .cxx
15 | 


--------------------------------------------------------------------------------
/apps/fxlab/CONTRIBUTING.md:
--------------------------------------------------------------------------------
 1 | # How to Contribute
 2 | 
 3 | We'd love to accept your patches and contributions to this project. There are
 4 | just a few small guidelines you need to follow.
 5 | 
 6 | ## Code reviews
 7 | 
 8 | All submissions, including submissions by project members, require review. We
 9 | use GitHub pull requests for this purpose. Consult
10 | [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more
11 | information on using pull requests.
12 | 
13 | ## Community Guidelines
14 | 
15 | This project follows [Google's Open Source Community
16 | Guidelines](https://opensource.google.com/conduct/).
17 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/EchoEffect.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #ifndef ANDROID_FXLAB_ECHOEFFECT_H
17 | #define ANDROID_FXLAB_ECHOEFFECT_H
18 | 
19 | #include "DelayLineEffect.h"
20 | #include "utils/WhiteNoise.h"
21 | 
22 | 
23 | template <class iter_type>
24 | class EchoEffect: public DelayLineEffect<iter_type> {
25 | public:
26 |     EchoEffect(float feedback, float delay_ms):
27 |         DelayLineEffect<iter_type> {1, 0, feedback,
28 |             static_cast<int>(delay_ms * SAMPLE_RATE / 1000),
29 |             0,
30 |             std::function<float()>{[](){return 0.0;}}}
31 |     {}
32 | };
33 | #endif //ANDROID_FXLAB_ECHOEFFECT_H
34 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/FlangerEffect.h:
--------------------------------------------------------------------------------
 1 |  /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #ifndef ANDROID_FXLAB_FLANGEREFFECT_H
17 | #define ANDROID_FXLAB_FLANGEREFFECT_H
18 | 
19 | #include "DelayLineEffect.h"
20 | 
21 | template<class iter_type>
22 | class FlangerEffect : public DelayLineEffect<iter_type> {
23 | public:
24 |     // feedback should be 0.7071
25 |     FlangerEffect(float depth_ms, float frequency, float feedback):
26 |         DelayLineEffect<iter_type>(feedback, feedback, feedback, 0, depth_ms * SAMPLE_RATE / 1000,
27 |                 SineWave {frequency, 1, SAMPLE_RATE})  { }
28 | };
29 | #endif //ANDROID_FXLAB_FLANGEREFFECT_H
30 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/SlapbackEffect.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef ANDROID_FXLAB_SLAPBACKEFFECT_H
18 | #define ANDROID_FXLAB_SLAPBACKEFFECT_H
19 | 
20 | template <class iter_type>
21 | class SlapbackEffect: public DelayLineEffect<iter_type> {
22 | public:
23 |     SlapbackEffect(float feedforward, float delay_ms):
24 |         DelayLineEffect<iter_type> {1, feedforward, 0,
25 |             static_cast<int>(delay_ms * SAMPLE_RATE / 1000),
26 |             0,
27 |             std::function<float()>{[](){return 0.0;}}}
28 |     {}
29 | };
30 | #endif //ANDROID_FXLAB_SLAPBACKEFFECT_H
31 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/VibratroEffect.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #ifndef ANDROID_FXLAB_VIBRATROEFFECT_H
17 | #define ANDROID_FXLAB_VIBRATROEFFECT_H
18 | 
19 | #include "DelayLineEffect.h"
20 | template <class iter_type>
21 | class VibratoEffect : public DelayLineEffect<iter_type> {
22 | public:
23 |     VibratoEffect(float depth_ms, float frequency):
24 |         DelayLineEffect<iter_type>(0, 1, 0, 1, depth_ms * SAMPLE_RATE / 1000,
25 |                 SineWave {frequency, 1, SAMPLE_RATE}) { }
26 | };
27 | #endif //ANDROID_FXLAB_VIBRATROEFFECT_H
28 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/descrip/DoublingDescription.h:
--------------------------------------------------------------------------------
 1 | #ifndef ANDROID_FXLAB_DOUBLINGDESCRIPTION_H
 2 | #define ANDROID_FXLAB_DOUBLINGDESCRIPTION_H
 3 | 
 4 | #include "EffectDescription.h"
 5 | #include "../DoublingEffect.h"
 6 | 
 7 | namespace Effect {
 8 | class DoublingDescription: public EffectDescription<DoublingDescription, 3> {
 9 | public:
10 |     static constexpr std::string_view getName() {
11 |         return std::string_view("Doubling");
12 |     }
13 | 
14 |     static constexpr std::string_view getCategory() {
15 |         return std::string_view("Delay");
16 |     }
17 | 
18 |     static constexpr std::array<ParamType, getNumParams()> getParams() {
19 |         return std::array<ParamType, getNumParams()> {
20 |             ParamType("Depth (ms)", 10, 100, 40),
21 |             ParamType("Delay (ms)", 1, 100, 40),
22 |             ParamType("Noise pass", 1, 10, 4),
23 |         };
24 |     }
25 |     template<class iter_type>
26 |     static _ef<iter_type> buildEffect(std::array<float, getNumParams()> paramArr) {
27 |         return _ef<iter_type> {
28 |             DoublingEffect<iter_type>{paramArr[0], paramArr[1], paramArr[2]}
29 |         };
30 |     }
31 | };
32 | } //namespace Effect
33 | #endif //ANDROID_FXLAB_DOUBLINGDESCRIPTION_H
34 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/effects/utils/SineWave.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef ANDROID_FXLAB_SINEWAVE_H
18 | #define ANDROID_FXLAB_SINEWAVE_H
19 | 
20 | #include "PhaseAccumulator.h"
21 | 
22 | class SineWave {
23 | public:
24 |     // freq in hz
25 |     SineWave(float frequency, float amplitude, int sampleRate):
26 |         mPhasor(frequency, sampleRate),
27 |         kAmplitude(amplitude) { }
28 | 
29 |     float operator() () {
30 |         return kAmplitude * sinf(mPhasor.incrementPhase());
31 |     }
32 | 
33 | private:
34 |     PhaseAccumulator mPhasor;
35 |     const float kAmplitude;
36 | };
37 | #endif //ANDROID_FXLAB_SINEWAVE_H
38 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/tests/.gitignore:
--------------------------------------------------------------------------------
1 | CMakeFiles/
2 | CMakeCache.txt
3 | cmake_install.cmake
4 | Makefile
5 | runTests
6 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/tests/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.22.1)
 2 | 
 3 | project(Effects_Tests)
 4 | # We need C++17 to test
 5 | set(CMAKE_CXX_STANDARD 17)
 6 | set(CMAKE_CXX_STANDARD_REQUIRED ON)
 7 | set(CMAKE_CXX_EXTENSIONS OFF)
 8 | 
 9 | # Locate GTest
10 | find_package(GTest REQUIRED)
11 | include_directories(${GTEST_INCLUDE_DIRS})
12 | 
13 | # Link runTests with what we want to test and the GTest and pthread library
14 | add_executable(runTests testEffects.cpp)
15 | target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)
16 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/cpp/tests/testEffects.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | 
18 | #include <gtest/gtest.h>
19 | 
20 | #include "DelayLineTest.h"
21 | #include "DelayLineEffectTest.h"
22 | #include "TypeTests.h"
23 | // This is the runner for the various unit tests in the test directory
24 | // Currently it is designed to be run on the development machine via CMAKE
25 | // Since this tests effects, it should be independent of Android, and simply test locally
26 | int main(int argc, char **argv) {
27 |     ::testing::InitGoogleTest(&argc, argv);
28 |     return RUN_ALL_TESTS();
29 | }
30 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/kotlin/com/mobileer/androidfxlab/datatype/Effect.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.androidfxlab.datatype
18 | 
19 | /**
20 |  * Class which represents an audio effect
21 |  */
22 | data class Effect(val effectDescription: EffectDescription) {
23 |     val name = effectDescription.name
24 |     val paramValues = FloatArray(effectDescription.paramValues.size) {
25 |         i -> effectDescription.paramValues[i].defaultValue
26 |     }
27 |     var enable: Boolean = true
28 | }
29 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/kotlin/com/mobileer/androidfxlab/datatype/EffectDescription.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.androidfxlab.datatype
18 | 
19 | data class EffectDescription(
20 |     val name: String,
21 |     val category: String,
22 |     val id: Int,
23 |     val paramValues: Array<ParamDescription>
24 | ) {
25 |     override fun equals(other: Any?): Boolean {
26 |         if (this === other) return true
27 |         if (javaClass != other?.javaClass) return false
28 |         other as EffectDescription
29 |         if (id != other.id) return false
30 |         return true
31 |     }
32 |     override fun hashCode(): Int = id
33 | }
34 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/kotlin/com/mobileer/androidfxlab/datatype/ParamDescription.kt:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | package com.mobileer.androidfxlab.datatype
18 | 
19 | data class ParamDescription (
20 |     val paramName: String,
21 |     val minValue: Float,
22 |     val maxValue: Float,
23 |     val defaultValue: Float)
24 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/drawable/ic_add.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ Copyright  2019 Google LLC
 3 |   ~
 4 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 5 |   ~ you may not use this file except in compliance with the License.
 6 |   ~ You may obtain a copy of the License at
 7 |   ~
 8 |   ~     https://www.apache.org/licenses/LICENSE-2.0
 9 |   ~
10 |   ~ Unless required by applicable law or agreed to in writing, software
11 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
12 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |   ~ See the License for the specific language governing permissions and
14 |   ~ limitations under the License.
15 |   -->
16 | 
17 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
18 |     android:width="24dp"
19 |     android:height="24dp"
20 |     android:viewportWidth="24"
21 |     android:viewportHeight="24">
22 |   <path
23 |       android:fillColor="#FF000000"
24 |       android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
25 | </vector>
26 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/drawable/ic_baseline_audio_is_disabled_24.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0"
 6 |         android:tint="?attr/colorControlNormal">
 7 |     <path
 8 |         android:fillColor="@android:color/white"
 9 |         android:pathData="M16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v2.21l2.45,2.45c0.03,-0.2 0.05,-0.41 0.05,-0.63zM19,12c0,0.94 -0.2,1.82 -0.54,2.64l1.51,1.51C20.63,14.91 21,13.5 21,12c0,-4.28 -2.99,-7.86 -7,-8.77v2.06c2.89,0.86 5,3.54 5,6.71zM4.27,3L3,4.27 7.73,9L3,9v6h4l5,5v-6.73l4.25,4.25c-0.67,0.52 -1.42,0.93 -2.25,1.18v2.06c1.38,-0.31 2.63,-0.95 3.69,-1.81L19.73,21 21,19.73l-9,-9L4.27,3zM12,4L9.91,6.09 12,8.18L12,4z"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/drawable/ic_baseline_audio_is_enabled_24.xml:
--------------------------------------------------------------------------------
 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android"
 2 |         android:width="24dp"
 3 |         android:height="24dp"
 4 |         android:viewportWidth="24.0"
 5 |         android:viewportHeight="24.0"
 6 |         android:tint="?attr/colorControlNormal">
 7 |     <path
 8 |         android:fillColor="@android:color/white"
 9 |         android:pathData="M3,9v6h4l5,5L12,4L7,9L3,9zM16.5,12c0,-1.77 -1.02,-3.29 -2.5,-4.03v8.05c1.48,-0.73 2.5,-2.25 2.5,-4.02zM14,3.23v2.06c2.89,0.86 5,3.54 5,6.71s-2.11,5.85 -5,6.71v2.06c4.01,-0.91 7,-4.49 7,-8.77s-2.99,-7.86 -7,-8.77z"/>
10 | </vector>
11 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/menu/add_menu.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright  2019 Google LLC
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~     https://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | 
18 | <menu>
19 | </menu>
20 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/menu/toolbar_menu.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto">
 4 | 
 5 |     <!-- Add a mute toggle action to our Toolbar-->
 6 |     <item
 7 |         android:id="@+id/action_toggle_mute"
 8 |         android:icon="@drawable/ic_baseline_audio_is_disabled_24"
 9 |         android:title="@string/action_toggle_mute"
10 |         app:showAsAction="ifRoom"
11 |         />
12 | </menu>
13 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright  2019 Google LLC
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~     https://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | 
18 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
19 |     <background android:drawable="@drawable/ic_launcher_background"/>
20 |     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
21 | </adaptive-icon>


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright  2019 Google LLC
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~     https://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | 
18 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
19 |     <background android:drawable="@drawable/ic_launcher_background"/>
20 |     <foreground android:drawable="@drawable/ic_launcher_foreground"/>
21 | </adaptive-icon>


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright  2019 Google LLC
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~     https://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | 
18 | <resources>
19 |     <color name="colorPrimary">#6200EE</color>
20 |     <color name="colorPrimaryDark">#3700B3</color>
21 |     <color name="colorAccent">#03DAC6</color>
22 |     <color name="colorAccentDark">#018786</color>
23 | </resources>
24 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ Copyright  2019 Google LLC
 3 |   ~
 4 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 5 |   ~ you may not use this file except in compliance with the License.
 6 |   ~ You may obtain a copy of the License at
 7 |   ~
 8 |   ~     https://www.apache.org/licenses/LICENSE-2.0
 9 |   ~
10 |   ~ Unless required by applicable law or agreed to in writing, software
11 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
12 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |   ~ See the License for the specific language governing permissions and
14 |   ~ limitations under the License.
15 |   -->
16 | 
17 | <resources>
18 |     <string name="app_name">AndroidFX Lab</string>
19 |     <string name="action_toggle_mute">Toggle volume</string>
20 | </resources>
21 | 


--------------------------------------------------------------------------------
/apps/fxlab/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <!--
 2 |   ~ Copyright  2019 Google LLC
 3 |   ~
 4 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 5 |   ~ you may not use this file except in compliance with the License.
 6 |   ~ You may obtain a copy of the License at
 7 |   ~
 8 |   ~     https://www.apache.org/licenses/LICENSE-2.0
 9 |   ~
10 |   ~ Unless required by applicable law or agreed to in writing, software
11 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
12 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |   ~ See the License for the specific language governing permissions and
14 |   ~ limitations under the License.
15 |   -->
16 | 
17 | <resources>
18 | 
19 |     <!-- Base application theme. -->
20 |     <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
21 |         <!-- Customize your theme here. -->
22 |         <item name="colorPrimary">@color/colorPrimary</item>
23 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
24 |         <item name="colorAccent">@color/colorAccent</item>
25 |     </style>
26 | 
27 | </resources>
28 | 


--------------------------------------------------------------------------------
/apps/fxlab/docs/Presentation.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/docs/Presentation.pdf


--------------------------------------------------------------------------------
/apps/fxlab/docs/README.md:
--------------------------------------------------------------------------------
1 | # Docs for Android FX Lab
2 | 
3 | * [How to Build the App](Dev-Guide.md)
4 | * [Slides for Internal Architecture (PDF)](Presentation.pdf)
5 | 


--------------------------------------------------------------------------------
/apps/fxlab/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/apps/fxlab/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Mar 11 13:58:39 EDT 2025
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
5 | zipStoreBase=GRADLE_USER_HOME
6 | zipStorePath=wrapper/dists
7 | 


--------------------------------------------------------------------------------
/apps/fxlab/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/apps/fxlab/screenshot.png


--------------------------------------------------------------------------------
/apps/fxlab/settings.gradle:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright  2019 Google LLC
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     https://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | include ':app'
18 | 


--------------------------------------------------------------------------------
/docs/PrivacyPolicy.md:
--------------------------------------------------------------------------------
 1 | [Home](README.md)
 2 | 
 3 | # Oboe Privacy Policy
 4 | 
 5 | Oboe is a library that simply passes audio between the application and the native Android APIs.
 6 | 
 7 | Oboe does not collect any user data or information.
 8 | 
 9 | Oboe does not create Cookies.
10 | 
11 | Oboe is considered "kid safe".
12 | 


--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
 1 | Oboe documentation
 2 | ===
 3 | - [Android Audio History](AndroidAudioHistory.md)
 4 | - [API reference](https://google.github.io/oboe/)
 5 | - [Apps using Oboe](https://github.com/google/oboe/wiki/AppsUsingOboe)
 6 | - [FAQs](FAQ.md)
 7 | - [Full Guide to Oboe](FullGuide.md)
 8 | - [Getting Started with Oboe](GettingStarted.md)
 9 | - [Privacy Policy](PrivacyPolicy.md)
10 | - [Releases](https://github.com/google/oboe/releases)
11 | - [Wiki](https://github.com/google/oboe/wiki)
12 | 


--------------------------------------------------------------------------------
/docs/images/cmakelists-location-in-as.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/docs/images/cmakelists-location-in-as.png


--------------------------------------------------------------------------------
/docs/images/getting-started-video.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/docs/images/getting-started-video.jpg


--------------------------------------------------------------------------------
/docs/images/oboe-lifecycle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/docs/images/oboe-lifecycle.png


--------------------------------------------------------------------------------
/docs/images/oboe-sharing-mode-exclusive.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/docs/images/oboe-sharing-mode-exclusive.jpg


--------------------------------------------------------------------------------
/docs/images/oboe-sharing-mode-shared.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/docs/images/oboe-sharing-mode-shared.jpg


--------------------------------------------------------------------------------
/docs/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: Home
4 | ---
5 | Oboe is an audio library for Android.
6 | 


--------------------------------------------------------------------------------
/prefab/oboe-VERSION.pom:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="UTF-8"?>
 2 | <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
 3 |     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 4 |   <groupId>com.google.oboe</groupId>
 5 |   <artifactId>oboe</artifactId>
 6 |   <version>VERSION</version>
 7 |   <packaging>aar</packaging>
 8 |   <name>oboe</name>
 9 |   <description>The AAR for Oboe.</description>
10 |   <url>https://github.com/google/oboe</url>
11 |   <licenses>
12 |     <license>
13 |       <name>The Oboe License</name>
14 |       <url>https://github.com/google/oboe/blob/main/LICENSE</url>
15 |       <distribution>repo</distribution>
16 |     </license>
17 |   </licenses>
18 |   <developers>
19 |     <developer>
20 |       <name>The Android Open Source Project</name>
21 |     </developer>
22 |   </developers>
23 |   <scm>
24 |     <connection>scm:git:https://github.com/google/oboe</connection>
25 |     <url>https://github.com/google/oboe</url>
26 |   </scm>
27 | </project>
28 | 


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.oboe">
2 | 	<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33"/>
3 | </manifest>
4 | 


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/modules/oboe/libs/android.arm64-v8a/abi.json:
--------------------------------------------------------------------------------
1 | {"abi":"arm64-v8a","api":21,"ndk":21,"stl":"c++_shared"}


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/modules/oboe/libs/android.armeabi-v7a/abi.json:
--------------------------------------------------------------------------------
1 | {"abi":"armeabi-v7a","api":16,"ndk":21,"stl":"c++_shared"}


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/modules/oboe/libs/android.x86/abi.json:
--------------------------------------------------------------------------------
1 | {"abi":"x86","api":16,"ndk":21,"stl":"c++_shared"}


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/modules/oboe/libs/android.x86_64/abi.json:
--------------------------------------------------------------------------------
1 | {"abi":"x86_64","api":21,"ndk":21,"stl":"c++_shared"}


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/modules/oboe/module.json:
--------------------------------------------------------------------------------
1 | {
2 |     "export_libraries": [],
3 |     "library_name": null,
4 |     "android": {
5 |       "export_libraries": [],
6 |       "library_name": null
7 |     }
8 | }


--------------------------------------------------------------------------------
/prefab/oboe-VERSION/prefab/prefab.json:
--------------------------------------------------------------------------------
1 | {
2 |     "schema_version": 1,
3 |     "name": "oboe",
4 |     "version": "VERSION",
5 |     "dependencies": []
6 | }
7 | 


--------------------------------------------------------------------------------
/samples/.gitignore:
--------------------------------------------------------------------------------
 1 | *.iml
 2 | .gradle
 3 | /local.properties
 4 | /.idea/workspace.xml
 5 | /.idea/libraries
 6 | .DS_Store
 7 | /build
 8 | /captures
 9 | .externalNativeBuild
10 | test/build
11 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/LiveEffect/screenshot.png


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/LiveEffect/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/LiveEffect/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/LiveEffect/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/LiveEffect/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <style name="AppTheme" parent="android:Theme.Material.Light">
4 |     </style>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <!-- Example customization of dimensions originally defined in res/values/dimens.xml
3 |          (such as screen margins) for screens with more than 820dp of available width. This
4 |          would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
5 |     <dimen name="activity_horizontal_margin">64dp</dimen>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <color name="colorBlue">#4444CC</color>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <!-- Default screen margins, per the Android Design guidelines. -->
3 |     <dimen name="activity_horizontal_margin">16dp</dimen>
4 |     <dimen name="activity_vertical_margin">16dp</dimen>
5 |     <dimen name="activity_vertical_group_margin">32dp</dimen>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 |     <string name="app_name">LiveEffect</string>
 3 |     <string name="action_settings">Settings</string>
 4 |     <string name="start_effect">Start</string>
 5 |     <string name="stop_effect">Stop</string>
 6 |     <string name="need_record_audio_permission">"This sample needs RECORD_AUDIO permission"</string>
 7 |     <string name="status_playing">Engine Playing ....</string>
 8 |     <string name="status_open_failed">Engine Failed to Open Streams!</string>
 9 |     <string name="status_record_audio_denied">Error: Permission for RECORD_AUDIO was denied</string>
10 |     <string name="status_touch_to_begin">RECORD_AUDIO permission granted, touch START to begin</string>
11 |     <string name="status_warning">Warning: If you run this sample using the built-in microphone
12 |         and speaker you may create a feedback loop which will not be pleasant to listen to.</string>
13 |     <string name="recording_device">Recording device</string>
14 |     <string name="playback_device">Playback device</string>
15 | 
16 |     <string name="apiSelection">APIs</string>
17 |     <string name="aaudio">AAudio</string>
18 |     <string name="sles">OpenSL ES</string>
19 | </resources>
20 | 


--------------------------------------------------------------------------------
/samples/LiveEffect/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 | 
3 |     <!-- Base application theme. -->
4 |     <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
5 |         <!-- Customize your theme here. -->
6 |     </style>
7 | 
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/megadrone-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/megadrone-screenshot.png


--------------------------------------------------------------------------------
/samples/MegaDrone/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <application
 5 |         android:allowBackup="true"
 6 |         android:icon="@mipmap/ic_launcher"
 7 |         android:label="@string/app_name"
 8 |         android:roundIcon="@mipmap/ic_launcher_round"
 9 |         android:supportsRtl="true"
10 |         android:theme="@style/AppTheme">
11 |         <activity android:name="com.google.oboe.samples.megadrone.MainActivity"
12 |             android:screenOrientation="portrait"
13 |             android:exported="true">
14 |             <intent-filter>
15 |                 <action android:name="android.intent.action.MAIN" />
16 | 
17 |                 <category android:name="android.intent.category.LAUNCHER" />
18 |             </intent-filter>
19 |         </activity>
20 |     </application>
21 | 
22 | </manifest>
23 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/cpp/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.22.1)
 2 | 
 3 | 
 4 | ### INCLUDE OBOE LIBRARY ###
 5 | 
 6 | # Set the path to the Oboe library directory
 7 | set (OBOE_DIR ../../../../..)
 8 | 
 9 | # Add the Oboe library as a subproject. Since Oboe is an out-of-tree source library we must also
10 | # specify a binary directory
11 | add_subdirectory(${OBOE_DIR} ./oboe-bin)
12 | 
13 | # Include the Oboe headers
14 | include_directories(${OBOE_DIR}/include ${OBOE_DIR}/samples/shared ${OBOE_DIR}/samples/debug-utils)
15 | 
16 | 
17 | ### END OBOE INCLUDE SECTION ###
18 | 
19 | add_library( megadrone SHARED
20 |         native-lib.cpp
21 |         MegaDroneEngine.cpp
22 |         )
23 | 
24 | target_link_libraries(megadrone log oboe )
25 | target_link_options(megadrone PRIVATE "-Wl,-z,max-page-size=16384")
26 | 
27 | # Enable optimization flags: if having problems with source level debugging,
28 | # disable -Ofast ( and debug ), re-enable it after done debugging.
29 | target_compile_options(megadrone PRIVATE -Wall -Werror -Ofast)
30 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools"
 5 |     android:layout_width="match_parent"
 6 |     android:layout_height="match_parent"
 7 |     tools:context=".MainActivity">
 8 | 
 9 |     <TextView
10 |         android:id="@+id/sample_text"
11 |         android:layout_width="wrap_content"
12 |         android:layout_height="wrap_content"
13 |         android:text="Tap anywhere to play"
14 |         app:layout_constraintBottom_toBottomOf="parent"
15 |         app:layout_constraintLeft_toLeftOf="parent"
16 |         app:layout_constraintRight_toRightOf="parent"
17 |         app:layout_constraintTop_toTopOf="parent" />
18 | 
19 | </androidx.constraintlayout.widget.ConstraintLayout>
20 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/MegaDrone/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorPrimary">#008577</color>
4 |     <color name="colorPrimaryDark">#00574B</color>
5 |     <color name="colorAccent">#D81B60</color>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">Mega Drone</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/MegaDrone/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="colorPrimary">@color/colorPrimary</item>
 7 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8 |         <item name="colorAccent">@color/colorAccent</item>
 9 |     </style>
10 | 
11 | </resources>
12 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/images/1-timeline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/1-timeline.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/2-architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/2-architecture.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/3-audioData.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/3-audioData.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/4-audio-rendering.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/4-audio-rendering.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/5-lockfreequeue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/5-lockfreequeue.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/6-audio-ui-sync.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/6-audio-ui-sync.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/7-tap-window.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/7-tap-window.png


--------------------------------------------------------------------------------
/samples/RhythmGame/images/RhythmGame-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/images/RhythmGame-screenshot.png


--------------------------------------------------------------------------------
/samples/RhythmGame/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <application
 5 |         android:allowBackup="true"
 6 |         android:icon="@mipmap/ic_launcher"
 7 |         android:label="@string/app_name"
 8 |         android:roundIcon="@mipmap/ic_launcher_round"
 9 |         android:supportsRtl="true"
10 |         android:theme="@style/AppTheme">
11 |         <activity android:name=".MainActivity"
12 |             android:screenOrientation="portrait"
13 |             android:exported="true">
14 |             <intent-filter>
15 |                 <action android:name="android.intent.action.MAIN" />
16 | 
17 |                 <category android:name="android.intent.category.LAUNCHER" />
18 |             </intent-filter>
19 |         </activity>
20 |     </application>
21 | 
22 | </manifest>
23 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/assets/CLAP.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/assets/CLAP.mp3


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/assets/FUNKY_HOUSE.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/assets/FUNKY_HOUSE.mp3


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/cpp/audio/DataSource.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef RHYTHMGAME_AUDIOSOURCE_H
18 | #define RHYTHMGAME_AUDIOSOURCE_H
19 | 
20 | #include <cstdint>
21 | #include <GameConstants.h>
22 | 
23 | class DataSource {
24 | public:
25 |     virtual ~DataSource(){};
26 |     virtual int64_t getSize() const = 0;
27 |     virtual AudioProperties getProperties() const  = 0;
28 |     virtual const float* getData() const = 0;
29 | };
30 | 
31 | 
32 | #endif //RHYTHMGAME_AUDIOSOURCE_H
33 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/cpp/audio/NDKExtractor.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef FFMPEG_NDKMEDIAEXTRACTOR_H
18 | #define FFMPEG_NDKMEDIAEXTRACTOR_H
19 | 
20 | 
21 | #include <cstdint>
22 | #include <android/asset_manager.h>
23 | #include <GameConstants.h>
24 | 
25 | 
26 | class NDKExtractor {
27 | 
28 | public:
29 |     static int32_t decode(AAsset *asset, uint8_t *targetData, AudioProperties targetProperties);
30 | };
31 | 
32 | 
33 | #endif //FFMPEG_NDKMEDIAEXTRACTOR_H
34 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/cpp/ui/OpenGLFunctions.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *     http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include "OpenGLFunctions.h"
18 | #include "utils/logging.h"
19 | 
20 | void CheckOpenGLError(const char* stmt, const char* fname, int line)
21 | {
22 |   GLenum err = glGetError();
23 |   if (err != GL_NO_ERROR)
24 |   {
25 |     LOGW("OpenGL error %08x, at %s:%i - for %s\n", err, fname, line, stmt);
26 |     assert(false);
27 |   }
28 | }
29 | 
30 | void SetGLScreenColor(ScreenColor color){
31 |   glClearColor(color.red, color.green, color.blue, color.alpha);
32 |   glClear(GL_COLOR_BUFFER_BIT);
33 | }
34 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorPrimary">#3F51B5</color>
4 |     <color name="colorPrimaryDark">#303F9F</color>
5 |     <color name="colorAccent">#FF4081</color>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">RhythmGame</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="colorPrimary">@color/colorPrimary</item>
 7 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8 |         <item name="colorAccent">@color/colorAccent</item>
 9 |     </style>
10 | 
11 | </resources>
12 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/test/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.22.1)
 2 | 
 3 | set(GOOGLETEST_ROOT ${ANDROID_NDK}/sources/third_party/googletest/googletest)
 4 | add_library(gtest STATIC ${GOOGLETEST_ROOT}/src/gtest_main.cc ${GOOGLETEST_ROOT}/src/gtest-all.cc)
 5 | target_include_directories(gtest PRIVATE ${GOOGLETEST_ROOT})
 6 | target_include_directories(gtest PUBLIC ${GOOGLETEST_ROOT}/include)
 7 | 
 8 | include_directories(../src/main/cpp/)
 9 | 
10 | # Build our test binary
11 | add_executable (testRhythmGame testLockFreeQueue.cpp)
12 | target_link_libraries(testRhythmGame  gtest)
13 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/common.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/common.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_common.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/_fixes.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref core
 2 | /// @file glm/detail/_fixes.hpp
 3 | 
 4 | #include <cmath>
 5 | 
 6 | //! Workaround for compatibility with other libraries
 7 | #ifdef max
 8 | #undef max
 9 | #endif
10 | 
11 | //! Workaround for compatibility with other libraries
12 | #ifdef min
13 | #undef min
14 | #endif
15 | 
16 | //! Workaround for Android
17 | #ifdef isnan
18 | #undef isnan
19 | #endif
20 | 
21 | //! Workaround for Android
22 | #ifdef isinf
23 | #undef isinf
24 | #endif
25 | 
26 | //! Workaround for Chrone Native Client
27 | #ifdef log2
28 | #undef log2
29 | #endif
30 | 
31 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/func_exponential_simd.inl:
--------------------------------------------------------------------------------
 1 | /// @ref core
 2 | /// @file glm/detail/func_exponential_simd.inl
 3 | 
 4 | #include "../simd/exponential.h"
 5 | 
 6 | #if GLM_ARCH & GLM_ARCH_SSE2_BIT
 7 | 
 8 | namespace glm{
 9 | namespace detail
10 | {
11 | 	template <precision P>
12 | 	struct compute_sqrt<tvec4, float, P, true>
13 | 	{
14 | 		GLM_FUNC_QUALIFIER static tvec4<float, P> call(tvec4<float, P> const & v)
15 | 		{
16 | 			tvec4<float, P> result(uninitialize);
17 | 			result.data = _mm_sqrt_ps(v.data);
18 | 			return result;
19 | 		}
20 | 	};
21 | 
22 | 	template <>
23 | 	struct compute_sqrt<tvec4, float, aligned_lowp, true>
24 | 	{
25 | 		GLM_FUNC_QUALIFIER static tvec4<float, aligned_lowp> call(tvec4<float, aligned_lowp> const & v)
26 | 		{
27 | 			tvec4<float, aligned_lowp> result(uninitialize);
28 | 			result.data = glm_vec4_sqrt_lowp(v.data);
29 | 			return result;
30 | 		}
31 | 	};
32 | }//namespace detail
33 | }//namespace glm
34 | 
35 | #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
36 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/func_packing_simd.inl:
--------------------------------------------------------------------------------
 1 | /// @ref core
 2 | /// @file glm/detail/func_packing_simd.inl
 3 | 
 4 | namespace glm{
 5 | namespace detail
 6 | {
 7 | 
 8 | }//namespace detail
 9 | }//namespace glm
10 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/func_trigonometric_simd.inl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/third_party/glm/detail/func_trigonometric_simd.inl


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/func_vector_relational_simd.inl:
--------------------------------------------------------------------------------
 1 | /// @ref core
 2 | /// @file glm/detail/func_vector_relational_simd.inl
 3 | 
 4 | namespace glm{
 5 | namespace detail
 6 | {
 7 | 
 8 | }//namespace detail
 9 | }//namespace glm
10 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/type_half.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref core
 2 | /// @file glm/detail/type_half.hpp
 3 | 
 4 | #pragma once
 5 | 
 6 | #include "setup.hpp"
 7 | 
 8 | namespace glm{
 9 | namespace detail
10 | {
11 | 	typedef short hdata;
12 | 
13 | 	GLM_FUNC_DECL float toFloat32(hdata value);
14 | 	GLM_FUNC_DECL hdata toFloat16(float const & value);
15 | 
16 | }//namespace detail
17 | }//namespace glm
18 | 
19 | #include "type_half.inl"
20 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/type_mat.inl:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/detail/type_mat.inl
3 | 
4 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/type_mat4x4_simd.inl:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/detail/type_mat4x4_sse2.inl
3 | 
4 | namespace glm
5 | {
6 | 
7 | }//namespace glm
8 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/detail/type_vec.inl:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/detail/type_vec.inl
3 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/exponential.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/exponential.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_exponential.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/geometric.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/geometric.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_geometric.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtc/functions.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtc_functions
 2 | /// @file glm/gtc/functions.inl
 3 | 
 4 | #include "../detail/func_exponential.hpp"
 5 | 
 6 | namespace glm
 7 | {
 8 | 	template <typename T>
 9 | 	GLM_FUNC_QUALIFIER T gauss
10 | 	(
11 | 		T x,
12 | 		T ExpectedValue,
13 | 		T StandardDeviation
14 | 	)
15 | 	{
16 | 		return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast<T>(6.28318530717958647692528676655900576)));
17 | 	}
18 | 
19 | 	template <typename T, precision P>
20 | 	GLM_FUNC_QUALIFIER T gauss
21 | 	(
22 | 		tvec2<T, P> const& Coord,
23 | 		tvec2<T, P> const& ExpectedValue,
24 | 		tvec2<T, P> const& StandardDeviation
25 | 	)
26 | 	{
27 | 		tvec2<T, P> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast<T>(2) * StandardDeviation * StandardDeviation);
28 | 		return exp(-(Squared.x + Squared.y));
29 | 	}
30 | }//namespace glm
31 | 
32 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtc/type_precision.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtc_swizzle
2 | /// @file glm/gtc/swizzle.inl
3 | 
4 | namespace glm
5 | {
6 | 
7 | }
8 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtc/vec1.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtc_vec1
2 | /// @file glm/gtc/vec1.inl
3 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/extend.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_extend
 2 | /// @file glm/gtx/extend.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_extend GLM_GTX_extend
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Extend a position from a source to a position at a defined length.
10 | ///
11 | /// <glm/gtx/extend.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependency:
16 | #include "../glm.hpp"
17 | 
18 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
19 | #	pragma message("GLM: GLM_GTX_extend extension included")
20 | #endif
21 | 
22 | namespace glm
23 | {
24 | 	/// @addtogroup gtx_extend
25 | 	/// @{
26 | 
27 | 	/// Extends of Length the Origin position using the (Source - Origin) direction.
28 | 	/// @see gtx_extend
29 | 	template <typename genType> 
30 | 	GLM_FUNC_DECL genType extend(
31 | 		genType const & Origin, 
32 | 		genType const & Source, 
33 | 		typename genType::value_type const Length);
34 | 
35 | 	/// @}
36 | }//namespace glm
37 | 
38 | #include "extend.inl"
39 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/extend.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_extend
 2 | /// @file glm/gtx/extend.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename genType>
 7 | 	GLM_FUNC_QUALIFIER genType extend
 8 | 	(
 9 | 		genType const & Origin, 
10 | 		genType const & Source, 
11 | 		genType const & Distance
12 | 	)
13 | 	{
14 | 		return Origin + (Source - Origin) * Distance;
15 | 	}
16 | 
17 | 	template <typename T, precision P>
18 | 	GLM_FUNC_QUALIFIER tvec2<T, P> extend
19 | 	(
20 | 		tvec2<T, P> const & Origin,
21 | 		tvec2<T, P> const & Source,
22 | 		T const & Distance
23 | 	)
24 | 	{
25 | 		return Origin + (Source - Origin) * Distance;
26 | 	}
27 | 
28 | 	template <typename T, precision P>
29 | 	GLM_FUNC_QUALIFIER tvec3<T, P> extend
30 | 	(
31 | 		tvec3<T, P> const & Origin,
32 | 		tvec3<T, P> const & Source,
33 | 		T const & Distance
34 | 	)
35 | 	{
36 | 		return Origin + (Source - Origin) * Distance;
37 | 	}
38 | 
39 | 	template <typename T, precision P>
40 | 	GLM_FUNC_QUALIFIER tvec4<T, P> extend
41 | 	(
42 | 		tvec4<T, P> const & Origin,
43 | 		tvec4<T, P> const & Source,
44 | 		T const & Distance
45 | 	)
46 | 	{
47 | 		return Origin + (Source - Origin) * Distance;
48 | 	}
49 | }//namespace glm
50 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/float_notmalize.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_float_normalize
 2 | /// @file glm/gtx/float_normalize.inl
 3 | 
 4 | #include <limits>
 5 | 
 6 | namespace glm
 7 | {
 8 | 	template <typename T, precision P, template <typename, precision> class vecType>
 9 | 	GLM_FUNC_QUALIFIER vecType<float, P> floatNormalize(vecType<T, P> const & v)
10 | 	{
11 | 		return vecType<float, P>(v) / static_cast<float>(std::numeric_limits<T>::max());
12 | 	}
13 | 
14 | }//namespace glm
15 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/gradient_paint.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_gradient_paint
 2 | /// @file glm/gtx/gradient_paint.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER T radialGradient
 8 | 	(
 9 | 		tvec2<T, P> const & Center,
10 | 		T const & Radius,
11 | 		tvec2<T, P> const & Focal,
12 | 		tvec2<T, P> const & Position
13 | 	)
14 | 	{
15 | 		tvec2<T, P> F = Focal - Center;
16 | 		tvec2<T, P> D = Position - Focal;
17 | 		T Radius2 = pow2(Radius);
18 | 		T Fx2 = pow2(F.x);
19 | 		T Fy2 = pow2(F.y);
20 | 
21 | 		T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x));
22 | 		T Denominator = Radius2 - (Fx2 + Fy2);
23 | 		return Numerator / Denominator;
24 | 	}
25 | 
26 | 	template <typename T, precision P>
27 | 	GLM_FUNC_QUALIFIER T linearGradient
28 | 	(
29 | 		tvec2<T, P> const & Point0,
30 | 		tvec2<T, P> const & Point1,
31 | 		tvec2<T, P> const & Position
32 | 	)
33 | 	{
34 | 		tvec2<T, P> Dist = Point1 - Point0;
35 | 		return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist);
36 | 	}
37 | }//namespace glm
38 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/handed_coordinate_space.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_handed_coordinate_space
 2 | /// @file glm/gtx/handed_coordinate_space.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER bool rightHanded
 8 | 	(
 9 | 		tvec3<T, P> const & tangent,
10 | 		tvec3<T, P> const & binormal,
11 | 		tvec3<T, P> const & normal
12 | 	)
13 | 	{
14 | 		return dot(cross(normal, tangent), binormal) > T(0);
15 | 	}
16 | 
17 | 	template <typename T, precision P>
18 | 	GLM_FUNC_QUALIFIER bool leftHanded
19 | 	(
20 | 		tvec3<T, P> const & tangent,
21 | 		tvec3<T, P> const & binormal,
22 | 		tvec3<T, P> const & normal
23 | 	)
24 | 	{
25 | 		return dot(cross(normal, tangent), binormal) < T(0);
26 | 	}
27 | }//namespace glm
28 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/log_base.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_log_base
 2 | /// @file glm/gtx/log_base.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_log_base GLM_GTX_log_base
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Logarithm for any base. base can be a vector or a scalar.
10 | ///
11 | /// <glm/gtx/log_base.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependency:
16 | #include "../glm.hpp"
17 | 
18 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
19 | #	pragma message("GLM: GLM_GTX_log_base extension included")
20 | #endif
21 | 
22 | namespace glm
23 | {
24 | 	/// @addtogroup gtx_log_base
25 | 	/// @{
26 | 
27 | 	/// Logarithm for any base.
28 | 	/// From GLM_GTX_log_base.
29 | 	template <typename genType>
30 | 	GLM_FUNC_DECL genType log(
31 | 		genType const & x,
32 | 		genType const & base);
33 | 
34 | 	/// Logarithm for any base.
35 | 	/// From GLM_GTX_log_base.
36 | 	template <typename T, precision P, template <typename, precision> class vecType>
37 | 	GLM_FUNC_DECL vecType<T, P> sign(
38 | 		vecType<T, P> const & x,
39 | 		vecType<T, P> const & base);
40 | 
41 | 	/// @}
42 | }//namespace glm
43 | 
44 | #include "log_base.inl"
45 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/log_base.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_log_base
 2 | /// @file glm/gtx/log_base.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename genType> 
 7 | 	GLM_FUNC_QUALIFIER genType log(genType const & x, genType const & base)
 8 | 	{
 9 | 		assert(x != genType(0));
10 | 		return glm::log(x) / glm::log(base);
11 | 	}
12 | 
13 | 	template <typename T, precision P, template <typename, precision> class vecType>
14 | 	GLM_FUNC_QUALIFIER vecType<T, P> log(vecType<T, P> const & x, vecType<T, P> const & base)
15 | 	{
16 | 		return glm::log(x) / glm::log(base);
17 | 	}
18 | }//namespace glm
19 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/matrix_cross_product.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_matrix_cross_product
 2 | /// @file glm/gtx/matrix_cross_product.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER tmat3x3<T, P> matrixCross3
 8 | 	(
 9 | 		tvec3<T, P> const & x
10 | 	)
11 | 	{
12 | 		tmat3x3<T, P> Result(T(0));
13 | 		Result[0][1] = x.z;
14 | 		Result[1][0] = -x.z;
15 | 		Result[0][2] = -x.y;
16 | 		Result[2][0] = x.y;
17 | 		Result[1][2] = x.x;
18 | 		Result[2][1] = -x.x;
19 | 		return Result;
20 | 	}
21 | 
22 | 	template <typename T, precision P>
23 | 	GLM_FUNC_QUALIFIER tmat4x4<T, P> matrixCross4
24 | 	(
25 | 		tvec3<T, P> const & x
26 | 	)
27 | 	{
28 | 		tmat4x4<T, P> Result(T(0));
29 | 		Result[0][1] = x.z;
30 | 		Result[1][0] = -x.z;
31 | 		Result[0][2] = -x.y;
32 | 		Result[2][0] = x.y;
33 | 		Result[1][2] = x.x;
34 | 		Result[2][1] = -x.x;
35 | 		return Result;
36 | 	}
37 | 
38 | }//namespace glm
39 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/mixed_product.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_mixed_product
 2 | /// @file glm/gtx/mixed_product.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_mixed_product GLM_GTX_mixed_producte
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Mixed product of 3 vectors.
10 | ///
11 | /// <glm/gtx/mixed_product.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependency:
16 | #include "../glm.hpp"
17 | 
18 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
19 | #	pragma message("GLM: GLM_GTX_mixed_product extension included")
20 | #endif
21 | 
22 | namespace glm
23 | {
24 | 	/// @addtogroup gtx_mixed_product
25 | 	/// @{
26 | 
27 | 	/// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension)
28 | 	template <typename T, precision P> 
29 | 	GLM_FUNC_DECL T mixedProduct(
30 | 		tvec3<T, P> const & v1, 
31 | 		tvec3<T, P> const & v2, 
32 | 		tvec3<T, P> const & v3);
33 | 
34 | 	/// @}
35 | }// namespace glm
36 | 
37 | #include "mixed_product.inl"
38 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/mixed_product.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_mixed_product
 2 | /// @file glm/gtx/mixed_product.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER T mixedProduct
 8 | 	(
 9 | 		tvec3<T, P> const & v1,
10 | 		tvec3<T, P> const & v2,
11 | 		tvec3<T, P> const & v3
12 | 	)
13 | 	{
14 | 		return dot(cross(v1, v2), v3);
15 | 	}
16 | }//namespace glm
17 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/normal.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_normal
 2 | /// @file glm/gtx/normal.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | /// @see gtx_extented_min_max (dependence)
 6 | ///
 7 | /// @defgroup gtx_normal GLM_GTX_normal
 8 | /// @ingroup gtx
 9 | ///
10 | /// @brief Compute the normal of a triangle.
11 | ///
12 | /// <glm/gtx/normal.hpp> need to be included to use these functionalities.
13 | 
14 | #pragma once
15 | 
16 | // Dependency:
17 | #include "../glm.hpp"
18 | 
19 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
20 | #	pragma message("GLM: GLM_GTX_normal extension included")
21 | #endif
22 | 
23 | namespace glm
24 | {
25 | 	/// @addtogroup gtx_normal
26 | 	/// @{
27 | 
28 | 	//! Computes triangle normal from triangle points. 
29 | 	//! From GLM_GTX_normal extension.
30 | 	template <typename T, precision P> 
31 | 	GLM_FUNC_DECL tvec3<T, P> triangleNormal(
32 | 		tvec3<T, P> const & p1, 
33 | 		tvec3<T, P> const & p2, 
34 | 		tvec3<T, P> const & p3);
35 | 
36 | 	/// @}
37 | }//namespace glm
38 | 
39 | #include "normal.inl"
40 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/normal.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_normal
 2 | /// @file glm/gtx/normal.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P> 
 7 | 	GLM_FUNC_QUALIFIER tvec3<T, P> triangleNormal
 8 | 	(
 9 | 		tvec3<T, P> const & p1, 
10 | 		tvec3<T, P> const & p2, 
11 | 		tvec3<T, P> const & p3
12 | 	)
13 | 	{
14 | 		return normalize(cross(p1 - p2, p1 - p3));
15 | 	}
16 | }//namespace glm
17 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/normalize_dot.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_normalize_dot
 2 | /// @file glm/gtx/normalize_dot.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P, template <typename, precision> class vecType>
 7 | 	GLM_FUNC_QUALIFIER T normalizeDot(vecType<T, P> const & x, vecType<T, P> const & y)
 8 | 	{
 9 | 		return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y));
10 | 	}
11 | 
12 | 	template <typename T, precision P, template <typename, precision> class vecType>
13 | 	GLM_FUNC_QUALIFIER T fastNormalizeDot(vecType<T, P> const & x, vecType<T, P> const & y)
14 | 	{
15 | 		return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y));
16 | 	}
17 | }//namespace glm
18 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/number_precision.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtx_number_precision
2 | /// @file glm/gtx/number_precision.inl
3 | 
4 | namespace glm
5 | {
6 | 
7 | }
8 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/optimum_pow.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_optimum_pow
 2 | /// @file glm/gtx/optimum_pow.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename genType>
 7 | 	GLM_FUNC_QUALIFIER genType pow2(genType const & x)
 8 | 	{
 9 | 		return x * x;
10 | 	}
11 | 
12 | 	template <typename genType>
13 | 	GLM_FUNC_QUALIFIER genType pow3(genType const & x)
14 | 	{
15 | 		return x * x * x;
16 | 	}
17 | 
18 | 	template <typename genType>
19 | 	GLM_FUNC_QUALIFIER genType pow4(genType const & x)
20 | 	{
21 | 		return (x * x) * (x * x);
22 | 	}
23 | }//namespace glm
24 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/orthonormalize.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_orthonormalize
 2 | /// @file glm/gtx/orthonormalize.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER tmat3x3<T, P> orthonormalize(tmat3x3<T, P> const & m)
 8 | 	{
 9 | 		tmat3x3<T, P> r = m;
10 | 
11 | 		r[0] = normalize(r[0]);
12 | 
13 | 		T d0 = dot(r[0], r[1]);
14 | 		r[1] -= r[0] * d0;
15 | 		r[1] = normalize(r[1]);
16 | 
17 | 		T d1 = dot(r[1], r[2]);
18 | 		d0 = dot(r[0], r[2]);
19 | 		r[2] -= r[0] * d0 + r[1] * d1;
20 | 		r[2] = normalize(r[2]);
21 | 
22 | 		return r;
23 | 	}
24 | 
25 | 	template <typename T, precision P> 
26 | 	GLM_FUNC_QUALIFIER tvec3<T, P> orthonormalize(tvec3<T, P> const & x, tvec3<T, P> const & y)
27 | 	{
28 | 		return normalize(x - y * dot(y, x));
29 | 	}
30 | }//namespace glm
31 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/perpendicular.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_perpendicular
 2 | /// @file glm/gtx/perpendicular.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | /// @see gtx_projection (dependence)
 6 | ///
 7 | /// @defgroup gtx_perpendicular GLM_GTX_perpendicular
 8 | /// @ingroup gtx
 9 | ///
10 | /// @brief Perpendicular of a vector from other one
11 | ///
12 | /// <glm/gtx/perpendicular.hpp> need to be included to use these functionalities.
13 | 
14 | #pragma once
15 | 
16 | // Dependency:
17 | #include "../glm.hpp"
18 | #include "../gtx/projection.hpp"
19 | 
20 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
21 | #	pragma message("GLM: GLM_GTX_perpendicular extension included")
22 | #endif
23 | 
24 | namespace glm
25 | {
26 | 	/// @addtogroup gtx_perpendicular
27 | 	/// @{
28 | 
29 | 	//! Projects x a perpendicular axis of Normal.
30 | 	//! From GLM_GTX_perpendicular extension.
31 | 	template <typename vecType> 
32 | 	GLM_FUNC_DECL vecType perp(
33 | 		vecType const & x, 
34 | 		vecType const & Normal);
35 | 
36 | 	/// @}
37 | }//namespace glm
38 | 
39 | #include "perpendicular.inl"
40 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/perpendicular.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_perpendicular
 2 | /// @file glm/gtx/perpendicular.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename vecType> 
 7 | 	GLM_FUNC_QUALIFIER vecType perp
 8 | 	(
 9 | 		vecType const & x, 
10 | 		vecType const & Normal
11 | 	)
12 | 	{
13 | 		return x - proj(x, Normal);
14 | 	}
15 | }//namespace glm
16 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/polar_coordinates.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_polar_coordinates
 2 | /// @file glm/gtx/polar_coordinates.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER tvec3<T, P> polar
 8 | 	(
 9 | 		tvec3<T, P> const & euclidean
10 | 	)
11 | 	{
12 | 		T const Length(length(euclidean));
13 | 		tvec3<T, P> const tmp(euclidean / Length);
14 | 		T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z));
15 | 
16 | 		return tvec3<T, P>(
17 | 			asin(tmp.y),	// latitude
18 | 			atan(tmp.x, tmp.z),		// longitude
19 | 			xz_dist);				// xz distance
20 | 	}
21 | 
22 | 	template <typename T, precision P>
23 | 	GLM_FUNC_QUALIFIER tvec3<T, P> euclidean
24 | 	(
25 | 		tvec2<T, P> const & polar
26 | 	)
27 | 	{
28 | 		T const latitude(polar.x);
29 | 		T const longitude(polar.y);
30 | 
31 | 		return tvec3<T, P>(
32 | 			cos(latitude) * sin(longitude),
33 | 			sin(latitude),
34 | 			cos(latitude) * cos(longitude));
35 | 	}
36 | 
37 | }//namespace glm
38 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/projection.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_projection
 2 | /// @file glm/gtx/projection.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_projection GLM_GTX_projection
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Projection of a vector to other one
10 | ///
11 | /// <glm/gtx/projection.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependency:
16 | #include "../geometric.hpp"
17 | 
18 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
19 | #	pragma message("GLM: GLM_GTX_projection extension included")
20 | #endif
21 | 
22 | namespace glm
23 | {
24 | 	/// @addtogroup gtx_projection
25 | 	/// @{
26 | 
27 | 	/// Projects x on Normal.
28 | 	///
29 | 	/// @see gtx_projection
30 | 	template <typename vecType>
31 | 	GLM_FUNC_DECL vecType proj(vecType const & x, vecType const & Normal);
32 | 
33 | 	/// @}
34 | }//namespace glm
35 | 
36 | #include "projection.inl"
37 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/projection.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_projection
 2 | /// @file glm/gtx/projection.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename vecType>
 7 | 	GLM_FUNC_QUALIFIER vecType proj(vecType const & x, vecType const & Normal)
 8 | 	{
 9 | 		return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal;
10 | 	}
11 | }//namespace glm
12 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/raw_data.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_raw_data
 2 | /// @file glm/gtx/raw_data.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_raw_data GLM_GTX_raw_data
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Projection of a vector to other one
10 | ///
11 | /// <glm/gtx/raw_data.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependencies
16 | #include "../detail/setup.hpp"
17 | #include "../detail/type_int.hpp"
18 | 
19 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
20 | #	pragma message("GLM: GLM_GTX_raw_data extension included")
21 | #endif
22 | 
23 | namespace glm
24 | {
25 | 	/// @addtogroup gtx_raw_data
26 | 	/// @{
27 | 
28 | 	//! Type for byte numbers. 
29 | 	//! From GLM_GTX_raw_data extension.
30 | 	typedef detail::uint8		byte;
31 | 
32 | 	//! Type for word numbers. 
33 | 	//! From GLM_GTX_raw_data extension.
34 | 	typedef detail::uint16		word;
35 | 
36 | 	//! Type for dword numbers. 
37 | 	//! From GLM_GTX_raw_data extension.
38 | 	typedef detail::uint32		dword;
39 | 
40 | 	//! Type for qword numbers. 
41 | 	//! From GLM_GTX_raw_data extension.
42 | 	typedef detail::uint64		qword;
43 | 
44 | 	/// @}
45 | }// namespace glm
46 | 
47 | #include "raw_data.inl"
48 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/raw_data.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtx_raw_data
2 | /// @file glm/gtx/raw_data.inl
3 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/scalar_relational.hpp:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_scalar_relational
 2 | /// @file glm/gtx/scalar_relational.hpp
 3 | ///
 4 | /// @see core (dependence)
 5 | ///
 6 | /// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational
 7 | /// @ingroup gtx
 8 | ///
 9 | /// @brief Extend a position from a source to a position at a defined length.
10 | ///
11 | /// <glm/gtx/scalar_relational.hpp> need to be included to use these functionalities.
12 | 
13 | #pragma once
14 | 
15 | // Dependency:
16 | #include "../glm.hpp"
17 | 
18 | #if GLM_MESSAGES == GLM_MESSAGES_ENABLED && !defined(GLM_EXT_INCLUDED)
19 | #	pragma message("GLM: GLM_GTX_extend extension included")
20 | #endif
21 | 
22 | namespace glm
23 | {
24 | 	/// @addtogroup gtx_scalar_relational
25 | 	/// @{
26 | 
27 | 
28 | 
29 | 	/// @}
30 | }//namespace glm
31 | 
32 | #include "scalar_relational.inl"
33 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/std_based_type.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtx_std_based_type
2 | /// @file glm/gtx/std_based_type.inl
3 | 
4 | namespace glm
5 | {
6 | 
7 | }
8 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/transform.inl:
--------------------------------------------------------------------------------
 1 | /// @ref gtx_transform
 2 | /// @file glm/gtx/transform.inl
 3 | 
 4 | namespace glm
 5 | {
 6 | 	template <typename T, precision P>
 7 | 	GLM_FUNC_QUALIFIER tmat4x4<T, P> translate(tvec3<T, P> const & v)
 8 | 	{
 9 | 		return translate(tmat4x4<T, P>(static_cast<T>(1)), v);
10 | 	}
11 | 
12 | 	template <typename T, precision P>
13 | 	GLM_FUNC_QUALIFIER tmat4x4<T, P> rotate(T angle, tvec3<T, P> const & v)
14 | 	{
15 | 		return rotate(tmat4x4<T, P>(static_cast<T>(1)), angle, v);
16 | 	}
17 | 
18 | 	template <typename T, precision P>
19 | 	GLM_FUNC_QUALIFIER tmat4x4<T, P> scale(tvec3<T, P> const & v)
20 | 	{
21 | 		return scale(tmat4x4<T, P>(static_cast<T>(1)), v);
22 | 	}
23 | 
24 | }//namespace glm
25 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/type_aligned.inl:
--------------------------------------------------------------------------------
1 | /// @ref gtc_type_aligned
2 | /// @file glm/gtc/type_aligned.inl
3 | 
4 | namespace glm
5 | {
6 | 
7 | }
8 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/gtx/type_trait.inl:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/RhythmGame/third_party/glm/gtx/type_trait.inl


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/integer.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/integer.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_integer.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/matrix.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/matrix.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_matrix.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/packing.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/packing.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_packing.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/simd/exponential.h:
--------------------------------------------------------------------------------
 1 | /// @ref simd
 2 | /// @file glm/simd/experimental.h
 3 | 
 4 | #pragma once
 5 | 
 6 | #include "platform.h"
 7 | 
 8 | #if GLM_ARCH & GLM_ARCH_SSE2_BIT
 9 | 
10 | GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_sqrt_lowp(glm_vec4 x)
11 | {
12 | 	return _mm_mul_ss(_mm_rsqrt_ss(x), x);
13 | }
14 | 
15 | GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sqrt_lowp(glm_vec4 x)
16 | {
17 | 	return _mm_mul_ps(_mm_rsqrt_ps(x), x);
18 | }
19 | 
20 | #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
21 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/simd/packing.h:
--------------------------------------------------------------------------------
1 | /// @ref simd
2 | /// @file glm/simd/packing.h
3 | 
4 | #pragma once
5 | 
6 | #if GLM_ARCH & GLM_ARCH_SSE2_BIT
7 | 
8 | #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
9 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/simd/trigonometric.h:
--------------------------------------------------------------------------------
 1 | /// @ref simd
 2 | /// @file glm/simd/trigonometric.h
 3 | 
 4 | #pragma once
 5 | 
 6 | #if GLM_ARCH & GLM_ARCH_SSE2_BIT
 7 | 
 8 | #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
 9 | 
10 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/simd/vector_relational.h:
--------------------------------------------------------------------------------
1 | /// @ref simd
2 | /// @file glm/simd/vector_relational.h
3 | 
4 | #pragma once
5 | 
6 | #if GLM_ARCH & GLM_ARCH_SSE2_BIT
7 | 
8 | #endif//GLM_ARCH & GLM_ARCH_SSE2_BIT
9 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/trigonometric.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/trigonometric.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_trigonometric.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/vec2.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/vec2.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/type_vec2.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/vec3.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/vec3.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/type_vec3.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/vec4.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/vec4.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/type_vec4.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/RhythmGame/third_party/glm/vector_relational.hpp:
--------------------------------------------------------------------------------
1 | /// @ref core
2 | /// @file glm/vector_relational.hpp
3 | 
4 | #pragma once
5 | 
6 | #include "detail/func_vector_relational.hpp"
7 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/soundboard_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/soundboard_image.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <application
 5 |         android:allowBackup="true"
 6 |         android:icon="@mipmap/ic_launcher"
 7 |         android:label="@string/app_name"
 8 |         android:roundIcon="@mipmap/ic_launcher_round"
 9 |         android:supportsRtl="true"
10 |         android:theme="@style/AppTheme">
11 |         <activity android:name="com.google.oboe.samples.soundboard.MainActivity"
12 |             android:exported="true">
13 |             <intent-filter>
14 |                 <action android:name="android.intent.action.MAIN" />
15 | 
16 |                 <category android:name="android.intent.category.LAUNCHER" />
17 |             </intent-filter>
18 |         </activity>
19 |     </application>
20 | 
21 | </manifest>
22 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/cpp/CMakeLists.txt:
--------------------------------------------------------------------------------
 1 | cmake_minimum_required(VERSION 3.22.1)
 2 | 
 3 | 
 4 | ### INCLUDE OBOE LIBRARY ###
 5 | 
 6 | # Set the path to the Oboe library directory
 7 | set (OBOE_DIR ../../../../..)
 8 | 
 9 | # Add the Oboe library as a subproject. Since Oboe is an out-of-tree source library we must also
10 | # specify a binary directory
11 | add_subdirectory(${OBOE_DIR} ./oboe-bin)
12 | 
13 | # Include the Oboe headers
14 | include_directories(${OBOE_DIR}/include ${OBOE_DIR}/samples/shared ${OBOE_DIR}/samples/debug-utils)
15 | 
16 | 
17 | ### END OBOE INCLUDE SECTION ###
18 | 
19 | add_library( soundboard SHARED
20 |         native-lib.cpp
21 |         SoundBoardEngine.cpp
22 |         )
23 | 
24 | target_link_libraries(soundboard log oboe )
25 | target_link_options(soundboard PRIVATE "-Wl,-z,max-page-size=16384")
26 | 
27 | # Enable optimization flags: if having problems with source level debugging,
28 | # disable -Ofast ( and debug ), re-enable it after done debugging.
29 | target_compile_options(soundboard PRIVATE -Wall -Werror -Ofast)
30 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/ic_launcher-playstore.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3 |     xmlns:app="http://schemas.android.com/apk/res-auto"
 4 |     xmlns:tools="http://schemas.android.com/tools"
 5 |     android:layout_width="match_parent"
 6 |     android:layout_height="match_parent"
 7 |     tools:context=".MainActivity">
 8 | 
 9 | </androidx.constraintlayout.widget.ConstraintLayout>
10 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background"/>
4 |     <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/res/mipmap-hdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/res/mipmap-mdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/SoundBoard/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorPrimary">#700000</color>
4 |     <color name="colorPrimaryDark">#280000</color>
5 |     <color name="colorAccent">#D81B60</color>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">soundboard</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/SoundBoard/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="colorPrimary">@color/colorPrimary</item>
 7 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8 |         <item name="colorAccent">@color/colorAccent</item>
 9 |     </style>
10 | 
11 | </resources>
12 | 


--------------------------------------------------------------------------------
/samples/audio-device/README.md:
--------------------------------------------------------------------------------
1 | ### Audio Device Library
2 | This folder contains a number of classes for working with Audio Devices. See the hello-oboe sample
3 | for usage. 
4 | 


--------------------------------------------------------------------------------
/samples/audio-device/build.gradle:
--------------------------------------------------------------------------------
 1 | apply plugin: 'com.android.library'
 2 | 
 3 | android {
 4 |     defaultConfig {
 5 |         minSdkVersion 21
 6 |         targetSdkVersion 35
 7 |         compileSdkVersion 35
 8 |     }
 9 |     buildTypes {
10 |         release {
11 |             minifyEnabled false
12 |             proguardFiles getDefaultProguardFile('proguard-android.txt')
13 |         }
14 |     }
15 |     compileOptions {
16 |         sourceCompatibility JavaVersion.VERSION_18
17 |         targetCompatibility JavaVersion.VERSION_18
18 |     }
19 |     namespace 'com.google.oboe.samples.audio_device'
20 | }
21 | 
22 | dependencies {
23 |     implementation 'androidx.appcompat:appcompat:1.7.0'
24 | }
25 | 


--------------------------------------------------------------------------------
/samples/audio-device/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # By default, the flags in this file are appended to flags specified
 3 | # in /Users/donturner/Library/Android/sdk/tools/proguard/proguard-android.txt
 4 | # You can edit the include path and order by changing the proguardFiles
 5 | # directive in build.gradle.
 6 | #
 7 | # For more details, see
 8 | #   http://developer.android.com/guide/developing/tools/proguard.html
 9 | 
10 | # Add any project specific keep options here:
11 | 
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | #   public *;
17 | #}
18 | 
19 | # Uncomment this to preserve the line number information for
20 | # debugging stack traces.
21 | #-keepattributes SourceFile,LineNumberTable
22 | 
23 | # If you keep the line number information, uncomment this to
24 | # hide the original source file name.
25 | #-renamesourcefileattribute SourceFile
26 | 


--------------------------------------------------------------------------------
/samples/audio-device/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest>
2 | </manifest>
3 | 


--------------------------------------------------------------------------------
/samples/audio-device/src/main/res/layout/audio_devices.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright (C) 2017 The Android Open Source Project
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~      http://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | <TextView
18 |     xmlns:android="http://schemas.android.com/apk/res/android"
19 |     android:id="@+id/device_name"
20 |     android:layout_width="match_parent"
21 |     android:layout_height="wrap_content"
22 |     android:padding="@dimen/default_padding"
23 |     android:text="@string/device_name"/>
24 | 


--------------------------------------------------------------------------------
/samples/audio-device/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <dimen name="default_padding">16dp</dimen>
4 | </resources>
5 | 


--------------------------------------------------------------------------------
/samples/audio-device/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="device_name">Device Name</string>
3 |     <string name="auto_select">Auto select</string>
4 | </resources>
5 | 


--------------------------------------------------------------------------------
/samples/debug-utils/trace.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2017 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef SIMPLESYNTH_TRACE_H
18 | #define SIMPLESYNTH_TRACE_H
19 | 
20 | class Trace {
21 | 
22 | public:
23 |   static void beginSection(const char *format, ...);
24 |   static void endSection();
25 |   static bool isEnabled() { return is_enabled_; }
26 |   static void initialize();
27 | 
28 | private:
29 |   static bool is_enabled_;
30 |   static bool has_error_been_shown_;
31 | };
32 | 
33 | #endif //SIMPLESYNTH_TRACE_H
34 | 


--------------------------------------------------------------------------------
/samples/drumthumper/drumthumper-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/drumthumper-screenshot.png


--------------------------------------------------------------------------------
/samples/drumthumper/playstore/DrumSetFeatureImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/playstore/DrumSetFeatureImage.png


--------------------------------------------------------------------------------
/samples/drumthumper/playstore/ScreenShotPhone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/playstore/ScreenShotPhone.png


--------------------------------------------------------------------------------
/samples/drumthumper/playstore/ScreenShotWithMix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/playstore/ScreenShotWithMix.png


--------------------------------------------------------------------------------
/samples/drumthumper/playstore/drumset.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/playstore/drumset.jpg


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <application
 5 |         android:allowBackup="true"
 6 |         android:icon="@mipmap/ic_launcher"
 7 |         android:label="@string/app_name"
 8 |         android:roundIcon="@mipmap/ic_launcher_round"
 9 |         android:supportsRtl="true"
10 |         android:theme="@style/AppTheme">
11 |         <activity android:name="com.plausiblesoftware.drumthumper.DrumThumperActivity"
12 |             android:exported="true">
13 |             <intent-filter>
14 |                 <action android:name="android.intent.action.MAIN" />
15 | 
16 |                 <category android:name="android.intent.category.LAUNCHER" />
17 |             </intent-filter>
18 |         </activity>
19 |     </application>
20 | 
21 | </manifest>
22 | 


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/CrashCymbal.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/CrashCymbal.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/HiHat_Closed.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/HiHat_Closed.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/HiHat_Open.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/HiHat_Open.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/KickDrum.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/KickDrum.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/LowTom.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/LowTom.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/MidTom.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/MidTom.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/RideCymbal.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/RideCymbal.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/assets/SnareDrum.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/assets/SnareDrum.wav


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-anydpi-v26/_ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/_ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/_ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-anydpi-v26/_ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/_ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/_ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/drumthumper/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorPrimary">#008577</color>
4 |     <color name="colorPrimaryDark">#00574B</color>
5 |     <color name="colorAccent">#D81B60</color>
6 |     <color name="black">#FF000000</color>
7 |     <color name="red">#BB0000</color>
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">DrumThumper</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/drumthumper/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="colorPrimary">@color/colorPrimary</item>
 7 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8 |         <item name="colorAccent">@color/colorAccent</item>
 9 |     </style>
10 | 
11 | </resources>
12 | 


--------------------------------------------------------------------------------
/samples/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/samples/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Mar 03 18:52:06 GMT 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
7 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/hello-oboe-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/hello-oboe/hello-oboe-screenshot.png


--------------------------------------------------------------------------------
/samples/hello-oboe/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # By default, the flags in this file are appended to flags specified
 3 | # in /Users/gfan/dev/android-sdk/tools/proguard/proguard-android.txt
 4 | # You can edit the include path and order by changing the proguardFiles
 5 | # directive in build.gradle.
 6 | #
 7 | # For more details, see
 8 | #   http://developer.android.com/guide/developing/tools/proguard.html
 9 | 
10 | # Add any project specific keep options here:
11 | 
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | #   public *;
17 | #}
18 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <uses-feature android:name="android.hardware.audio.output" android:required="true" />
 5 |     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
 6 |     <application
 7 |         android:allowBackup="false"
 8 |         android:fullBackupContent="false"
 9 |         android:supportsRtl="true"
10 |         android:icon="@mipmap/ic_launcher"
11 |         android:label="@string/app_name"
12 |         android:theme="@style/AppTheme" >
13 |       <activity
14 |           android:name="com.google.oboe.samples.hellooboe.MainActivity"
15 |           android:label="@string/app_name"
16 |           android:screenOrientation="portrait"
17 |           android:exported="true">
18 |         <intent-filter>
19 |           <action android:name="android.intent.action.MAIN" />
20 |           <category android:name="android.intent.category.LAUNCHER" />
21 |         </intent-filter>
22 |       </activity>
23 |     </application>
24 | </manifest>
25 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/layout/audio_apis_spinner.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright (C) 2017 The Android Open Source Project
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~      http://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | <TextView
18 |     xmlns:android="http://schemas.android.com/apk/res/android"
19 |     android:id="@+id/audioApiOption"
20 |     android:layout_width="match_parent"
21 |     android:layout_height="wrap_content"
22 |     android:padding="@dimen/default_padding"
23 |     />
24 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/layout/buffer_sizes_spinner.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright (C) 2017 The Android Open Source Project
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~      http://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | <TextView
18 |     xmlns:android="http://schemas.android.com/apk/res/android"
19 |     android:id="@+id/bufferSizeOption"
20 |     android:layout_width="match_parent"
21 |     android:layout_height="wrap_content"
22 |     android:padding="@dimen/default_padding"
23 |     />
24 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/layout/channel_counts_spinner.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <!--
 3 |   ~ Copyright (C) 2018 The Android Open Source Project
 4 |   ~
 5 |   ~ Licensed under the Apache License, Version 2.0 (the "License");
 6 |   ~ you may not use this file except in compliance with the License.
 7 |   ~ You may obtain a copy of the License at
 8 |   ~
 9 |   ~      http://www.apache.org/licenses/LICENSE-2.0
10 |   ~
11 |   ~ Unless required by applicable law or agreed to in writing, software
12 |   ~ distributed under the License is distributed on an "AS IS" BASIS,
13 |   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 |   ~ See the License for the specific language governing permissions and
15 |   ~ limitations under the License.
16 |   -->
17 | <TextView
18 |     xmlns:android="http://schemas.android.com/apk/res/android"
19 |     android:id="@+id/channelCountOption"
20 |     android:layout_width="match_parent"
21 |     android:layout_height="wrap_content"
22 |     android:padding="@dimen/default_padding"
23 |     />
24 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/hello-oboe/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/hello-oboe/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/hello-oboe/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/hello-oboe/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/values-v21/styles.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <style name="AppTheme" parent="android:Theme.Material.Light">
4 |     </style>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <!-- Example customization of dimensions originally defined in res/values/dimens.xml
3 |          (such as screen margins) for screens with more than 820dp of available width. This
4 |          would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
5 |     <dimen name="activity_horizontal_margin">64dp</dimen>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <!-- Default screen margins, per the Android Design guidelines. -->
3 |     <dimen name="activity_horizontal_margin">16dp</dimen>
4 |     <dimen name="activity_vertical_margin">16dp</dimen>
5 | </resources>
6 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 |     <string name="app_name">Hello Oboe</string>
 3 |     <string name="init_status">Touch anywhere on the screen to play audio</string>
 4 |     <string name="action_settings">Settings</string>
 5 |     <string name="need_record_audio_permission">"This sample needs RECORD_AUDIO permission"</string>
 6 |     <string name="playback_device">Playback device</string>
 7 |     <string name="latency">Latency: %s</string>
 8 |     <string name="buffer_size_title">Buffer size</string>
 9 |     <string name="automatic">Automatic</string>
10 |     <string name="buffer_size_description_key">description</string>
11 |     <string name="buffer_size_value_key">value</string>
12 |     <string name="audio_api_description_key">description</string>
13 |     <string name="audio_api_value_key">value</string>
14 |     <string name="only_supported_on_api_26">Only supported in AAudio (API 26+)</string>
15 |     <string name="audio_api">Audio API</string>
16 | </resources>
17 | 


--------------------------------------------------------------------------------
/samples/hello-oboe/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 | 
3 |     <!-- Base application theme. -->
4 |     <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
5 |         <!-- Customize your theme here. -->
6 |     </style>
7 | 
8 | </resources>
9 | 


--------------------------------------------------------------------------------
/samples/iolib/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/samples/iolib/build.gradle:
--------------------------------------------------------------------------------
 1 | apply plugin: 'com.android.library'
 2 | 
 3 | android {
 4 |     defaultConfig {
 5 |         minSdkVersion 21
 6 |         targetSdkVersion 35
 7 |         compileSdkVersion 35
 8 | 
 9 |         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
10 |         consumerProguardFiles 'consumer-rules.pro'
11 |     }
12 |     buildTypes {
13 |         release {
14 |             minifyEnabled false
15 |             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
16 |         }
17 |     }
18 |     compileOptions {
19 |         sourceCompatibility JavaVersion.VERSION_18
20 |         targetCompatibility JavaVersion.VERSION_18
21 |     }
22 |     externalNativeBuild {
23 |         cmake {
24 |             path 'src/main/cpp/CMakeLists.txt'
25 |         }
26 |     }
27 |     namespace 'com.google.oboe.samples.iolib'
28 | }
29 | 
30 | dependencies {
31 |     implementation fileTree(dir: 'libs', include: ['*.jar'])
32 | 
33 |     implementation 'androidx.appcompat:appcompat:1.7.0'
34 | }
35 | 


--------------------------------------------------------------------------------
/samples/iolib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
2 | 


--------------------------------------------------------------------------------
/samples/iolib/src/main/cpp/player/DataSource.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef _PLAYER_AUDIOSOURCE_H_
18 | #define _PLAYER_AUDIOSOURCE_H_
19 | 
20 | #include <cstdint>
21 | 
22 | namespace iolib {
23 | 
24 | /*
25 |  * Defines an interface for audio data sources for the SimpleMultiPlayer class.
26 |  */
27 | class DataSource {
28 | public:
29 |     virtual ~DataSource() {};
30 | 
31 |     virtual void mixAudio(float* outBuff, int numChannels, int numFrames) = 0;
32 | };
33 | 
34 | }
35 | 
36 | #endif //_PLAYER_AUDIOSOURCE_H_
37 | 


--------------------------------------------------------------------------------
/samples/iolib/src/main/cpp/player/SampleSource.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2020 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include "SampleSource.h"
18 | 
19 | namespace iolib {
20 |     // for now, all methods of SampleSource are either in-line or pure virtual
21 | }
22 | 


--------------------------------------------------------------------------------
/samples/iolib/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">iolib</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/README.md:
--------------------------------------------------------------------------------
 1 | # Minimal Oboe
 2 | 
 3 | ## Overview
 4 | 
 5 | This app is a very simple demonstration of turning on audio from buttons.
 6 | It uses a low-latency Oboe stream.
 7 | 
 8 | ## Implementation
 9 | 
10 | The app is written using Kotlin and Jetpack Compose.
11 | 
12 | The app state is maintained by subclassing DefaultLifecycleObserver.
13 | Oboe is called through an external native function.
14 | 
15 | This app uses shared_ptr for passing callbacks to Oboe.
16 | When the stream is disconnected, it starts a new stream.
17 | 
18 | ## Screenshots
19 | ![minimaloboe-screenshot](minimaloboe-screenshot.png)
20 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/minimaloboe-screenshot.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/minimaloboe-screenshot.png


--------------------------------------------------------------------------------
/samples/minimaloboe/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <application
 5 |         android:allowBackup="true"
 6 |         android:icon="@mipmap/ic_launcher"
 7 |         android:label="@string/app_name"
 8 |         android:roundIcon="@mipmap/ic_launcher_round"
 9 |         android:supportsRtl="true"
10 |         android:theme="@style/Theme.Samples">
11 |         <activity
12 |             android:name=".MainActivity"
13 |             android:exported="true"
14 |             android:label="@string/app_name"
15 |             android:theme="@style/Theme.Samples">
16 |             <intent-filter>
17 |                 <action android:name="android.intent.action.MAIN" />
18 | 
19 |                 <category android:name="android.intent.category.LAUNCHER" />
20 |             </intent-filter>
21 |         </activity>
22 |     </application>
23 | 
24 | </manifest>
25 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/kotlin/com/example/minimaloboe/ui/theme/Color.kt:
--------------------------------------------------------------------------------
1 | package com.example.minimaloboe.ui.theme
2 | 
3 | import androidx.compose.ui.graphics.Color
4 | 
5 | val Purple200 = Color(0xFFBB86FC)
6 | val Purple500 = Color(0xFF6200EE)
7 | val Purple700 = Color(0xFF3700B3)
8 | val Teal200 = Color(0xFF03DAC5)
9 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/kotlin/com/example/minimaloboe/ui/theme/Shape.kt:
--------------------------------------------------------------------------------
 1 | package com.example.minimaloboe.ui.theme
 2 | 
 3 | import androidx.compose.foundation.shape.RoundedCornerShape
 4 | import androidx.compose.material.Shapes
 5 | import androidx.compose.ui.unit.dp
 6 | 
 7 | val Shapes = Shapes(
 8 |     small = RoundedCornerShape(4.dp),
 9 |     medium = RoundedCornerShape(4.dp),
10 |     large = RoundedCornerShape(0.dp)
11 | )
12 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/kotlin/com/example/minimaloboe/ui/theme/Type.kt:
--------------------------------------------------------------------------------
 1 | package com.example.minimaloboe.ui.theme
 2 | 
 3 | import androidx.compose.material.Typography
 4 | import androidx.compose.ui.text.TextStyle
 5 | import androidx.compose.ui.text.font.FontFamily
 6 | import androidx.compose.ui.text.font.FontWeight
 7 | import androidx.compose.ui.unit.sp
 8 | 
 9 | // Set of Material typography styles to start with
10 | val Typography = Typography(
11 |     body1 = TextStyle(
12 |         fontFamily = FontFamily.Default,
13 |         fontWeight = FontWeight.Normal,
14 |         fontSize = 24.sp
15 |     ),
16 |     button = TextStyle(
17 |         fontFamily = FontFamily.Default,
18 |         fontWeight = FontWeight.W500,
19 |         fontSize = 20.sp
20 |     )
21 | )
22 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-hdpi/ic_launcher_round.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-mdpi/ic_launcher_round.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xhdpi/ic_launcher_round.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/samples/minimaloboe/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <resources>
 3 |     <color name="purple_200">#FFBB86FC</color>
 4 |     <color name="purple_500">#FF6200EE</color>
 5 |     <color name="purple_700">#FF3700B3</color>
 6 |     <color name="teal_200">#FF03DAC5</color>
 7 |     <color name="teal_700">#FF018786</color>
 8 |     <color name="black">#FF000000</color>
 9 |     <color name="white">#FFFFFFFF</color>
10 | </resources>
11 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">MinimalOboe</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/minimaloboe/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 | 
4 |     <style name="Theme.Samples" parent="android:Theme.Material.Light.NoActionBar">
5 |         <item name="android:statusBarColor">@color/purple_700</item>
6 |     </style>
7 | </resources>
8 | 


--------------------------------------------------------------------------------
/samples/parselib/build.gradle:
--------------------------------------------------------------------------------
 1 | apply plugin: 'com.android.library'
 2 | 
 3 | android {
 4 |     defaultConfig {
 5 |         minSdkVersion 21
 6 |         targetSdkVersion 35
 7 |         compileSdkVersion 35
 8 | 
 9 |         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
10 |     }
11 |     buildTypes {
12 |         release {
13 |             minifyEnabled false
14 |             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
15 |         }
16 |     }
17 |     compileOptions {
18 |         sourceCompatibility JavaVersion.VERSION_18
19 |         targetCompatibility JavaVersion.VERSION_18
20 |     }
21 |     externalNativeBuild {
22 |         cmake {
23 |             path 'src/main/cpp/CMakeLists.txt'
24 |         }
25 |     }
26 |     namespace 'com.google.oboe.samples'
27 | }
28 | 
29 | dependencies {
30 |     implementation fileTree(dir: 'libs', include: ['*.jar'])
31 | 
32 |     implementation 'androidx.appcompat:appcompat:1.7.0'
33 | }
34 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 | <manifest xmlns:android="http://schemas.android.com/apk/res/android" />
2 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/cpp/stream/InputStream.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #include "InputStream.h"
17 | 
18 | namespace parselib {
19 | 
20 | // All of the methods of InputStream are pure virtual
21 | 
22 | } /* namespace wavlib */
23 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/cpp/wav/AudioEncoding.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #include "AudioEncoding.h"
17 | 
18 | namespace parselib {
19 | 
20 | } // namespace wavlib
21 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/cpp/wav/AudioEncoding.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #ifndef _IO_WAV_AUDIOFORMAT_H_
17 | #define _IO_WAV_AUDIOFORMAT_H_
18 | 
19 | namespace parselib {
20 | 
21 | /**
22 |  * Definitions for Audio Encodings in WAV files.
23 |  */
24 | class AudioEncoding {
25 | public:
26 |     static const int INVALID = -1;
27 |     static const int PCM_16 = 0;
28 |     static const int PCM_8 = 1;
29 |     static const int PCM_IEEEFLOAT = 2;
30 |     static const int PCM_24 = 3;
31 |     static const int PCM_32 = 4;
32 | };
33 | 
34 | } // namespace parselib
35 | 
36 | #endif // _IO_WAV_AUDIOFORMAT_H_
37 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/cpp/wav/WavChunkHeader.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #include "stream/InputStream.h"
17 | 
18 | #include "WavChunkHeader.h"
19 | 
20 | namespace parselib {
21 | 
22 | const RiffID WavChunkHeader::RIFFID_DATA = makeRiffID('d', 'a', 't', 'a');
23 | 
24 | void WavChunkHeader::read(InputStream *stream) {
25 |     stream->read(&mChunkId, sizeof(mChunkId));
26 |     stream->read(&mChunkSize, sizeof(mChunkSize));
27 | }
28 | 
29 | } // namespace parselib
30 | 


--------------------------------------------------------------------------------
/samples/parselib/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">wavlib</string>
3 | </resources>
4 | 


--------------------------------------------------------------------------------
/samples/settings.gradle:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2017 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  *
16 |  */
17 | 
18 | include ':audio-device'
19 | include ':hello-oboe'
20 | include ':RhythmGame'
21 | include ':MegaDrone'
22 | include ':LiveEffect'
23 | include ':SoundBoard'
24 | include ':drumthumper'
25 | include ':parselib'
26 | include ':iolib'
27 | include ':minimaloboe'
28 | 


--------------------------------------------------------------------------------
/samples/shared/IRenderableAudio.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef SAMPLES_IRENDERABLEAUDIO_H
18 | #define SAMPLES_IRENDERABLEAUDIO_H
19 | 
20 | #include <cstdint>
21 | #include <string>
22 | 
23 | class IRenderableAudio {
24 | 
25 | public:
26 |     virtual ~IRenderableAudio() = default;
27 |     virtual void renderAudio(float *audioData, int32_t numFrames) = 0;
28 | };
29 | 
30 | 
31 | #endif //SAMPLES_IRENDERABLEAUDIO_H
32 | 


--------------------------------------------------------------------------------
/samples/shared/IRestartable.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2018 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #ifndef SAMPLES_IRESTARTABLE_H
17 | #define SAMPLES_IRESTARTABLE_H
18 | 
19 | /**
20 |  * Represents an object which can be restarted. For example an audio engine which has one or more
21 |  * streams which can be restarted following a change in audio device configuration. For example,
22 |  * headphones being connected.
23 |  */
24 | class IRestartable {
25 | public:
26 |     virtual void restart() = 0;
27 | };
28 | #endif //SAMPLES_IRESTARTABLE_H
29 | 


--------------------------------------------------------------------------------
/samples/shared/ITappable.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #ifndef SAMPLES_ITAPPABLE_H
18 | #define SAMPLES_ITAPPABLE_H
19 | 
20 | class ITappable {
21 | public:
22 |     virtual ~ITappable()  = default;
23 |     virtual void tap(bool isDown) = 0;
24 | };
25 | #endif //SAMPLES_ITAPPABLE_H
26 | 


--------------------------------------------------------------------------------
/src/common/FixedBlockAdapter.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright (C) 2017 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <stdint.h>
18 | 
19 | #include "FixedBlockAdapter.h"
20 | 
21 | FixedBlockAdapter::~FixedBlockAdapter() {
22 | }
23 | 
24 | int32_t FixedBlockAdapter::open(int32_t bytesPerFixedBlock)
25 | {
26 |     mSize = bytesPerFixedBlock;
27 |     mStorage = std::make_unique<uint8_t[]>(bytesPerFixedBlock);
28 |     mPosition = 0;
29 |     return 0;
30 | }
31 | 
32 | int32_t FixedBlockAdapter::close()
33 | {
34 |     mStorage.reset(nullptr);
35 |     mSize = 0;
36 |     mPosition = 0;
37 |     return 0;
38 | }
39 | 


--------------------------------------------------------------------------------
/src/common/SourceFloatCaller.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <algorithm>
18 | #include <unistd.h>
19 | #include "flowgraph/FlowGraphNode.h"
20 | #include "SourceFloatCaller.h"
21 | 
22 | using namespace oboe;
23 | using namespace flowgraph;
24 | 
25 | int32_t SourceFloatCaller::onProcess(int32_t numFrames) {
26 |     int32_t numBytes = mStream->getBytesPerFrame() * numFrames;
27 |     int32_t bytesRead = mBlockReader.read((uint8_t *) output.getBuffer(), numBytes);
28 |     int32_t framesRead = bytesRead / mStream->getBytesPerFrame();
29 |     return framesRead;
30 | }
31 | 


--------------------------------------------------------------------------------
/src/common/Version.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2019 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | #include "oboe/Version.h"
17 | 
18 | namespace oboe {
19 | 
20 |     // This variable enables the version information to be read from the resulting binary e.g.
21 |     // by running `objdump -s --section=.data <binary>`
22 |     // Please do not optimize or change in any way.
23 |     char kVersionText[] = "OboeVersion" OBOE_VERSION_TEXT;
24 | 
25 |     const char * getVersionText(){
26 |         return kVersionText;
27 |     }
28 | } // namespace oboe
29 | 


--------------------------------------------------------------------------------
/src/fifo/FifoController.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2015 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <stdint.h>
18 | 
19 | #include "FifoController.h"
20 | 
21 | namespace oboe {
22 | 
23 | FifoController::FifoController(uint32_t numFrames)
24 |         : FifoControllerBase(numFrames)
25 | {
26 |     setReadCounter(0);
27 |     setWriteCounter(0);
28 | }
29 | 
30 | } // namespace oboe
31 | 


--------------------------------------------------------------------------------
/src/fifo/FifoControllerIndirect.cpp:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2016 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | #include <stdint.h>
18 | 
19 | #include "FifoControllerIndirect.h"
20 | 
21 | namespace oboe {
22 | 
23 | FifoControllerIndirect::FifoControllerIndirect(uint32_t numFrames,
24 |                                                std::atomic<uint64_t> *readCounterAddress,
25 |                                                std::atomic<uint64_t> *writeCounterAddress)
26 |         : FifoControllerBase(numFrames)
27 |         , mReadCounterAddress(readCounterAddress)
28 |         , mWriteCounterAddress(writeCounterAddress)
29 | {
30 | }
31 | 
32 | }
33 | 


--------------------------------------------------------------------------------
/src/flowgraph/resampler/ResamplerDefinitions.h:
--------------------------------------------------------------------------------
 1 | /*
 2 |  * Copyright 2022 The Android Open Source Project
 3 |  *
 4 |  * Licensed under the Apache License, Version 2.0 (the "License");
 5 |  * you may not use this file except in compliance with the License.
 6 |  * You may obtain a copy of the License at
 7 |  *
 8 |  *      http://www.apache.org/licenses/LICENSE-2.0
 9 |  *
10 |  * Unless required by applicable law or agreed to in writing, software
11 |  * distributed under the License is distributed on an "AS IS" BASIS,
12 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 |  * See the License for the specific language governing permissions and
14 |  * limitations under the License.
15 |  */
16 | 
17 | // Set flag RESAMPLER_OUTER_NAMESPACE based on whether compiler flag
18 | // __ANDROID_NDK__ is defined. __ANDROID_NDK__ should be defined in oboe
19 | // but not in android.
20 | 
21 | #ifndef RESAMPLER_OUTER_NAMESPACE
22 | #ifdef __ANDROID_NDK__
23 | #define RESAMPLER_OUTER_NAMESPACE oboe
24 | #else
25 | #define RESAMPLER_OUTER_NAMESPACE aaudio
26 | #endif // __ANDROID_NDK__
27 | #endif // RESAMPLER_OUTER_NAMESPACE
28 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/.gitignore:
--------------------------------------------------------------------------------
 1 | *.iml
 2 | .gradle
 3 | /local.properties
 4 | /.idea/caches/build_file_checksums.ser
 5 | /.idea/libraries
 6 | /.idea/modules.xml
 7 | /.idea/workspace.xml
 8 | .DS_Store
 9 | /build
10 | /captures
11 | .externalNativeBuild
12 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/build.gradle:
--------------------------------------------------------------------------------
 1 | apply plugin: 'com.android.application'
 2 | 
 3 | android {
 4 |     compileSdkVersion 34
 5 |     defaultConfig {
 6 |         applicationId "com.google.oboe.tests.unittestrunner"
 7 |         minSdkVersion 21
 8 |         targetSdkVersion 34
 9 |         versionCode 1
10 |         versionName "1.0"
11 |     }
12 |     buildTypes {
13 |         release {
14 |             minifyEnabled false
15 |             proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
16 |         }
17 |     }
18 |     externalNativeBuild {
19 |         cmake {
20 |             path file('../../CMakeLists.txt')
21 |         }
22 |     }
23 |     namespace 'com.google.oboe.tests.unittestrunner'
24 | }
25 | 
26 | dependencies {
27 |     implementation fileTree(dir: 'libs', include: ['*.jar'])
28 |     implementation 'androidx.appcompat:appcompat:1.1.0'
29 |     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
30 | }
31 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/proguard-rules.pro:
--------------------------------------------------------------------------------
 1 | # Add project specific ProGuard rules here.
 2 | # You can control the set of applied configuration files using the
 3 | # proguardFiles setting in build.gradle.
 4 | #
 5 | # For more details, see
 6 | #   http://developer.android.com/guide/developing/tools/proguard.html
 7 | 
 8 | # If your project uses WebView with JS, uncomment the following
 9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | #   public *;
13 | #}
14 | 
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 | 
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/.gitignore:
--------------------------------------------------------------------------------
1 | /assets
2 | /jniLibs
3 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
 1 | <?xml version="1.0" encoding="utf-8"?>
 2 | <manifest xmlns:android="http://schemas.android.com/apk/res/android">
 3 | 
 4 |     <uses-permission android:name="android.permission.RECORD_AUDIO" />
 5 |     <application
 6 |         android:allowBackup="true"
 7 |         android:icon="@mipmap/ic_launcher"
 8 |         android:label="@string/app_name"
 9 |         android:roundIcon="@mipmap/ic_launcher_round"
10 |         android:supportsRtl="true"
11 |         android:theme="@style/AppTheme">
12 |         <activity android:name=".MainActivity" android:exported="true" android:screenOrientation="landscape">
13 |             <intent-filter>
14 |                 <action android:name="android.intent.action.MAIN" />
15 | 
16 |                 <category android:name="android.intent.category.LAUNCHER" />
17 |             </intent-filter>
18 |         </activity>
19 |     </application>
20 | 
21 | </manifest>
22 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
3 |     <background android:drawable="@drawable/ic_launcher_background" />
4 |     <foreground android:drawable="@drawable/ic_launcher_foreground" />
5 | </adaptive-icon>


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-hdpi/ic_launcher.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-hdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-mdpi/ic_launcher.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-mdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 | <?xml version="1.0" encoding="utf-8"?>
2 | <resources>
3 |     <color name="colorPrimary">#008577</color>
4 |     <color name="colorPrimaryDark">#00574B</color>
5 |     <color name="colorAccent">#D81B60</color>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 | <resources>
2 |     <string name="app_name">Unit Test Runner</string>
3 |     <string name="need_record_audio_permission">"This app needs RECORD_AUDIO permission"</string>
4 |     <string name="status_record_audio_denied">Error: Permission for RECORD_AUDIO was denied</string>
5 |     <string name="status_record_audio_granted">RECORD_AUDIO permission granted. Running tests...</string>
6 | </resources>
7 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
 1 | <resources>
 2 | 
 3 |     <!-- Base application theme. -->
 4 |     <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
 5 |         <!-- Customize your theme here. -->
 6 |         <item name="colorPrimary">@color/colorPrimary</item>
 7 |         <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
 8 |         <item name="colorAccent">@color/colorAccent</item>
 9 |     </style>
10 | 
11 | </resources>
12 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/build.gradle:
--------------------------------------------------------------------------------
 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
 2 | 
 3 | buildscript {
 4 |     repositories {
 5 |         mavenCentral()
 6 |         maven {
 7 |             url 'https://maven.google.com/'
 8 |             name 'Google'
 9 |         }
10 |     }
11 | 
12 |     dependencies {
13 |         classpath 'com.android.tools.build:gradle:8.5.1'
14 |     }
15 | }
16 | 
17 | allprojects {
18 |     repositories {
19 |         mavenCentral()
20 |         maven {
21 |             url 'https://maven.google.com/'
22 |             name 'Google'
23 |         }
24 |     }
25 | }
26 | 
27 | task clean(type: Delete) {
28 |     delete rootProject.buildDir
29 | }
30 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/google/oboe/8f02c49c9c310a30e3c452c598b816adc9397539/tests/UnitTestRunner/gradle/wrapper/gradle-wrapper.jar


--------------------------------------------------------------------------------
/tests/UnitTestRunner/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Sep 27 15:12:10 BST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
7 | 


--------------------------------------------------------------------------------
/tests/UnitTestRunner/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | 


--------------------------------------------------------------------------------