From 68383869d3777e47eea7eb5b2313dcd6eb54fba6 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 11 May 2024 02:32:35 -0500 Subject: [PATCH] audio export: fix channel count in per-chan export --- src/engine/wavOps.cpp | 34 ++++++++++++++++++++-------------- src/gui/exportOptions.cpp | 8 +++++--- 2 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/engine/wavOps.cpp b/src/engine/wavOps.cpp index 072f0b9d6..f904994ac 100644 --- a/src/engine/wavOps.cpp +++ b/src/engine/wavOps.cpp @@ -243,10 +243,12 @@ void DivEngine::runExportThread() { // take control of audio output deinitAudioBackend(); - float* outBuf[3]; - outBuf[0]=new float[EXPORT_BUFSIZE]; - outBuf[1]=new float[EXPORT_BUFSIZE]; - outBuf[2]=new float[EXPORT_BUFSIZE*2]; + float* outBuf[DIV_MAX_OUTPUTS]; + float* outBufFinal; + for (int i=0; iEXPORT_BUFSIZE) { logE("error: total processed is bigger than export bufsize! %d>%d",totalProcessed,EXPORT_BUFSIZE); totalProcessed=EXPORT_BUFSIZE; } + int fi=0; for (int j=0; j<(int)totalProcessed; j++) { total++; if (isFadingOut) { double mul=(1.0-((double)curFadeOutSample/(double)fadeOutSamples)); - outBuf[2][j<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][j]))*mul; - outBuf[2][1+(j<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][j]))*mul; + for (int k=0; k=fadeOutSamples) { playing=false; break; } } else { - outBuf[2][j<<1]=MAX(-1.0f,MIN(1.0f,outBuf[0][j])); - outBuf[2][1+(j<<1)]=MAX(-1.0f,MIN(1.0f,outBuf[1][j])); + for (int k=0; k-1 && j>=lastLoopPos && totalLoops>=exportLoopCount) { logD("start fading out..."); isFadingOut=true; @@ -318,7 +323,7 @@ void DivEngine::runExportThread() { } } } - if (sf_writef_float(sf,outBuf[2],total)!=(int)total) { + if (sf_writef_float(sf,outBufFinal,total)!=(int)total) { logE("error: failed to write entire buffer!"); break; } @@ -341,9 +346,10 @@ void DivEngine::runExportThread() { if (stopExport) break; } - delete[] outBuf[0]; - delete[] outBuf[1]; - delete[] outBuf[2]; + delete[] outBufFinal; + for (int i=0; i384000) audioExportOptions.sampleRate=384000; } - if (ImGui::InputInt("Channels in file",&audioExportOptions.chans,1,1)) { - if (audioExportOptions.chans<1) audioExportOptions.chans=1; - if (audioExportOptions.chans>16) audioExportOptions.chans=16; + if (audioExportOptions.mode!=DIV_EXPORT_MODE_MANY_SYS) { + if (ImGui::InputInt("Channels in file",&audioExportOptions.chans,1,1)) { + if (audioExportOptions.chans<1) audioExportOptions.chans=1; + if (audioExportOptions.chans>16) audioExportOptions.chans=16; + } } if (ImGui::InputInt("Loops",&audioExportOptions.loops,1,2)) {