diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 94f5d5b34..ee4b4b20e 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -402,6 +402,8 @@ void DivEngine::runExportThread() { } i--; } + + if (stopExport) break; } exporting=false; @@ -429,12 +431,25 @@ void DivEngine::runExportThread() { break; } } + stopExport=false; } bool DivEngine::saveAudio(const char* path, int loops, DivAudioExportModes mode) { exportPath=path; exportMode=mode; + if (exportMode!=DIV_EXPORT_MODE_ONE) { + // remove extension + String lowerCase=exportPath; + for (char& i: lowerCase) { + if (i>='A' && i<='Z') i+='a'-'A'; + } + size_t extPos=lowerCase.rfind(".wav"); + if (extPos!=String::npos) { + exportPath=exportPath.substr(0,extPos); + } + } exporting=true; + stopExport=false; stop(); repeatPattern=false; setOrder(0); @@ -450,6 +465,7 @@ void DivEngine::waitAudioFile() { } bool DivEngine::haltAudioFile() { + stopExport=true; stop(); return true; } diff --git a/src/engine/engine.h b/src/engine/engine.h index bde102a27..3d5327565 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -194,6 +194,7 @@ class DivEngine { bool repeatPattern; bool metronome; bool exporting; + bool stopExport; bool halted; bool forceMono; bool cmdStreamEnabled; @@ -736,6 +737,7 @@ class DivEngine { repeatPattern(false), metronome(false), exporting(false), + stopExport(false), halted(false), forceMono(false), cmdStreamEnabled(false),