hack to use first sample in instrument rather than last one

This commit is contained in:
Andy Sloane 2015-10-30 08:53:39 -07:00
commit dacb1a5852

43
xm.js
View file

@ -919,24 +919,27 @@ function playXM(arrayBuf) {
var totalsamples = 0; var totalsamples = 0;
for (var j = 0; j < nsamp; j++) { for (var j = 0; j < nsamp; j++) {
var samplen = dv.getUint32(idx, true); var samplen = dv.getUint32(idx, true);
var samploop = dv.getUint32(idx+4, true); if (j == 0) {
var samplooplen = dv.getUint32(idx+8, true); var samplen0 = samplen; // FIXME HACK HACK HACK
var sampvol = dv.getUint8(idx+12); var samploop = dv.getUint32(idx+4, true);
var sampfinetune = dv.getInt8(idx+13); var samplooplen = dv.getUint32(idx+8, true);
var samptype = dv.getUint8(idx+14); var sampvol = dv.getUint8(idx+12);
var samppan = dv.getUint8(idx+15); var sampfinetune = dv.getInt8(idx+13);
var sampnote = dv.getInt8(idx+16); var samptype = dv.getUint8(idx+14);
var sampname = getstring(dv, idx+18, 22); var samppan = dv.getUint8(idx+15);
var sampleoffset = idx + samphdrsiz; var sampnote = dv.getInt8(idx+16);
console.log("sample %d: len %d name '%s' loop %d/%d vol %d", var sampname = getstring(dv, idx+18, 22);
j, samplen, sampname, samploop, samplooplen, sampvol); var sampleoffset = idx + samphdrsiz;
console.log(" type %d note %s(%d) finetune %d pan %d", console.log("sample %d: len %d name '%s' loop %d/%d vol %d",
samptype, prettify_note(sampnote + 12*4), sampnote, sampfinetune, samppan); j, samplen, sampname, samploop, samplooplen, sampvol);
console.log(" vol env", env_vol, env_vol_sustain, console.log(" type %d note %s(%d) finetune %d pan %d",
env_vol_loop_start, env_vol_loop_end, "type", env_vol_type, samptype, prettify_note(sampnote + 12*4), sampnote, sampfinetune, samppan);
"fadeout", vol_fadeout); console.log(" vol env", env_vol, env_vol_sustain,
console.log(" pan env", env_pan, env_pan_sustain, env_vol_loop_start, env_vol_loop_end, "type", env_vol_type,
env_pan_loop_start, env_pan_loop_end, "type", env_pan_type); "fadeout", vol_fadeout);
console.log(" pan env", env_pan, env_pan_sustain,
env_pan_loop_start, env_pan_loop_end, "type", env_pan_type);
}
idx += samphdrsiz; idx += samphdrsiz;
totalsamples += samplen; totalsamples += samplen;
} }
@ -944,12 +947,12 @@ function playXM(arrayBuf) {
inst = { inst = {
'name': instname, 'name': instname,
'number': i, 'number': i,
'len': samplen, 'loop': samploop, 'len': samplen0, 'loop': samploop,
'looplen': samplooplen, 'note': sampnote, 'fine': sampfinetune, 'looplen': samplooplen, 'note': sampnote, 'fine': sampfinetune,
'pan': samppan, 'type': samptype, 'vol': sampvol, 'pan': samppan, 'type': samptype, 'vol': sampvol,
'fine': sampfinetune, 'fine': sampfinetune,
'fadeout': vol_fadeout, 'fadeout': vol_fadeout,
'sampledata': ConvertSample(new Uint8Array(arrayBuf, sampleoffset, samplen), samptype & 16), 'sampledata': ConvertSample(new Uint8Array(arrayBuf, sampleoffset, samplen0), samptype & 16),
}; };
if (samptype & 16) { if (samptype & 16) {
inst.len /= 2; inst.len /= 2;