From 60d01de6fc2c09f23c6da30d7ed219d08b181f15 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 25 Sep 2024 13:12:34 -0500 Subject: [PATCH] VGM export: QSound ADPCM fix, for real this time --- src/engine/vgmOps.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/engine/vgmOps.cpp b/src/engine/vgmOps.cpp index de8e499b8..6ea8af362 100644 --- a/src/engine/vgmOps.cpp +++ b/src/engine/vgmOps.cpp @@ -2283,8 +2283,11 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p w->writeI(0); w->write(writeADPCM_Y8950[i]->getSampleMem(0),writeADPCM_Y8950[i]->getSampleMemUsage(0)); } - if (writeQSound[i]!=NULL && writeQSound[i]->getSampleMemUsage(1)>0) { - unsigned int blockSize=(writeQSound[i]->getSampleMemUsage(1)+0xffff)&(~0xffff); + // QSound has two sample types sharing the same memory. + // however, they are prepresented as separate memories in Furnace. + // we find the largest one to see how much memory is being used in total. + if (writeQSound[i]!=NULL && (writeQSound[i]->getSampleMemUsage(0)>0 || writeQSound[i]->getSampleMemUsage(1)>0)) { + unsigned int blockSize=(writeQSound[i]->getSampleMemUsage(0)+writeQSound[i]->getSampleMemUsage(1)+0xffff)&(~0xffff); if (blockSize > 0x1000000) { blockSize = 0x1000000; } @@ -2292,7 +2295,7 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p w->writeC(0x66); w->writeC(0x8F); w->writeI((blockSize+8)|(i*0x80000000)); - w->writeI(writeQSound[i]->getSampleMemCapacity(1)); + w->writeI(writeQSound[i]->getSampleMemCapacity(0)); w->writeI(0); w->write(writeQSound[i]->getSampleMem(),blockSize); }