1
0
Fork 0

TMB: fix all instruments becoming pianos

This commit is contained in:
Sen 2025-09-03 21:25:56 +02:00
parent 114fbdfde1
commit c698a030eb
Signed by: sen
GPG key ID: 3AC50A6F47D1B722

View file

@ -169,25 +169,25 @@ typedef struct {
private static Instrument tmb_read_instr(byte[] data, int offset, boolean drum) { private static Instrument tmb_read_instr(byte[] data, int offset, boolean drum) {
Operator[] ops = new Operator[2]; Operator[] ops = new Operator[2];
int transpose = drum ? 0 : (int)((byte)data[11]); int transpose = drum ? 0 : (int)((byte)data[offset + 11]);
for(int op = 0; op < 2; op++) { for(int op = 0; op < 2; op++) {
boolean tremolo = (data[op+0] & 0x80) != 0; boolean tremolo = (data[offset + op+0] & 0x80) != 0;
boolean vibrato = (data[op+0] & 0x40) != 0; boolean vibrato = (data[offset + op+0] & 0x40) != 0;
boolean sustaining = (data[op+0] & 0x20) != 0; boolean sustaining = (data[offset + op+0] & 0x20) != 0;
boolean ksr = (data[op+0] & 0x10) != 0; boolean ksr = (data[offset + op+0] & 0x10) != 0;
int mult = data[op+0] & 0x0f; int mult = data[offset + op+0] & 0x0f;
int attack = ((data[op+4] & 255) >> 4) & 0x0f; int attack = ((data[offset + op+4] & 255) >> 4) & 0x0f;
int decay = data[op+4] & 0x0f; int decay = data[offset + op+4] & 0x0f;
int sustain = ((data[op+6] & 255) >> 4) & 0x0f; int sustain = ((data[offset + op+6] & 255) >> 4) & 0x0f;
int release = data[op+6] & 0x0f; int release = data[offset + op+6] & 0x0f;
int waveform = data[op+8] & 0x07; int waveform = data[offset + op+8] & 0x07;
int ksl = ((data[op+2] & 255) >> 6) & 0x03; int ksl = ((data[offset + op+2] & 255) >> 6) & 0x03;
int level = data[op+2] & 0x3f; int level = data[offset + op+2] & 0x3f;
ops[op] = new Operator(mult, level, waveform, attack, decay, sustain, release, tremolo, vibrato, sustaining, ksr, ksl, transpose, 0); ops[op] = new Operator(mult, level, waveform, attack, decay, sustain, release, tremolo, vibrato, sustaining, ksr, ksl, transpose, 0);
} }
Instrument ins = new Instrument((data[10] >> 1) & 0x07, 0, data[10] & 0x01, ops); Instrument ins = new Instrument((data[offset + 10] >> 1) & 0x07, 0, data[offset + 10] & 0x01, ops);
if(drum) if(drum)
ins.setFixed(data[11] & 0x7f); ins.setFixed(data[offset + 11] & 0x7f);
return ins; return ins;
} }