diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index bca4fe1cb..c00d141b8 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -8,6 +8,7 @@ #include +#include "audio_core/dsp_interface.h" #include "common/file_util.h" #include "common/logging/log.h" #include "common/microprofile.h" @@ -167,6 +168,20 @@ static Core::System::ResultStatus RunCitra(const std::string& filepath) { SCOPE_EXIT({ TryShutdown(); }); + // Audio stretching on Android is only useful with lower framerates, disable it when fullspeed + Core::TimingEventType* audio_stretching_event{}; + const s64 audio_stretching_ticks {msToCycles(500)}; + audio_stretching_event = system.CoreTiming().RegisterEvent( + "AudioStretchingEvent", [&](u64, s64 cycles_late) { + if (Settings::values.enable_audio_stretching) { + Core::DSP().EnableStretching(Core::System::GetInstance().GetAndResetPerfStats().emulation_speed < 0.95); + } + + system.CoreTiming().ScheduleEvent(audio_stretching_ticks - cycles_late, audio_stretching_event); + }); + system.CoreTiming().ScheduleEvent(audio_stretching_ticks, audio_stretching_event); + + // Start running emulation while (is_running) { if (!pause_emulation) { system.RunLoop();