@modplayjs/fmt-med 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -2
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +42 -0
- package/dist/index.js.map +1 -0
- package/dist/instr.d.ts +69 -0
- package/dist/instr.d.ts.map +1 -0
- package/dist/instr.js +453 -0
- package/dist/instr.js.map +1 -0
- package/dist/med2.d.ts +12 -0
- package/dist/med2.d.ts.map +1 -0
- package/dist/med2.js +240 -0
- package/dist/med2.js.map +1 -0
- package/dist/med3.d.ts +8 -0
- package/dist/med3.d.ts.map +1 -0
- package/dist/med3.js +464 -0
- package/dist/med3.js.map +1 -0
- package/dist/med4.d.ts +5 -0
- package/dist/med4.d.ts.map +1 -0
- package/dist/med4.js +813 -0
- package/dist/med4.js.map +1 -0
- package/dist/mmd1.d.ts +11 -0
- package/dist/mmd1.d.ts.map +1 -0
- package/dist/mmd1.js +496 -0
- package/dist/mmd1.js.map +1 -0
- package/dist/mmd3.d.ts +10 -0
- package/dist/mmd3.d.ts.map +1 -0
- package/dist/mmd3.js +440 -0
- package/dist/mmd3.js.map +1 -0
- package/dist/mmdCommon.d.ts +98 -0
- package/dist/mmdCommon.d.ts.map +1 -0
- package/dist/mmdCommon.js +395 -0
- package/dist/mmdCommon.js.map +1 -0
- package/dist/readevent.d.ts +6 -0
- package/dist/readevent.d.ts.map +1 -0
- package/dist/readevent.js +168 -0
- package/dist/readevent.js.map +1 -0
- package/package.json +47 -4
package/dist/mmd3.js
ADDED
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Copyright (c) 2026 Bitti09 — modplayjs contributors
|
|
3
|
+
// Ported from: libxmp src/loaders/mmd3_load.c (mmd3_test :48-72,
|
|
4
|
+
// mmd3_load :74-597). MMD2/MMD3 = OctaMED / OctaMED Soundstudio.
|
|
5
|
+
import { C4_NTSC_RATE, ParseError, Quirk, ReadEventType, } from '@modplayjs/core';
|
|
6
|
+
import { FLAG2_BMASK, FLAG2_BPM, FLAG_8CHANNEL, FLAG_STSLIDE, FLAG_VOLHEX, MMD_NUM_OCT, MED_TIME_FACTOR, mmdSetBpm, mmdTrackerVersion, mmdXlatFx, readInstrExtArray, readInstrInfoArray, zeroExpData, zeroInstrExt, } from './mmdCommon.js';
|
|
7
|
+
import { mmdLoadInstrument, } from './instr.js';
|
|
8
|
+
const XMP_MAX_KEYS = 121;
|
|
9
|
+
/** mmd3_test (mmd3_load.c:48-72). */
|
|
10
|
+
export function mmd3Test(bytes) {
|
|
11
|
+
if (bytes.length < 4)
|
|
12
|
+
return false;
|
|
13
|
+
const id = String.fromCharCode(bytes[0], bytes[1], bytes[2], bytes[3]);
|
|
14
|
+
return id === 'MMD2' || id === 'MMD3';
|
|
15
|
+
}
|
|
16
|
+
/** Title read shared with mmd1 (mmd3_test). */
|
|
17
|
+
export { mmdReadTitle } from './mmd1.js';
|
|
18
|
+
/**
|
|
19
|
+
* mmd3_load (mmd3_load.c:74-597).
|
|
20
|
+
*/
|
|
21
|
+
export function mmd3Load(bytes, ctx) {
|
|
22
|
+
const start = 0;
|
|
23
|
+
let pos = start;
|
|
24
|
+
// hio_read8/16b/32b return all-ones on EOF (dataio.c read8/read16b/
|
|
25
|
+
// read32b error returns) — a truncated header must be seen as 0xffff...,
|
|
26
|
+
// not as zeros (load_mmd0_truncated.med).
|
|
27
|
+
const u8 = () => {
|
|
28
|
+
const v = pos < bytes.length ? bytes[pos] : 0xff;
|
|
29
|
+
pos++;
|
|
30
|
+
return v;
|
|
31
|
+
};
|
|
32
|
+
const s8 = () => ((u8() << 24) >> 24);
|
|
33
|
+
const u16 = () => {
|
|
34
|
+
if (pos + 2 > bytes.length) {
|
|
35
|
+
pos += 2;
|
|
36
|
+
return 0xffff;
|
|
37
|
+
}
|
|
38
|
+
const v = (bytes[pos] << 8) | bytes[pos + 1];
|
|
39
|
+
pos += 2;
|
|
40
|
+
return v;
|
|
41
|
+
};
|
|
42
|
+
const s16 = () => (u16() << 16) >> 16;
|
|
43
|
+
const u32 = () => {
|
|
44
|
+
if (pos + 4 > bytes.length) {
|
|
45
|
+
pos += 4;
|
|
46
|
+
return 0xffffffff;
|
|
47
|
+
}
|
|
48
|
+
const v = ((bytes[pos] << 24) | (bytes[pos + 1] << 16) |
|
|
49
|
+
(bytes[pos + 2] << 8) | bytes[pos + 3]) >>> 0;
|
|
50
|
+
pos += 4;
|
|
51
|
+
return v;
|
|
52
|
+
};
|
|
53
|
+
/** C `int` read of a 32-bit field (offset fields are signed ints). */
|
|
54
|
+
const s32 = () => u32() | 0;
|
|
55
|
+
const seek = (p) => {
|
|
56
|
+
// hio_seek fails for negative targets; offsets are C `int`.
|
|
57
|
+
if (p < 0)
|
|
58
|
+
throw new ParseError('MED: seek error');
|
|
59
|
+
pos = p;
|
|
60
|
+
};
|
|
61
|
+
const skip = (n) => { pos += n; };
|
|
62
|
+
const raw = (n) => { const s = bytes.subarray(pos, pos + n); pos += n; return s; };
|
|
63
|
+
const id = String.fromCharCode(bytes[0], bytes[1], bytes[2], bytes[3]);
|
|
64
|
+
void id;
|
|
65
|
+
const ver = bytes[3] - '1'.charCodeAt(0) + 1;
|
|
66
|
+
// Header (mmd3_load.c:117-123).
|
|
67
|
+
seek(start + 4);
|
|
68
|
+
u32(); // modlen
|
|
69
|
+
const songOffset = s32();
|
|
70
|
+
skip(4); // psecnum + pseq
|
|
71
|
+
const blockarrOffset = s32();
|
|
72
|
+
u32(); // reserved
|
|
73
|
+
const smplarrOffset = s32();
|
|
74
|
+
u32(); // reserved2
|
|
75
|
+
const expdataOffset = s32();
|
|
76
|
+
u32(); // reserved3
|
|
77
|
+
skip(10); // pstate/pblock/pline/pseqnum/actplayline
|
|
78
|
+
u8(); // counter
|
|
79
|
+
u8(); // extra_songs
|
|
80
|
+
// Song structure — MMD2song (mmd3_load.c:128-171).
|
|
81
|
+
seek(start + songOffset);
|
|
82
|
+
const song = [];
|
|
83
|
+
for (let i = 0; i < 63; i++) {
|
|
84
|
+
song.push({
|
|
85
|
+
rep: u16(), replen: u16(), midich: u8(), midipreset: u8(),
|
|
86
|
+
svol: u8(), strans: s8(),
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
const numblocks = u16();
|
|
90
|
+
const songlen = u16(); // NOTE: number of sections in MMD2
|
|
91
|
+
void songlen;
|
|
92
|
+
const seqtableOffset = u32();
|
|
93
|
+
u32(); // reserved
|
|
94
|
+
const trackvolsOffset = u32();
|
|
95
|
+
const numtracks = u16();
|
|
96
|
+
const numpseqs = u16();
|
|
97
|
+
const trackpansOffset = u32();
|
|
98
|
+
u32(); // flags3
|
|
99
|
+
u16(); // voladj
|
|
100
|
+
u16(); // channels
|
|
101
|
+
u8(); // mix_echotype
|
|
102
|
+
u8(); // mix_echodepth
|
|
103
|
+
u16(); // mix_echolen
|
|
104
|
+
s8(); // mix_stereosep
|
|
105
|
+
skip(223); // pad0
|
|
106
|
+
const deftempo = u16();
|
|
107
|
+
const playtransp = s8();
|
|
108
|
+
const flags = u8();
|
|
109
|
+
const flags2 = u8();
|
|
110
|
+
const tempo2 = u8();
|
|
111
|
+
skip(16); // pad1 (used to be trackvols)
|
|
112
|
+
u8(); // mastervol
|
|
113
|
+
const numsamples = u8();
|
|
114
|
+
if (numsamples > 63) {
|
|
115
|
+
throw new ParseError(`MED: invalid instrument count ${numsamples}`);
|
|
116
|
+
}
|
|
117
|
+
// Read sequence (mmd3_load.c:174-192).
|
|
118
|
+
seek(start + seqtableOffset);
|
|
119
|
+
const playseqOffset = u32();
|
|
120
|
+
seek(start + playseqOffset);
|
|
121
|
+
skip(32); // skip name
|
|
122
|
+
u32();
|
|
123
|
+
u32();
|
|
124
|
+
const len = u16();
|
|
125
|
+
if (len > 255) {
|
|
126
|
+
throw new ParseError(`MED: unsupported song length ${len}`);
|
|
127
|
+
}
|
|
128
|
+
const xxo = [];
|
|
129
|
+
for (let i = 0; i < len; i++)
|
|
130
|
+
xxo.push(u16());
|
|
131
|
+
// Convert header (mmd3_load.c:195-213).
|
|
132
|
+
let quirks = Quirk.RTONCE;
|
|
133
|
+
const stslide = (flags & FLAG_STSLIDE) !== 0;
|
|
134
|
+
if (!stslide)
|
|
135
|
+
quirks |= Quirk.VSALL | Quirk.PBALL;
|
|
136
|
+
const hexvol = (flags & FLAG_VOLHEX) !== 0 ? 1 : 0;
|
|
137
|
+
const med8ch = (flags & FLAG_8CHANNEL) !== 0 ? 1 : 0;
|
|
138
|
+
const bpmOn = (flags2 & FLAG2_BPM) !== 0 ? 1 : 0;
|
|
139
|
+
const bpmlen = 1 + (flags2 & FLAG2_BMASK);
|
|
140
|
+
const { bpm, timeFactor } = mmdSetBpm(med8ch, deftempo, bpmOn, bpmlen);
|
|
141
|
+
void timeFactor;
|
|
142
|
+
const pat = numblocks;
|
|
143
|
+
const ins = numsamples;
|
|
144
|
+
// Read smplarr (mmd3_load.c:218-233).
|
|
145
|
+
const smplarr = [];
|
|
146
|
+
seek(start + smplarrOffset);
|
|
147
|
+
for (let i = 0; i < ins; i++) {
|
|
148
|
+
if (pos >= bytes.length)
|
|
149
|
+
throw new ParseError(`MED: read error at smplarr pos ${i}`);
|
|
150
|
+
smplarr.push(s32());
|
|
151
|
+
}
|
|
152
|
+
// Sample count scan (mmd3_load.c:238-258).
|
|
153
|
+
let smp = 0;
|
|
154
|
+
for (let i = 0; i < ins; i++) {
|
|
155
|
+
if (smplarr[i] === 0)
|
|
156
|
+
continue;
|
|
157
|
+
seek(start + smplarr[i]);
|
|
158
|
+
u32(); // length
|
|
159
|
+
const type = s16();
|
|
160
|
+
if (type === -1 || type === -2) {
|
|
161
|
+
skip(14);
|
|
162
|
+
smp += u16(); // wforms
|
|
163
|
+
}
|
|
164
|
+
else if (type >= 1 && type <= 6) {
|
|
165
|
+
smp += MMD_NUM_OCT[type - 1];
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
smp++;
|
|
169
|
+
}
|
|
170
|
+
if (pos > bytes.length)
|
|
171
|
+
throw new ParseError(`MED: read error at sample ${i}`);
|
|
172
|
+
}
|
|
173
|
+
// Sample count sanity (libxmp_init_instrument, loaders/common.c:46-52).
|
|
174
|
+
if (smp > 1024 /* MAX_SAMPLES */) {
|
|
175
|
+
throw new ParseError(`MED: too many samples (${smp})`);
|
|
176
|
+
}
|
|
177
|
+
// Expdata (mmd3_load.c:263-322).
|
|
178
|
+
const expdata = zeroExpData();
|
|
179
|
+
let expsmpOffset = 0;
|
|
180
|
+
let iinfoOffset = 0;
|
|
181
|
+
let songnameOffset = 0;
|
|
182
|
+
let mmdinfoOffset = 0;
|
|
183
|
+
let title = '';
|
|
184
|
+
let comment = '';
|
|
185
|
+
if (expdataOffset) {
|
|
186
|
+
seek(start + expdataOffset);
|
|
187
|
+
u32(); // nextmod
|
|
188
|
+
expsmpOffset = s32();
|
|
189
|
+
expdata.s_ext_entries = u16();
|
|
190
|
+
expdata.s_ext_entrsz = u16();
|
|
191
|
+
u32(); // annotxt
|
|
192
|
+
u32(); // annolen
|
|
193
|
+
iinfoOffset = s32();
|
|
194
|
+
expdata.i_ext_entries = u16();
|
|
195
|
+
expdata.i_ext_entrsz = u16();
|
|
196
|
+
if (expsmpOffset < 0 || iinfoOffset < 0) {
|
|
197
|
+
throw new ParseError('MED: invalid expdata');
|
|
198
|
+
}
|
|
199
|
+
u32(); // jumpmask
|
|
200
|
+
u32(); // rgbtable
|
|
201
|
+
u32(); // channelsplit
|
|
202
|
+
u32(); // n_info
|
|
203
|
+
songnameOffset = s32();
|
|
204
|
+
expdata.songnamelen = u32();
|
|
205
|
+
u32(); // dumps
|
|
206
|
+
mmdinfoOffset = u32();
|
|
207
|
+
if (pos > bytes.length)
|
|
208
|
+
throw new ParseError('MED: read error in expdata');
|
|
209
|
+
seek(start + songnameOffset);
|
|
210
|
+
let s = '';
|
|
211
|
+
for (let i = 0; i < expdata.songnamelen; i++) {
|
|
212
|
+
if (i >= 64)
|
|
213
|
+
break; // XMP_NAME_SIZE
|
|
214
|
+
const c = u8();
|
|
215
|
+
if (c === 0)
|
|
216
|
+
break;
|
|
217
|
+
s += String.fromCharCode(c);
|
|
218
|
+
}
|
|
219
|
+
title = s;
|
|
220
|
+
if (mmdinfoOffset !== 0) {
|
|
221
|
+
// mmd_info_text (mmd_common.c:1056-1076): only ASCII type 1.
|
|
222
|
+
seek(start + mmdinfoOffset);
|
|
223
|
+
u32(); // skip next
|
|
224
|
+
u16(); // skip reserved
|
|
225
|
+
const type = u16();
|
|
226
|
+
if (type === 1) {
|
|
227
|
+
const infoLen = u32();
|
|
228
|
+
if (infoLen > 0 && infoLen < bytes.length) {
|
|
229
|
+
const buf = raw(infoLen);
|
|
230
|
+
let c = '';
|
|
231
|
+
for (let i = 0; i < buf.length; i++) {
|
|
232
|
+
const ch = buf[i];
|
|
233
|
+
if (ch === 0)
|
|
234
|
+
break;
|
|
235
|
+
c += String.fromCharCode(ch);
|
|
236
|
+
}
|
|
237
|
+
comment = c;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Read blockarr (mmd3_load.c:326-342).
|
|
243
|
+
const blockarr = [];
|
|
244
|
+
seek(start + blockarrOffset);
|
|
245
|
+
for (let i = 0; i < pat; i++) {
|
|
246
|
+
if (pos > bytes.length)
|
|
247
|
+
throw new ParseError(`MED: read error at blockarr pos ${i}`);
|
|
248
|
+
blockarr.push(u32());
|
|
249
|
+
}
|
|
250
|
+
// Scan patterns for channel count (mmd3_load.c:347-384).
|
|
251
|
+
let chn = 0;
|
|
252
|
+
let maxLines = 1;
|
|
253
|
+
for (let i = 0; i < pat; i++) {
|
|
254
|
+
if (blockarr[i] === 0)
|
|
255
|
+
continue;
|
|
256
|
+
seek(start + blockarr[i]);
|
|
257
|
+
const blockNumtracks = u16();
|
|
258
|
+
const blockLines = u16();
|
|
259
|
+
if (pos > bytes.length)
|
|
260
|
+
throw new ParseError(`MED: read error at block ${i}`);
|
|
261
|
+
// MED Soundstudio for Windows allows up to 9999 lines.
|
|
262
|
+
if (blockLines + 1 > 9999) {
|
|
263
|
+
throw new ParseError(`MED: invalid line count ${blockLines + 1} in block ${i}`);
|
|
264
|
+
}
|
|
265
|
+
if (blockNumtracks > chn)
|
|
266
|
+
chn = blockNumtracks;
|
|
267
|
+
if (blockLines + 1 > maxLines)
|
|
268
|
+
maxLines = blockLines + 1;
|
|
269
|
+
}
|
|
270
|
+
if (chn <= 0 || chn > 64) {
|
|
271
|
+
throw new ParseError(`MED: invalid channel count ${chn}`);
|
|
272
|
+
}
|
|
273
|
+
void numtracks;
|
|
274
|
+
void numpseqs;
|
|
275
|
+
const { medver, type } = mmdTrackerVersion(ver, 0, med8ch, expdataOffset ? expdata : null);
|
|
276
|
+
void maxLines;
|
|
277
|
+
// Patterns (mmd3_load.c:399-452).
|
|
278
|
+
const patterns = [];
|
|
279
|
+
for (let i = 0; i < pat; i++) {
|
|
280
|
+
if (blockarr[i] === 0) {
|
|
281
|
+
const tracks = [];
|
|
282
|
+
for (let k = 0; k < chn; k++) {
|
|
283
|
+
const ev = [];
|
|
284
|
+
for (let j = 0; j < 64; j++)
|
|
285
|
+
ev.push({ note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0 });
|
|
286
|
+
tracks.push({ rows: 64, event: ev });
|
|
287
|
+
}
|
|
288
|
+
patterns.push({ rows: 64, tracks });
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
seek(start + blockarr[i]);
|
|
292
|
+
const blockNumtracks = u16();
|
|
293
|
+
const blockLines = u16();
|
|
294
|
+
u32(); // FIXME: should try to load extra command pages when they exist.
|
|
295
|
+
const rows = blockLines + 1;
|
|
296
|
+
const size = blockNumtracks * rows * 4;
|
|
297
|
+
if (pos + size > bytes.length) {
|
|
298
|
+
throw new ParseError(`MED: read error in block ${i}`);
|
|
299
|
+
}
|
|
300
|
+
const patbuf = bytes.subarray(pos, pos + size);
|
|
301
|
+
pos += size;
|
|
302
|
+
const perTrack = [];
|
|
303
|
+
for (let k = 0; k < chn; k++) {
|
|
304
|
+
const evs = [];
|
|
305
|
+
for (let j = 0; j < rows; j++)
|
|
306
|
+
evs.push({ note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0 });
|
|
307
|
+
perTrack.push(evs);
|
|
308
|
+
}
|
|
309
|
+
let p = 0;
|
|
310
|
+
for (let j = 0; j < rows; j++) {
|
|
311
|
+
for (let k = 0; k < blockNumtracks; k++) {
|
|
312
|
+
const e = { note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0 };
|
|
313
|
+
e.note = patbuf[p] & 0x7f;
|
|
314
|
+
if (e.note)
|
|
315
|
+
e.note += 12 + playtransp;
|
|
316
|
+
if (e.note >= XMP_MAX_KEYS)
|
|
317
|
+
e.note = 0;
|
|
318
|
+
e.ins = patbuf[p + 1] & 0x3f;
|
|
319
|
+
e.fxt = patbuf[p + 2];
|
|
320
|
+
e.fxp = patbuf[p + 3];
|
|
321
|
+
mmdXlatFx(e, bpmOn, bpmlen, med8ch, hexvol);
|
|
322
|
+
perTrack[k][j] = e;
|
|
323
|
+
p += 4;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
const tracksArr = [];
|
|
327
|
+
for (let k = 0; k < chn; k++)
|
|
328
|
+
tracksArr.push({ rows, event: perTrack[k] });
|
|
329
|
+
patterns.push({ rows, tracks: tracksArr });
|
|
330
|
+
}
|
|
331
|
+
// Instruments (mmd3_load.c:462-551).
|
|
332
|
+
const instruments = [];
|
|
333
|
+
for (let i = 0; i < ins; i++) {
|
|
334
|
+
instruments.push({
|
|
335
|
+
name: '',
|
|
336
|
+
volume: 0x40,
|
|
337
|
+
nsm: 0,
|
|
338
|
+
rls: 0,
|
|
339
|
+
map: new Array(121).fill(0),
|
|
340
|
+
mapXpo: new Array(121).fill(0),
|
|
341
|
+
sub: [],
|
|
342
|
+
aei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
|
|
343
|
+
fei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
|
|
344
|
+
pei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
const expSmp = new Array(ins);
|
|
348
|
+
for (let i = 0; i < ins; i++)
|
|
349
|
+
expSmp[i] = zeroInstrExt();
|
|
350
|
+
if (expsmpOffset) {
|
|
351
|
+
seek(start + expsmpOffset);
|
|
352
|
+
const list = readInstrExtArray((n) => { if (n)
|
|
353
|
+
skip(n); return u8(); }, () => u16(), () => u32(), (d) => skip(d), ins, expdata, true);
|
|
354
|
+
// hio_error(f) after each entry read (mmd3_load.c:492-495).
|
|
355
|
+
if (pos > bytes.length)
|
|
356
|
+
throw new ParseError('MED: read error at expsmp');
|
|
357
|
+
for (let i = 0; i < list.length; i++)
|
|
358
|
+
expSmp[i] = list[i];
|
|
359
|
+
}
|
|
360
|
+
// Instrument names.
|
|
361
|
+
if (iinfoOffset) {
|
|
362
|
+
seek(start + iinfoOffset);
|
|
363
|
+
const names = readInstrInfoArray((n) => raw(n), (d) => skip(d), ins, expdata);
|
|
364
|
+
for (let i = 0; i < names.length && i < ins; i++) {
|
|
365
|
+
// libxmp_instrument_name (common.c:230-234) clamps to 31 chars.
|
|
366
|
+
instruments[i].name = names[i].slice(0, 31);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
// Sample data (mmd3_load.c:553-571).
|
|
370
|
+
const samples = new Array(smp);
|
|
371
|
+
const st = {
|
|
372
|
+
bytes, start, pos, ver, samples, instruments, expdata, expSmp, song,
|
|
373
|
+
};
|
|
374
|
+
let smpIdx = 0;
|
|
375
|
+
for (let i = 0; i < ins; i++) {
|
|
376
|
+
if (smplarr[i] === 0)
|
|
377
|
+
continue;
|
|
378
|
+
st.pos = start + smplarr[i];
|
|
379
|
+
smpIdx = mmdLoadInstrument(st, i, smpIdx);
|
|
380
|
+
}
|
|
381
|
+
void smpIdx;
|
|
382
|
+
for (const raw of samples) {
|
|
383
|
+
if (raw)
|
|
384
|
+
ctx.addSample(raw);
|
|
385
|
+
}
|
|
386
|
+
// Track volumes + pans (mmd3_load.c:573-590).
|
|
387
|
+
const channels = [];
|
|
388
|
+
seek(start + trackvolsOffset);
|
|
389
|
+
for (let i = 0; i < chn; i++) {
|
|
390
|
+
channels.push({ vol: u8(), pan: 0x80, flg: 0 });
|
|
391
|
+
}
|
|
392
|
+
if (trackpansOffset) {
|
|
393
|
+
seek(start + trackpansOffset);
|
|
394
|
+
for (let i = 0; i < chn; i++) {
|
|
395
|
+
const p = 8 * s8();
|
|
396
|
+
channels[i].pan = 0x80 + (p > 127 ? 127 : p);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
for (let i = 0; i < chn; i++)
|
|
401
|
+
channels[i].pan = 0x80;
|
|
402
|
+
}
|
|
403
|
+
const mod = {
|
|
404
|
+
title,
|
|
405
|
+
format: 'med',
|
|
406
|
+
comment,
|
|
407
|
+
chn,
|
|
408
|
+
pat,
|
|
409
|
+
ins,
|
|
410
|
+
len,
|
|
411
|
+
restart: 0,
|
|
412
|
+
xxo,
|
|
413
|
+
channels,
|
|
414
|
+
patterns,
|
|
415
|
+
instruments,
|
|
416
|
+
samples: samples.map((s) => s ?? { name: '', data: new Uint8Array(0), length: 0, loopStart: 0, loopEnd: 0, sustainStart: 0, sustainEnd: 0, finetune: 0, volume: 0, flags: 0, c5spd: 8363 }),
|
|
417
|
+
num_sequences: 0,
|
|
418
|
+
sequences: [],
|
|
419
|
+
speed: tempo2,
|
|
420
|
+
bpm,
|
|
421
|
+
volbase: 0x40,
|
|
422
|
+
gvolbase: 0x40,
|
|
423
|
+
gvol: 0x40,
|
|
424
|
+
quirks,
|
|
425
|
+
flowMode: 0,
|
|
426
|
+
readEventType: ReadEventType.MED,
|
|
427
|
+
periodType: 0,
|
|
428
|
+
defpan: 0x80,
|
|
429
|
+
time_factor: MED_TIME_FACTOR,
|
|
430
|
+
rrate: 250,
|
|
431
|
+
c4rate: C4_NTSC_RATE,
|
|
432
|
+
compare_vblank: false,
|
|
433
|
+
tracker: type,
|
|
434
|
+
extras: { kind: 'med', trackerVersion: medver },
|
|
435
|
+
};
|
|
436
|
+
void ctx.sampleRate;
|
|
437
|
+
void ctx.outputRate;
|
|
438
|
+
return mod;
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=mmd3.js.map
|
package/dist/mmd3.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmd3.js","sourceRoot":"","sources":["../src/mmd3.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import type { Event } from '@modplayjs/core';
|
|
2
|
+
/** MED_VER constants (loaders/med.h:9-19), re-exported for the loaders. */
|
|
3
|
+
export declare const MED_VER_210 = 528;
|
|
4
|
+
export declare const MED_VER_300 = 768;
|
|
5
|
+
export declare const MED_VER_320 = 800;
|
|
6
|
+
export declare const MED_VER_OCTAMED_100 = 4096;
|
|
7
|
+
export declare const MED_VER_OCTAMED_200 = 8192;
|
|
8
|
+
export declare const MED_VER_OCTAMED_300 = 12288;
|
|
9
|
+
export declare const MED_VER_OCTAMED_500 = 20480;
|
|
10
|
+
export declare const MED_VER_OCTAMED_502 = 20482;
|
|
11
|
+
export declare const MED_VER_OCTAMED_SS_1 = 24576;
|
|
12
|
+
export declare const MED_VER_OCTAMED_SS_2 = 28672;
|
|
13
|
+
/** DEFAULT_TIME_FACTOR (common.h:454) and MED_TIME_FACTOR (common.h:455). */
|
|
14
|
+
export declare const DEFAULT_TIME_FACTOR = 10;
|
|
15
|
+
export declare const MED_TIME_FACTOR = 2.64;
|
|
16
|
+
/** MMD song flags (med.h:49-56). */
|
|
17
|
+
export declare const FLAG_FILTERON = 1;
|
|
18
|
+
export declare const FLAG_JUMPINGON = 2;
|
|
19
|
+
export declare const FLAG_JUMP8TH = 4;
|
|
20
|
+
export declare const FLAG_INSTRSATT = 8;
|
|
21
|
+
export declare const FLAG_VOLHEX = 16;
|
|
22
|
+
export declare const FLAG_STSLIDE = 32;
|
|
23
|
+
export declare const FLAG_8CHANNEL = 64;
|
|
24
|
+
export declare const FLAG_SLOWHQ = 128;
|
|
25
|
+
/** MMD song flags2 (med.h:58-60). */
|
|
26
|
+
export declare const FLAG2_BMASK = 31;
|
|
27
|
+
export declare const FLAG2_BPM = 32;
|
|
28
|
+
export declare const FLAG2_MIX = 128;
|
|
29
|
+
/** InstrExt instr_flags (med.h:219-222). */
|
|
30
|
+
export declare const SSFLG_LOOP = 1;
|
|
31
|
+
export declare const SSFLG_EXTPSET = 2;
|
|
32
|
+
export declare const SSFLG_DISABLED = 4;
|
|
33
|
+
export declare const SSFLG_PINGPONG = 8;
|
|
34
|
+
/** MMD3_DEFAULT_NOTE (med.h:210). */
|
|
35
|
+
export declare const MMD3_DEFAULT_NOTE = 53;
|
|
36
|
+
/** InstrHdr type bits (med.h:161-163). */
|
|
37
|
+
export declare const S_16 = 16;
|
|
38
|
+
export declare const MD16 = 24;
|
|
39
|
+
export declare const STEREO = 32;
|
|
40
|
+
/** Number of octaves in IFFOCT samples (mmd_common.c:910). */
|
|
41
|
+
export declare const MMD_NUM_OCT: readonly number[];
|
|
42
|
+
/** struct MMD0sample (med.h:33-39). */
|
|
43
|
+
export interface MedSample {
|
|
44
|
+
rep: number;
|
|
45
|
+
replen: number;
|
|
46
|
+
midich: number;
|
|
47
|
+
midipreset: number;
|
|
48
|
+
svol: number;
|
|
49
|
+
/** int8. */
|
|
50
|
+
strans: number;
|
|
51
|
+
}
|
|
52
|
+
/** struct InstrExt (med.h:212-231), only the fields the loaders consume. */
|
|
53
|
+
export interface MedInstrExt {
|
|
54
|
+
hold: number;
|
|
55
|
+
decay: number;
|
|
56
|
+
suppress_midi_off: number;
|
|
57
|
+
/** int8. */
|
|
58
|
+
finetune: number;
|
|
59
|
+
default_pitch: number;
|
|
60
|
+
instr_flags: number;
|
|
61
|
+
long_repeat: number;
|
|
62
|
+
long_replen: number;
|
|
63
|
+
}
|
|
64
|
+
export declare function zeroInstrExt(): MedInstrExt;
|
|
65
|
+
/** struct MMD0exp (med.h:279-301), only the fields the loaders consume. */
|
|
66
|
+
export interface MedExpData {
|
|
67
|
+
s_ext_entries: number;
|
|
68
|
+
s_ext_entrsz: number;
|
|
69
|
+
i_ext_entries: number;
|
|
70
|
+
i_ext_entrsz: number;
|
|
71
|
+
annolen: number;
|
|
72
|
+
songnamelen: number;
|
|
73
|
+
}
|
|
74
|
+
export declare function zeroExpData(): MedExpData;
|
|
75
|
+
/** mmd_convert_tempo (mmd_common.c:48-82). */
|
|
76
|
+
export declare function mmdConvertTempo(tempo: number, bpmOn: number, med8ch: number): number;
|
|
77
|
+
/** mmd_xlat_fx (mmd_common.c:84-397). */
|
|
78
|
+
export declare function mmdXlatFx(event: Event, bpmOn: number, bpmlen: number, med8ch: number, hexvol: number): void;
|
|
79
|
+
/** mmd_set_bpm (mmd_common.c:1038-1053). Returns the effective time_factor
|
|
80
|
+
* (C sets m->time_factor) and writes mod.bpm. */
|
|
81
|
+
export declare function mmdSetBpm(med8ch: number, deftempo: number, bpmOn: number, bpmlen: number): {
|
|
82
|
+
bpm: number;
|
|
83
|
+
timeFactor: number;
|
|
84
|
+
};
|
|
85
|
+
/** mmd_tracker_version (mmd_common.c:1092-1162). Returns the MED version
|
|
86
|
+
* constant plus the tracker type string (libxmp_set_type). */
|
|
87
|
+
export declare function mmdTrackerVersion(mmdver: number, mmdc: number, med8ch: number, expdata: MedExpData | null): {
|
|
88
|
+
medver: number;
|
|
89
|
+
type: string;
|
|
90
|
+
};
|
|
91
|
+
/** Read a MMD0/MMD1-style InstrExt array (mmd1_load.c:538-563 /
|
|
92
|
+
* mmd3_load.c:483-523). ver2plus adds the OctaMED V5/V5.02/V7 fields. */
|
|
93
|
+
export declare function readInstrExtArray(u8: (n?: number) => number, u16: () => number, u32: () => number, seek: (delta: number) => void, count: number, expdata: MedExpData, ver2plus: boolean): MedInstrExt[];
|
|
94
|
+
/** Read MMDInstrInfo names (mmd1_load.c:567-591). */
|
|
95
|
+
export declare function readInstrInfoArray(raw: (n: number) => Uint8Array, seek: (delta: number) => void, count: number, expdata: MedExpData): string[];
|
|
96
|
+
/** libxmp_copy_adjust-style name (printable ASCII, trim, stop at NUL). */
|
|
97
|
+
export declare function copyAdjustName(r: Uint8Array, n: number): string;
|
|
98
|
+
//# sourceMappingURL=mmdCommon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmdCommon.d.ts","sourceRoot":"","sources":["../src/mmdCommon.ts"],"names":[],"mappings":"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"}
|