FC loader: the final fixes for this night
This commit is contained in:
parent
206b3af12a
commit
20c5e14f26
|
|
@ -2642,10 +2642,12 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
int lastIns[4];
|
int lastIns[4];
|
||||||
int lastNote[4];
|
int lastNote[4];
|
||||||
signed char lastTranspose[4];
|
signed char lastTranspose[4];
|
||||||
|
bool isSliding[4];
|
||||||
|
|
||||||
memset(lastIns,-1,4*sizeof(int));
|
memset(lastIns,-1,4*sizeof(int));
|
||||||
memset(lastNote,-1,4*sizeof(int));
|
memset(lastNote,-1,4*sizeof(int));
|
||||||
memset(lastTranspose,0,4);
|
memset(lastTranspose,0,4);
|
||||||
|
memset(isSliding,0,4*sizeof(bool));
|
||||||
|
|
||||||
for (unsigned int i=0; i<seqLen; i++) {
|
for (unsigned int i=0; i<seqLen; i++) {
|
||||||
for (int j=0; j<4; j++) {
|
for (int j=0; j<4; j++) {
|
||||||
|
|
@ -2659,7 +2661,6 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ignoreNext=false;
|
bool ignoreNext=false;
|
||||||
bool isSliding=false;
|
|
||||||
|
|
||||||
for (int k=0; k<32; k++) {
|
for (int k=0; k<32; k++) {
|
||||||
FCPattern& fp=pat[seq[i].pat[j]];
|
FCPattern& fp=pat[seq[i].pat[j]];
|
||||||
|
|
@ -2675,8 +2676,8 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
octave&=0xff;
|
octave&=0xff;
|
||||||
p->data[k][0]=note;
|
p->data[k][0]=note;
|
||||||
p->data[k][1]=octave;
|
p->data[k][1]=octave;
|
||||||
if (isSliding) {
|
if (isSliding[j]) {
|
||||||
isSliding=false;
|
isSliding[j]=false;
|
||||||
p->data[k][4]=2;
|
p->data[k][4]=2;
|
||||||
p->data[k][5]=0;
|
p->data[k][5]=0;
|
||||||
}
|
}
|
||||||
|
|
@ -2714,9 +2715,9 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
if (fp.val[k]&0x40) {
|
if (fp.val[k]&0x40) {
|
||||||
p->data[k][4]=2;
|
p->data[k][4]=2;
|
||||||
p->data[k][5]=0;
|
p->data[k][5]=0;
|
||||||
isSliding=false;
|
isSliding[j]=false;
|
||||||
} else if (fp.val[k]&0x80) {
|
} else if (fp.val[k]&0x80) {
|
||||||
isSliding=true;
|
isSliding[j]=true;
|
||||||
if (k<31) {
|
if (k<31) {
|
||||||
if (fp.val[k+1]&0x20) {
|
if (fp.val[k+1]&0x20) {
|
||||||
p->data[k][4]=2;
|
p->data[k][4]=2;
|
||||||
|
|
@ -2856,7 +2857,9 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
} else if (fm.val[j]==0xe8) {
|
} else if (fm.val[j]==0xe8) {
|
||||||
logV("unhandled sustain!");
|
logV("unhandled sustain!");
|
||||||
} else if (fm.val[j]==0xe7) {
|
} else if (fm.val[j]==0xe7) {
|
||||||
logV("unhandled newseq!");
|
if (++j>=64) break;
|
||||||
|
fm=freqMacros[MIN(fm.val[j],freqMacros.size()-1)];
|
||||||
|
j=0;
|
||||||
} else if (fm.val[j]==0xe9) {
|
} else if (fm.val[j]==0xe9) {
|
||||||
logV("unhandled pack!");
|
logV("unhandled pack!");
|
||||||
} else if (fm.val[j]==0xea) {
|
} else if (fm.val[j]==0xea) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue