old .dmf loading improvements

- YMU759 samples are now properly loaded
- improvements to version 7 and 8 format handling
This commit is contained in:
tildearrow 2022-05-14 17:23:33 -05:00
parent ce253230ce
commit 2fc637494f

View file

@ -190,7 +190,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
ds.timeBase=reader.readC(); ds.timeBase=reader.readC();
ds.speed1=reader.readC(); ds.speed1=reader.readC();
if (ds.version>0x05) { if (ds.version>0x07) {
ds.speed2=reader.readC(); ds.speed2=reader.readC();
ds.pal=reader.readC(); ds.pal=reader.readC();
ds.hz=(ds.pal)?60:50; ds.hz=(ds.pal)?60:50;
@ -788,7 +788,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
pitch=reader.readC(); pitch=reader.readC();
vol=reader.readC(); vol=reader.readC();
} }
if (ds.version<=0x05) { if (ds.version<=0x08) {
sample->rate=ymuSampleRate*400; sample->rate=ymuSampleRate*400;
} }
if (ds.version>0x15) { if (ds.version>0x15) {
@ -798,15 +798,15 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
sample->depth=16; sample->depth=16;
} }
} else { } else {
if (ds.version>0x05) { if (ds.version>0x08) {
sample->depth=16; sample->depth=16;
} else { } else {
// it appears samples were stored as ADPCM back then // it appears samples were stored as ADPCM back then
sample->depth=6; sample->depth=3;
} }
} }
if (length>0) { if (length>0) {
if (ds.version>0x05) { if (ds.version>0x08) {
if (ds.version<0x0b) { if (ds.version<0x0b) {
data=new short[1+(length/2)]; data=new short[1+(length/2)];
reader.read(data,length); reader.read(data,length);
@ -842,8 +842,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
delete[] data; delete[] data;
} else { } else {
// ADPCM? // YMZ ADPCM
// it appears to be a slightly modified version of ADPCM-B!
adpcmData=new unsigned char[length]; adpcmData=new unsigned char[length];
logV("%x",reader.tell()); logV("%x",reader.tell());
reader.read(adpcmData,length); reader.read(adpcmData,length);
@ -854,7 +853,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
logE("%d: error while initializing sample!",i); logE("%d: error while initializing sample!",i);
} }
memcpy(sample->dataB,adpcmData,length); memcpy(sample->dataZ,adpcmData,length);
delete[] adpcmData; delete[] adpcmData;
} }
} }