VGM export: fix stream command glitch in direct

This commit is contained in:
tildearrow 2022-10-17 14:28:41 -05:00
parent 4723ed3972
commit 4dda45116e

View file

@ -515,37 +515,39 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write
break; break;
} }
} }
if (write.addr>=0xffff0000 && !directStream) { // Furnace special command if (write.addr>=0xffff0000) { // Furnace special command
unsigned char streamID=streamOff+((write.addr&0xff00)>>8); if (!directStream) {
logD("writing stream command %x:%x with stream ID %d",write.addr,write.val,streamID); unsigned char streamID=streamOff+((write.addr&0xff00)>>8);
switch (write.addr&0xff) { logD("writing stream command %x:%x with stream ID %d",write.addr,write.val,streamID);
case 0: // play sample switch (write.addr&0xff) {
if (write.val<song.sampleLen) { case 0: // play sample
DivSample* sample=song.sample[write.val]; if (write.val<song.sampleLen) {
w->writeC(0x95); DivSample* sample=song.sample[write.val];
w->writeC(streamID); w->writeC(0x95);
w->writeS(write.val); // sample number w->writeC(streamID);
w->writeC((sample->getLoopStartPosition(DIV_SAMPLE_DEPTH_8BIT)==0)|(sampleDir[streamID]?0x10:0)); // flags w->writeS(write.val); // sample number
if (sample->isLoopable() && !sampleDir[streamID]) { w->writeC((sample->getLoopStartPosition(DIV_SAMPLE_DEPTH_8BIT)==0)|(sampleDir[streamID]?0x10:0)); // flags
loopTimer[streamID]=sample->length8; if (sample->isLoopable() && !sampleDir[streamID]) {
loopSample[streamID]=write.val; loopTimer[streamID]=sample->length8;
loopSample[streamID]=write.val;
}
} }
} break;
break; case 1: // set sample freq
case 1: // set sample freq w->writeC(0x92);
w->writeC(0x92); w->writeC(streamID);
w->writeC(streamID); w->writeI(write.val);
w->writeI(write.val); loopFreq[streamID]=write.val;
loopFreq[streamID]=write.val; break;
break; case 2: // stop sample
case 2: // stop sample w->writeC(0x94);
w->writeC(0x94); w->writeC(streamID);
w->writeC(streamID); loopSample[streamID]=-1;
loopSample[streamID]=-1; break;
break; case 3: // set sample direction
case 3: // set sample direction sampleDir[streamID]=write.val;
sampleDir[streamID]=write.val; break;
break; }
} }
return; return;
} }