From aaca180683654111ad9265d001909d242ebdef23 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 18 Jan 2022 02:04:03 -0500 Subject: [PATCH] add per-channel audio export --- src/engine/engine.cpp | 86 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 8a422a36b..424747338 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2172,6 +2172,10 @@ void DivEngine::runExportThread() { } } + delete[] outBuf[0]; + delete[] outBuf[1]; + delete[] outBuf[2]; + if (sf_close(sf)!=0) { logE("could not close audio file!\n"); } @@ -2204,7 +2208,7 @@ void DivEngine::runExportThread() { } for (int i=0; imuteChannel(dispatchChanOfChan[j],isMuted[j]); + } + } + + curOrder=0; + remainingLoops=loopCount; + playSub(false); + + while (playing) { + nextBuf(NULL,outBuf,0,2,EXPORT_BUFSIZE); + for (int j=0; jEXPORT_BUFSIZE) { + logE("error: total processed is bigger than export bufsize! %d>%d\n",totalProcessed,EXPORT_BUFSIZE); + } + if (sf_writef_float(sf,outBuf[2],totalProcessed)!=(int)totalProcessed) { + logE("error: failed to write entire buffer!\n"); + break; + } + } + + if (sf_close(sf)!=0) { + logE("could not close audio file!\n"); + } + } + exporting=false; + + delete[] outBuf[0]; + delete[] outBuf[1]; + delete[] outBuf[2]; + + for (int i=0; imuteChannel(dispatchChanOfChan[i],false); + } + } + + if (initAudioBackend()) { + for (int i=0; isetRun(true)) { + logE("error while activating audio!\n"); + } + } break; } }