diff options
| author | crueter <crueter@eden-emu.dev> | 2025-08-04 04:50:14 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-08-04 04:50:14 +0200 |
| commit | 51b170b470ed587f99a7c2a773e4464687f0d07a (patch) | |
| tree | 4c03c510cfb17a5f5d6233df490d78f06dcfa7f7 /externals/oboe/samples/SoundBoard/src/main/cpp | |
| parent | 04e5e6453875ffa5c79cdb421a29bc19985b1049 (diff) | |
[cmake] refactor: Use CPM over submodules (#143)
Transfers the majority of submodules and large externals to CPM, using source archives rather than full Git clones. Not only does this save massive amounts of clone and configure time, but dependencies are grabbed on-demand rather than being required by default. Additionally, CPM will (generally) automatically search for system dependencies, though certain dependencies have options to control this.
Testing shows gains ranging from 5x to 10x in terms of overall clone/configure time.
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/143
Reviewed-by: CamilleLaVey <camillelavey99@gmail.com>
Diffstat (limited to 'externals/oboe/samples/SoundBoard/src/main/cpp')
5 files changed, 0 insertions, 409 deletions
diff --git a/externals/oboe/samples/SoundBoard/src/main/cpp/CMakeLists.txt b/externals/oboe/samples/SoundBoard/src/main/cpp/CMakeLists.txt deleted file mode 100644 index 6e997e5576..0000000000 --- a/externals/oboe/samples/SoundBoard/src/main/cpp/CMakeLists.txt +++ /dev/null @@ -1,29 +0,0 @@ -cmake_minimum_required(VERSION 3.4.1) - - -### INCLUDE OBOE LIBRARY ### - -# Set the path to the Oboe library directory -set (OBOE_DIR ../../../../..) - -# Add the Oboe library as a subproject. Since Oboe is an out-of-tree source library we must also -# specify a binary directory -add_subdirectory(${OBOE_DIR} ./oboe-bin) - -# Include the Oboe headers -include_directories(${OBOE_DIR}/include ${OBOE_DIR}/samples/shared ${OBOE_DIR}/samples/debug-utils) - - -### END OBOE INCLUDE SECTION ### - -add_library( soundboard SHARED - native-lib.cpp - SoundBoardEngine.cpp - ) - -target_link_libraries(soundboard log oboe ) -target_link_options(soundboard PRIVATE "-Wl,-z,max-page-size=16384") - -# Enable optimization flags: if having problems with source level debugging, -# disable -Ofast ( and debug ), re-enable it after done debugging. -target_compile_options(soundboard PRIVATE -Wall -Werror -Ofast) diff --git a/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.cpp b/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.cpp deleted file mode 100644 index defb6dcb42..0000000000 --- a/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -#include <memory> -#include "SoundBoardEngine.h" - -/** - * Main audio engine for the SoundBoard sample. It is responsible for: - * - * - Creating the callback object which will be supplied when constructing the audio stream - * - Creating the playback stream, including setting the callback object - * - Creating `Synth` which will render the audio inside the callback - * - Starting the playback stream - * - Restarting the playback stream when `restart()` is called by the callback object - * - * @param numSignals - */ -SoundBoardEngine::SoundBoardEngine(int32_t numSignals) { - createCallback(numSignals); -} - -SoundBoardEngine::~SoundBoardEngine() { - if (mStream) { - LOGE("SoundBoardEngine destructor was called without calling stop()." - "Please call stop() to ensure stream resources are not leaked."); - stop(); - } -} - -void SoundBoardEngine::noteOff(int32_t noteIndex) { - mSynth->noteOff(noteIndex); -} - -void SoundBoardEngine::noteOn(int32_t noteIndex) { - mSynth->noteOn(noteIndex); -} - -void SoundBoardEngine::tap(bool isDown) { - mSynth->tap(isDown); -} - -void SoundBoardEngine::restart() { - stop(); - start(); -} -// Create the playback stream -oboe::Result SoundBoardEngine::createPlaybackStream() { - oboe::AudioStreamBuilder builder; - return builder.setSharingMode(oboe::SharingMode::Exclusive) - ->setPerformanceMode(oboe::PerformanceMode::LowLatency) - ->setFormat(oboe::AudioFormat::Float) - ->setDataCallback(mDataCallback) - ->setErrorCallback(mErrorCallback) - ->openStream(mStream); -} - -// Create the callback and set its thread affinity to the supplied CPU core IDs -void SoundBoardEngine::createCallback(int32_t numSignals){ - - mDataCallback = std::make_shared<DefaultDataCallback>(); - - // Create the error callback, we supply ourselves as the parent so that we can restart the stream - // when it's disconnected - mErrorCallback = std::make_shared<DefaultErrorCallback>(*this); - - mNumSignals = numSignals; -} - -bool SoundBoardEngine::start() { - // It is possible for a stream's device to become disconnected during stream open or between - // stream open and stream start. - // If the stream fails to start, close the old stream and try again. - bool didStart = false; - int tryCount = 0; - do { - if (tryCount > 0) { - usleep(20 * 1000); // Sleep between tries to give the system time to settle. - } - didStart = attemptStart(); - } while (!didStart && tryCount++ < 3); - if (!didStart) { - LOGE("Failed at starting the stream"); - } - return didStart; -} - -bool SoundBoardEngine::attemptStart() { - auto result = createPlaybackStream(); - - if (result == Result::OK) { - // Create our synthesizer audio source using the properties of the stream - mSynth = Synth::create(mStream->getSampleRate(), mStream->getChannelCount(), mNumSignals); - mDataCallback->reset(); - mDataCallback->setSource(std::dynamic_pointer_cast<IRenderableAudio>(mSynth)); - result = mStream->start(); - if (result == Result::OK) { - return true; - } else { - LOGW("Failed attempt at starting the playback stream. Error: %s", convertToText(result)); - return false; - } - } else { - LOGW("Failed attempt at creating the playback stream. Error: %s", convertToText(result)); - return false; - } -} - -bool SoundBoardEngine::stop() { - if(mStream && mStream->getState() != oboe::StreamState::Closed) { - mStream->stop(); - mStream->close(); - } - mStream.reset(); - return true; -} - diff --git a/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.h b/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.h deleted file mode 100644 index 033f839f76..0000000000 --- a/externals/oboe/samples/SoundBoard/src/main/cpp/SoundBoardEngine.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SOUNDBOARD_ENGINE_H -#define SOUNDBOARD_ENGINE_H - - -#include <oboe/Oboe.h> -#include <vector> - -#include "Synth.h" -#include <DefaultDataCallback.h> -#include <TappableAudioSource.h> -#include <IRestartable.h> -#include <DefaultErrorCallback.h> - -using namespace oboe; - -class SoundBoardEngine : public IRestartable { - -public: - SoundBoardEngine(int32_t numSignals); - - virtual ~SoundBoardEngine(); - - void noteOff(int32_t noteIndex); - - void noteOn(int32_t noteIndex); - - void tap(bool isDown); - - // from IRestartable - virtual void restart() override; - - bool start(); - bool stop(); - -private: - int32_t mNumSignals; - - std::shared_ptr<AudioStream> mStream; - std::shared_ptr<Synth> mSynth; - std::shared_ptr<DefaultDataCallback> mDataCallback; - std::shared_ptr<DefaultErrorCallback> mErrorCallback; - - bool attemptStart(); - oboe::Result createPlaybackStream(); - void createCallback(int32_t numSignals); -}; - - -#endif //SOUNDBOARD_ENGINE_H diff --git a/externals/oboe/samples/SoundBoard/src/main/cpp/Synth.h b/externals/oboe/samples/SoundBoard/src/main/cpp/Synth.h deleted file mode 100644 index ef28a3a68f..0000000000 --- a/externals/oboe/samples/SoundBoard/src/main/cpp/Synth.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef SOUNDBOARD_SYNTH_H -#define SOUNDBOARD_SYNTH_H - -#include <array> -#include <TappableAudioSource.h> - -#include <SynthSound.h> -#include <Mixer.h> -#include <MonoToStereo.h> - -constexpr float kOscBaseFrequency = 196.00; // Start at G3 -constexpr float kOscFrequencyMultiplier = 1.05946309436; -constexpr float kOscBaseAmplitude = 0.20; -constexpr float kOscAmplitudeMultiplier = 0.96; - -class Synth : public IRenderableAudio, public ITappable { -public: - static ::std::shared_ptr<Synth> create(const int32_t sampleRate, const int32_t channelCount, const int32_t numSignals) { - return ::std::make_shared<Synth>(sampleRate, channelCount, numSignals); - } - - Synth(const int32_t sampleRate, const int32_t channelCount, const int32_t numSignals) { - mNumSignals = numSignals; - mOscs = std::make_unique<SynthSound[]>(numSignals); - float curFrequency = kOscBaseFrequency; - float curAmplitude = kOscBaseAmplitude; - for (int i = 0; i < numSignals; ++i) { - mOscs[i].setSampleRate(sampleRate); - mOscs[i].setFrequency(curFrequency); - curFrequency *= kOscFrequencyMultiplier; - mOscs[i].setAmplitude(curAmplitude); - curAmplitude *= kOscAmplitudeMultiplier; - mMixer.addTrack(&mOscs[i]); - } - - if (channelCount == oboe::ChannelCount::Stereo) { - mOutputStage = &mConverter; - } else { - mOutputStage = &mMixer; - } - } - - void noteOff(int32_t noteIndex) { - mOscs[noteIndex].noteOff(); - } - - void noteOn(int32_t noteIndex) { - mOscs[noteIndex].noteOn(); - } - - void tap(bool isOn) override { - for (int i = 0; i < mNumSignals; i++) { - if (isOn) { - mOscs[i].noteOn(); - } else { - mOscs[i].noteOff(); - } - } - }; - - // From IRenderableAudio - void renderAudio(float *audioData, int32_t numFrames) override { - mOutputStage->renderAudio(audioData, numFrames); - }; - - virtual ~Synth() { - } -private: - // Rendering objects - int32_t mNumSignals; - std::unique_ptr<SynthSound[]> mOscs; - Mixer mMixer; - MonoToStereo mConverter = MonoToStereo(&mMixer); - IRenderableAudio *mOutputStage; // This will point to either the mixer or converter, so it needs to be raw -}; - - -#endif //SOUNDBOARD_SYNTH_H diff --git a/externals/oboe/samples/SoundBoard/src/main/cpp/native-lib.cpp b/externals/oboe/samples/SoundBoard/src/main/cpp/native-lib.cpp deleted file mode 100644 index dcd0464162..0000000000 --- a/externals/oboe/samples/SoundBoard/src/main/cpp/native-lib.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <jni.h> -#include <string> -#include <vector> - -#include "SoundBoardEngine.h" - -extern "C" { -/** - * Start the audio engine - * - * @param env - * @param instance - * @param jCpuIds - CPU core IDs which the audio process should affine to - * @return a pointer to the audio engine. This should be passed to other methods - */ -JNIEXPORT jlong JNICALL -Java_com_google_oboe_samples_soundboard_MainActivity_startEngine(JNIEnv *env, jobject /*unused*/, - jint jNumSignals) { - LOGD("numSignals : %d", static_cast<int>(jNumSignals)); - SoundBoardEngine *engine = new SoundBoardEngine(jNumSignals); - - if (!engine->start()) { - LOGE("Failed to start SoundBoard Engine"); - delete engine; - engine = nullptr; - } else { - LOGD("Engine Started"); - } - return reinterpret_cast<jlong>(engine); -} - -JNIEXPORT void JNICALL -Java_com_google_oboe_samples_soundboard_MainActivity_stopEngine(JNIEnv *env, jobject instance, - jlong jEngineHandle) { - auto engine = reinterpret_cast<SoundBoardEngine*>(jEngineHandle); - if (engine) { - engine->stop(); - delete engine; - } else { - LOGD("Engine invalid, call startEngine() to create"); - } -} - -JNIEXPORT void JNICALL -Java_com_google_oboe_samples_soundboard_MainActivity_native_1setDefaultStreamValues(JNIEnv *env, - jclass type, - jint sampleRate, - jint framesPerBurst) { - oboe::DefaultStreamValues::SampleRate = (int32_t) sampleRate; - oboe::DefaultStreamValues::FramesPerBurst = (int32_t) framesPerBurst; -} - -JNIEXPORT void JNICALL -Java_com_google_oboe_samples_soundboard_NoteListener_noteOff(JNIEnv *env, jobject thiz, - jlong engine_handle, jint noteIndex) { - auto *engine = reinterpret_cast<SoundBoardEngine*>(engine_handle); - if (engine) { - engine->noteOff(noteIndex); - } else { - LOGE("Engine handle is invalid, call createEngine() to create a new one"); - } -} - -JNIEXPORT void JNICALL -Java_com_google_oboe_samples_soundboard_NoteListener_noteOn(JNIEnv *env, jobject thiz, - jlong engine_handle, jint noteIndex) { - auto *engine = reinterpret_cast<SoundBoardEngine*>(engine_handle); - if (engine) { - engine->noteOn(noteIndex); - } else { - LOGE("Engine handle is invalid, call createEngine() to create a new one"); - } -} - -} // extern "C" |
