VGM export: fix stream command glitch in direct
This commit is contained in:
parent
4723ed3972
commit
4dda45116e
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue