From 192bd8a5fff48923436571640f4a9132cf1ec382 Mon Sep 17 00:00:00 2001 From: Eknous-P Date: Tue, 30 Dec 2025 00:04:52 +0400 Subject: [PATCH] use absolute values for per-chip peaks and zero out when engine not running --- src/engine/playback.cpp | 58 ++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/src/engine/playback.cpp b/src/engine/playback.cpp index 05f70c4ba..650f9c297 100644 --- a/src/engine/playback.cpp +++ b/src/engine/playback.cpp @@ -3401,35 +3401,39 @@ void DivEngine::nextBuf(float** in, float** out, int inChans, int outChans, unsi oscSize=size; // get per-chip peaks - float decay=2.f*size/got.rate; - for (int i=0; igetOutputCount(); j++) { - if (disCont[i].bbOut[j]==NULL) continue; - chipPeak[i][j]*=1.0-decay; - float peak=chipPeak[i][j]; - for (unsigned int k=0; kgetPostAmp()/32768.0f; // TODO: PARSE PANNING, FRONT/REAR AND PATCHBAY - // switch (j) { - // case 0: - // out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]); - // break; - // case 1: - // out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]); - // break; - // case 2: - // out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]); - // break; - // case 3: - // out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]); - // break; - // default: break; - // } - if (out>peak) peak=out; + if (isRunning()) { + float decay=2.f*size/got.rate; + for (int i=0; igetOutputCount(); j++) { + if (disCont[i].bbOut[j]==NULL) continue; + chipPeak[i][j]*=1.0-decay; + float peak=chipPeak[i][j]; + for (unsigned int k=0; kgetPostAmp()/32768.0f); // TODO: PARSE PANNING, FRONT/REAR AND PATCHBAY + // switch (j) { + // case 0: + // out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]); + // break; + // case 1: + // out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f+song.systemPanFR[i]); + // break; + // case 2: + // out*=MIN(1.0f,1.0f-song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]); + // break; + // case 3: + // out*=MIN(1.0f,1.0f+song.systemPan[i])*MIN(1.0f,1.0f-song.systemPanFR[i]); + // break; + // default: break; + // } + if (out>peak) peak=out; + } + chipPeak[i][j]+=(peak-chipPeak[i][j])*0.9; } - chipPeak[i][j]+=(peak-chipPeak[i][j])*0.9; } + } else { + memset(chipPeak,0,sizeof(chipPeak)); } // force mono audio (if enabled)