mirror of
https://github.com/tildearrow/furnace.git
synced 2024-12-01 00:43:02 +00:00
FC loader: sample loop point and more fixes
This commit is contained in:
parent
4663534fa3
commit
bef8cf5f5f
1 changed files with 16 additions and 4 deletions
|
@ -2470,8 +2470,8 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
logD("samples: (%x)",reader.tell());
|
logD("samples: (%x)",reader.tell());
|
||||||
for (int i=0; i<10; i++) {
|
for (int i=0; i<10; i++) {
|
||||||
sample[i].len=reader.readS_BE();
|
sample[i].len=reader.readS_BE();
|
||||||
sample[i].loopLen=reader.readS_BE();
|
|
||||||
sample[i].loopStart=reader.readS_BE();
|
sample[i].loopStart=reader.readS_BE();
|
||||||
|
sample[i].loopLen=reader.readS_BE();
|
||||||
|
|
||||||
logD("- %d: %d (%d, %d)",i,sample[i].len,sample[i].loopStart,sample[i].loopLen);
|
logD("- %d: %d (%d, %d)",i,sample[i].len,sample[i].loopStart,sample[i].loopLen);
|
||||||
}
|
}
|
||||||
|
@ -2574,8 +2574,10 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
s->init(sample[i].len*2);
|
s->init(sample[i].len*2);
|
||||||
}
|
}
|
||||||
s->name=fmt::sprintf("Sample %d",i+1);
|
s->name=fmt::sprintf("Sample %d",i+1);
|
||||||
s->loopStart=sample[i].loopStart*2;
|
if (sample[i].loopLen>1) {
|
||||||
s->loopEnd=(sample[i].loopStart+sample[i].loopLen)*2;
|
s->loopStart=sample[i].loopStart;
|
||||||
|
s->loopEnd=sample[i].loopStart+(sample[i].loopLen*2);
|
||||||
|
}
|
||||||
reader.read(s->data8,sample[i].len*2);
|
reader.read(s->data8,sample[i].len*2);
|
||||||
ds.sample.push_back(s);
|
ds.sample.push_back(s);
|
||||||
}
|
}
|
||||||
|
@ -2703,7 +2705,11 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
if (ignoreNext) {
|
if (ignoreNext) {
|
||||||
ignoreNext=false;
|
ignoreNext=false;
|
||||||
} else {
|
} else {
|
||||||
if (fp.val[k]&0xe0) {
|
if (fp.val[k]==0xf0) {
|
||||||
|
p->data[k][0]=100;
|
||||||
|
p->data[k][1]=0;
|
||||||
|
p->data[k][2]=-1;
|
||||||
|
} else if (fp.val[k]&0xe0) {
|
||||||
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;
|
||||||
|
@ -2780,6 +2786,7 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
ins->std.volMacro.val[ins->std.volMacro.len]=lastVal;
|
ins->std.volMacro.val[ins->std.volMacro.len]=lastVal;
|
||||||
if (++ins->std.volMacro.len>=128) break;
|
if (++ins->std.volMacro.len>=128) break;
|
||||||
}
|
}
|
||||||
|
if (ins->std.volMacro.len>=128) break;
|
||||||
} else if (m.val[j]==0xe9 || m.val[j]==0xea) { // volume slide
|
} else if (m.val[j]==0xe9 || m.val[j]==0xea) { // volume slide
|
||||||
if (++j>=64) break;
|
if (++j>=64) break;
|
||||||
signed char slideStep=m.val[j];
|
signed char slideStep=m.val[j];
|
||||||
|
@ -2870,6 +2877,11 @@ bool DivEngine::loadFC(unsigned char* file, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// waveform width
|
||||||
|
if (lastVal>=10 && (unsigned int)(lastVal-10)<ds.wave.size()) {
|
||||||
|
ins->amiga.waveLen=ds.wave[lastVal-10]->len-1;
|
||||||
|
}
|
||||||
|
|
||||||
// vibrato
|
// vibrato
|
||||||
for (int j=0; j<=vibDelay; j++) {
|
for (int j=0; j<=vibDelay; j++) {
|
||||||
ins->std.pitchMacro.val[ins->std.pitchMacro.len]=0;
|
ins->std.pitchMacro.val[ins->std.pitchMacro.len]=0;
|
||||||
|
|
Loading…
Reference in a new issue