dmid: better fnumber calculation and fix fine tuning for 2nd voice

This commit is contained in:
qwx 2018-07-21 05:05:53 +02:00
parent 2d6f9f4700
commit f4b9f0304d

View file

@ -31,7 +31,7 @@ enum{
struct Inst{ struct Inst{
int fixed; int fixed;
int dbl; int dbl;
uchar fine; int fine;
uchar n; uchar n;
uchar i[13]; uchar i[13];
uchar i2[13]; uchar i2[13];
@ -225,13 +225,16 @@ getch(void)
void void
setoct(Opl *o) setoct(Opl *o)
{ {
int n, b, f; int n, b, f, d;
double e;
n = o->n + o->c->bend / 0x1000 & 0x7f; d = o->c->bend;
f = freq[n] + (o->c->bend % 0x1000) * (freq[n+1] - freq[n]) / 0x1000; d += o->i == o->c->i->i2 ? o->c->i->fine : 0;
f = (f * (1 << 20)) / 49716; n = o->n + d / 0x1000 & 0x7f;
//if(o->i == o->c->i->i2) e = freq[n] + (d % 0x1000) * (freq[n+1] - freq[n]) / 0x1000;
// f += o->c->i->fine; /* nope */ if(o->c->i->fixed)
e = (double)(int)e;
f = (e * (1 << 20)) / 49716;
for(b=1; b<8; b++, f>>=1) for(b=1; b<8; b++, f>>=1)
if(f < 1024) if(f < 1024)
break; break;
@ -448,7 +451,7 @@ readinst(char *file)
i->fixed = n & 1<<0; i->fixed = n & 1<<0;
i->dbl = opl2 ? 0 : n & 1<<2; i->dbl = opl2 ? 0 : n & 1<<2;
get8(nil); get8(nil);
i->fine = get8(nil) / 2 - 64; i->fine = (get8(nil) - 128) * 64;
i->n = get8(nil); i->n = get8(nil);
bread(i->i, sizeof i->i); bread(i->i, sizeof i->i);
get8(nil); get8(nil);