IT import: volume mapping

This commit is contained in:
tildearrow 2024-06-25 17:10:48 -05:00
parent 95bf3f2bb1
commit 2a248470af

View file

@ -35,6 +35,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
unsigned short patLen[256]; unsigned short patLen[256];
unsigned char defVol[256];
unsigned char noteMap[256][128];
bool doesPitchSlide[64]; bool doesPitchSlide[64];
bool doesVibrato[64]; bool doesVibrato[64];
bool doesPanning[64]; bool doesPanning[64];
@ -55,6 +58,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
memset(orders,0,256); memset(orders,0,256);
memset(patLen,0,256*sizeof(unsigned short)); memset(patLen,0,256*sizeof(unsigned short));
memset(defVol,0,256);
memset(noteMap,0,256*128);
try { try {
DivSong ds; DivSong ds;
ds.version=DIV_VERSION_IT; ds.version=DIV_VERSION_IT;
@ -315,6 +321,7 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
for (int j=0; j<120; j++) { for (int j=0; j<120; j++) {
ins->amiga.noteMap[j].freq=(unsigned char)reader.readC(); ins->amiga.noteMap[j].freq=(unsigned char)reader.readC();
ins->amiga.noteMap[j].map=reader.readC()-1; ins->amiga.noteMap[j].map=reader.readC()-1;
noteMap[i][j]=ins->amiga.noteMap[j].map;
} }
// TODO: envelopes... // TODO: envelopes...
@ -356,9 +363,9 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
unsigned char globalVol=reader.readC(); unsigned char globalVol=reader.readC();
unsigned char flags=reader.readC(); unsigned char flags=reader.readC();
unsigned char sampleVol=reader.readC(); defVol[i]=reader.readC();
logV("volumes: %d %d",globalVol,sampleVol); logV("volumes: %d",globalVol);
s->name=reader.readString(26); s->name=reader.readString(26);
@ -739,6 +746,8 @@ bool DivEngine::loadIT(unsigned char* file, size_t len) {
} }
if (hasVol) { if (hasVol) {
p->data[curRow][3]=vol[chan]; p->data[curRow][3]=vol[chan];
} else if (hasNote && hasIns && note[chan]<120) {
p->data[curRow][3]=defVol[noteMap[ins[chan]][note[chan]]];
} }
if (hasEffect) { if (hasEffect) {
switch (effect[chan]+'A'-1) { switch (effect[chan]+'A'-1) {