Files
lockstep/app/src/main/cpp/lockstep.cpp

62 lines
1.8 KiB
C++
Raw Normal View History

2026-02-01 02:54:05 +01:00
// Write C++ code here.
//
// Do not forget to dynamically load the C++ library into your application.
//
// For instance,
//
// In at.lockstep.app.MainActivity.java:
// static {
// System.loadLibrary("lockstep");
// }
//
// Or, in at.lockstep.app.MainActivity.kt:
// companion object {
// init {
// System.loadLibrary("lockstep")
// }
// }
#include "PlaybackEngine.h"
#include <jni.h>
#include <oboe/Oboe.h>
extern "C" {
/**
* Creates the audio engine
*
* @return a pointer to the audio engine. This should be passed to other methods
*/
JNIEXPORT jlong JNICALL
Java_at_lockstep_pb_PlaybackEngine_native_1createEngine(
JNIEnv *env,
2026-03-03 12:04:17 +01:00
jclass /*unused*/, jstring filesDir) {
2026-02-01 02:54:05 +01:00
const char* filesDirTemp = env->GetStringUTFChars(filesDir, NULL);
std::string filesDirString(filesDirTemp);
env->ReleaseStringUTFChars(filesDir, filesDirTemp);
// We use std::nothrow so `new` returns a nullptr if the engine creation fails
2026-03-03 12:04:17 +01:00
auto *engine = new(std::nothrow) PlaybackEngine(filesDirString);
2026-02-01 02:54:05 +01:00
return reinterpret_cast<jlong>(engine);
}
JNIEXPORT void JNICALL
Java_at_lockstep_pb_PlaybackEngine_native_1deleteEngine(
JNIEnv *env,
jclass,
jlong engineHandle) {
delete reinterpret_cast<PlaybackEngine *>(engineHandle);
}
2026-03-03 12:04:17 +01:00
JNIEXPORT void JNICALL
Java_at_lockstep_pb_PlaybackEngine_native_1setDefaultStreamValues(JNIEnv *env,
jclass type,
jint sampleRate,
jint framesPerBurst) {
oboe::DefaultStreamValues::SampleRate = (int32_t) sampleRate;
oboe::DefaultStreamValues::FramesPerBurst = (int32_t) framesPerBurst;
}
2026-02-01 02:54:05 +01:00
} // extern "C"