@modplayjs/fmt-med 0.0.0-stage → 0.2.2

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/dist/med3.js ADDED
@@ -0,0 +1,464 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/med3_load.c (med3_test :43-51,
4
+ // med3_load :247-458, unpack_block :95-244). MED 2.00 MED3 — nibble-packed
5
+ // bitmasked patterns, optional external instruments.
6
+ import { ParseError, Quirk, ReadEventType, SampleFlags, } from '@modplayjs/core';
7
+ import { FLAG_INSTRSATT, MED_TIME_FACTOR, mmdConvertTempo } from './mmdCommon.js';
8
+ const MASK = 0x80000000;
9
+ // M0F_* mask flags (med3_load.c:56-63).
10
+ const M0F_LINEMSK0F = 0x01;
11
+ const M0F_LINEMSK1F = 0x02;
12
+ const M0F_FXMSK0F = 0x04;
13
+ const M0F_FXMSK1F = 0x08;
14
+ const M0F_LINEMSK00 = 0x10;
15
+ const M0F_LINEMSK10 = 0x20;
16
+ const M0F_FXMSK00 = 0x40;
17
+ const M0F_FXMSK10 = 0x80;
18
+ const FX_VOLSLIDE = 0x0a;
19
+ const FX_BREAK = 0x0d;
20
+ const FX_EXTENDED = 0x0e;
21
+ const FX_S3M_BPM = 0xab;
22
+ const EX_RETRIG = 0x9;
23
+ const EX_DELAY = 0xd;
24
+ const FX_MED_RETRIG = 0x93;
25
+ /** MAGIC_MED3 = "MED\x03". */
26
+ export function med3Test(bytes) {
27
+ if (bytes.length < 4)
28
+ return false;
29
+ return bytes[0] === 0x4d && bytes[1] === 0x45 && bytes[2] === 0x44 && bytes[3] === 0x03;
30
+ }
31
+ function makeSub(vol, sid) {
32
+ return {
33
+ vol, gvl: 0x40, pan: -1, xpo: 0, fin: 0, vwf: 0, vde: 0,
34
+ vra: 0, vsw: 0, sid, rvv: 0, nna: 0, dct: 0, dca: 0, ifc: 0, ifr: 0,
35
+ };
36
+ }
37
+ function makeInstrument(name, sid) {
38
+ return {
39
+ name,
40
+ volume: 0x40,
41
+ // med3_load never sets nsm for instruments the sample mask skips —
42
+ // libxmp_init_instrument leaves them at 0.
43
+ nsm: 0,
44
+ rls: 0,
45
+ map: new Array(121).fill(0),
46
+ mapXpo: new Array(121).fill(0),
47
+ sub: [makeSub(0, sid)],
48
+ aei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
49
+ fei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
50
+ pei: { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] },
51
+ };
52
+ }
53
+ /** get_nibble/get_nibbles (med3_load.c:70-93). */
54
+ class NibbleReader {
55
+ mem;
56
+ nbnum = 0;
57
+ constructor(mem) {
58
+ this.mem = mem;
59
+ }
60
+ getNibble() {
61
+ const mloc = this.nbnum >> 1;
62
+ const res = (this.nbnum & 0x1) ? (this.mem[mloc] & 0x0f) : (this.mem[mloc] >> 4);
63
+ this.nbnum++;
64
+ return res;
65
+ }
66
+ getNibbles(nbs) {
67
+ let res = 0;
68
+ for (let i = 0; i < nbs; i++) {
69
+ res = (res << 4) | this.getNibble();
70
+ }
71
+ return res;
72
+ }
73
+ }
74
+ /** unpack_block (med3_load.c:95-244): expand the bitmasked nibble stream
75
+ * into a 3-byte-per-event pattern buffer (64 rows × 4 tracks) and convert
76
+ * to xmp events. Returns the 4×64 event grid ([track][row]). */
77
+ function unpackBlock(from, convsz, trkn) {
78
+ const dv = new DataView(from.buffer, from.byteOffset, from.byteLength);
79
+ let linemsk0 = dv.getUint32(0, false);
80
+ let linemsk1 = dv.getUint32(4, false);
81
+ let fxmsk0 = dv.getUint32(8, false);
82
+ let fxmsk1 = dv.getUint32(12, false);
83
+ const nr = new NibbleReader(from.subarray(16));
84
+ let nibsLeft = convsz * 2;
85
+ // patbuf: 64 rows × 4 tracks × 3 bytes (C allocates 3 * 4 * 64).
86
+ const patbuf = new Uint8Array(3 * 4 * 64);
87
+ for (let i = 0; i < 64; i++) {
88
+ const lmActive = i < 32 ? (linemsk0 & MASK) !== 0 : (linemsk1 & MASK) !== 0;
89
+ const fmActive = i < 32 ? (fxmsk0 & MASK) !== 0 : (fxmsk1 & MASK) !== 0;
90
+ if (lmActive) {
91
+ if (Math.trunc(trkn / 4) > nibsLeft)
92
+ throw new ParseError('MED3: pattern overflow');
93
+ nibsLeft -= Math.trunc(trkn / 4);
94
+ let lmsk = nr.getNibbles(Math.trunc(trkn / 4));
95
+ lmsk = (lmsk << (16 - trkn)) & 0xffff;
96
+ let tmpto = i * trkn * 3;
97
+ for (let bcnt = 0; bcnt < trkn; bcnt++) {
98
+ if (lmsk & 0x8000) {
99
+ if (nibsLeft < 3)
100
+ throw new ParseError('MED3: pattern overflow');
101
+ nibsLeft -= 3;
102
+ patbuf[tmpto] = nr.getNibbles(2);
103
+ patbuf[tmpto + 1] = nr.getNibble() << 4;
104
+ }
105
+ lmsk = (lmsk << 1) & 0xffff;
106
+ tmpto += 3;
107
+ }
108
+ }
109
+ if (fmActive) {
110
+ if (Math.trunc(trkn / 4) > nibsLeft)
111
+ throw new ParseError('MED3: pattern overflow');
112
+ nibsLeft -= Math.trunc(trkn / 4);
113
+ let lmsk = nr.getNibbles(Math.trunc(trkn / 4));
114
+ lmsk = (lmsk << (16 - trkn)) & 0xffff;
115
+ let tmpto = i * trkn * 3;
116
+ for (let bcnt = 0; bcnt < trkn; bcnt++) {
117
+ if (lmsk & 0x8000) {
118
+ if (nibsLeft < 3)
119
+ throw new ParseError('MED3: pattern overflow');
120
+ nibsLeft -= 3;
121
+ patbuf[tmpto + 1] = (patbuf[tmpto + 1] | nr.getNibble()) & 0xff;
122
+ patbuf[tmpto + 2] = nr.getNibbles(2);
123
+ }
124
+ lmsk = (lmsk << 1) & 0xffff;
125
+ tmpto += 3;
126
+ }
127
+ }
128
+ if (i < 32) {
129
+ linemsk0 = (linemsk0 << 1) >>> 0;
130
+ fxmsk0 = (fxmsk0 << 1) >>> 0;
131
+ }
132
+ else {
133
+ linemsk1 = (linemsk1 << 1) >>> 0;
134
+ fxmsk1 = (fxmsk1 << 1) >>> 0;
135
+ }
136
+ }
137
+ // Convert (med3_load.c:176-234). trkn is mod->chn = 4 here.
138
+ const grid = [];
139
+ for (let j = 0; j < 4; j++) {
140
+ const col = [];
141
+ for (let i = 0; i < 64; i++) {
142
+ const e = { note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0 };
143
+ e.note = patbuf[i * 12 + j * 3 + 0];
144
+ if (e.note)
145
+ e.note += 48;
146
+ e.ins = patbuf[i * 12 + j * 3 + 1] >> 4;
147
+ if (e.ins)
148
+ e.ins++;
149
+ e.fxt = patbuf[i * 12 + j * 3 + 1] & 0x0f;
150
+ e.fxp = patbuf[i * 12 + j * 3 + 2];
151
+ switch (e.fxt) {
152
+ case 0x00: // arpeggio
153
+ case 0x01: // slide up
154
+ case 0x02: // slide down
155
+ case 0x03: // portamento
156
+ case 0x04: // vibrato?
157
+ break;
158
+ case 0x0c: // set volume (BCD)
159
+ e.fxp = (((((e.fxp >> 4) & 0x0f) * 10) + (e.fxp & 0x0f)) & 0xff);
160
+ break;
161
+ case 0x0d: // volume slides
162
+ e.fxt = FX_VOLSLIDE;
163
+ break;
164
+ case 0x0f: { // tempo/break
165
+ if (e.fxp === 0) {
166
+ e.fxt = FX_BREAK;
167
+ }
168
+ else if (e.fxp === 0xff) {
169
+ e.fxp = 0;
170
+ e.fxt = 0;
171
+ e.vol = 1;
172
+ }
173
+ else if (e.fxp === 0xfe) {
174
+ e.fxp = 0;
175
+ e.fxt = 0;
176
+ }
177
+ else if (e.fxp === 0xf1) {
178
+ // Retrigger once on tick 3.
179
+ e.fxt = FX_EXTENDED;
180
+ e.fxp = (EX_RETRIG << 4) | 3;
181
+ }
182
+ else if (e.fxp === 0xf2) {
183
+ // Delay until tick 3.
184
+ e.fxt = FX_EXTENDED;
185
+ e.fxp = (EX_DELAY << 4) | 3;
186
+ }
187
+ else if (e.fxp === 0xf3) {
188
+ // Retrigger every 2 ticks (TODO: buggy).
189
+ e.fxt = FX_MED_RETRIG;
190
+ e.fxp = 0x02;
191
+ }
192
+ else if (e.fxp <= 0xf0) {
193
+ e.fxt = FX_S3M_BPM;
194
+ e.fxp = mmdConvertTempo(e.fxp, 0, 0);
195
+ }
196
+ else {
197
+ e.fxp = 0;
198
+ e.fxt = 0;
199
+ }
200
+ break;
201
+ }
202
+ default:
203
+ e.fxp = 0;
204
+ e.fxt = 0;
205
+ }
206
+ col.push(e);
207
+ }
208
+ grid.push(col);
209
+ }
210
+ return grid;
211
+ }
212
+ /**
213
+ * med3_load (med3_load.c:247-458).
214
+ */
215
+ export function med3Load(bytes, ctx) {
216
+ let pos = 4; // skip magic
217
+ const u8 = () => bytes[pos++] ?? 0;
218
+ const s8 = () => ((u8() << 24) >> 24);
219
+ const u16 = () => { const v = (bytes[pos] << 8) | bytes[pos + 1]; pos += 2; return v; };
220
+ const s16 = () => (u16() << 16) >> 16;
221
+ const u32 = () => {
222
+ const v = ((bytes[pos] << 24) | (bytes[pos + 1] << 16) |
223
+ (bytes[pos + 2] << 8) | bytes[pos + 3]) >>> 0;
224
+ pos += 4;
225
+ return v;
226
+ };
227
+ const raw = (n) => { const s = bytes.subarray(pos, pos + n); pos += n; return s; };
228
+ const instruments = [];
229
+ // Read instrument names (med3_load.c:267-279).
230
+ for (let i = 0; i < 32; i++) {
231
+ const buf = [];
232
+ for (let j = 0; j < 40; j++) {
233
+ const c = u8();
234
+ buf.push(c);
235
+ if (c === 0)
236
+ break;
237
+ }
238
+ let s = '';
239
+ for (let j = 0; j < buf.length && j < 32; j++) {
240
+ const c = buf[j];
241
+ if (c === 0)
242
+ break;
243
+ s += c > 127 || c < 0x20 || c === 0x7f ? '.' : String.fromCharCode(c);
244
+ }
245
+ instruments.push(makeInstrument(s, i));
246
+ }
247
+ // Read instrument volumes (med3_load.c:281-288).
248
+ let mask = u32();
249
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
250
+ instruments[i].sub[0].vol = mask & MASK ? u8() : 0;
251
+ }
252
+ // Read instrument loops (med3_load.c:290-294).
253
+ const lps = new Array(32).fill(0);
254
+ mask = u32();
255
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
256
+ lps[i] = mask & MASK ? u16() : 0;
257
+ }
258
+ // Read instrument loop length (med3_load.c:296-303).
259
+ const lpe = [];
260
+ const len = [];
261
+ const flg = [];
262
+ mask = u32();
263
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
264
+ const lsiz = mask & MASK ? u16() : 0;
265
+ len.push(lps[i] + lsiz);
266
+ lpe.push(lps[i] + lsiz);
267
+ flg.push(lsiz > 1 ? SampleFlags.LOOP : 0);
268
+ }
269
+ const chn = 4;
270
+ const pat = u16();
271
+ const modlen = u16();
272
+ // Sanity check.
273
+ if (modlen > 256 || pat > 256) {
274
+ throw new ParseError('MED3: invalid pattern count or song length');
275
+ }
276
+ // Order list (med3_load.c:315): read modlen bytes.
277
+ const xxo = [];
278
+ for (let i = 0; i < modlen; i++)
279
+ xxo.push(u8());
280
+ const tempo = u16();
281
+ const transp = s8();
282
+ const flags = u8();
283
+ const sliding = u16();
284
+ pos += 4; // jumping mask
285
+ pos += 16; // rgb
286
+ const speed = 6;
287
+ const bpm = mmdConvertTempo(tempo, 0, 0);
288
+ const timeFactor = MED_TIME_FACTOR;
289
+ // Read midi channels (med3_load.c:327-332).
290
+ mask = u32();
291
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
292
+ if (mask & MASK)
293
+ pos += 1;
294
+ }
295
+ // Read midi programs (med3_load.c:334-339).
296
+ mask = u32();
297
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
298
+ if (mask & MASK)
299
+ pos += 1;
300
+ }
301
+ let quirks = Quirk.RTONCE; /* FF1 */
302
+ if (sliding === 6)
303
+ quirks |= Quirk.VSALL | Quirk.PBALL;
304
+ // Play transpose rides in every sub-instrument (med3_load.c:350-352).
305
+ for (let i = 0; i < 32; i++) {
306
+ instruments[i].sub[0].xpo = transp;
307
+ }
308
+ // Load and convert patterns (med3_load.c:356-417).
309
+ const patterns = [];
310
+ for (let i = 0; i < pat; i++) {
311
+ void u8(); // tracks (TODO: not clear if this should be respected)
312
+ const b = u8();
313
+ const convsz = u16();
314
+ // conv buffer: 4 mask words + convsz bytes of nibble data.
315
+ const conv = new Uint8Array(16 + convsz);
316
+ const cv = new DataView(conv.buffer);
317
+ let p16 = 0;
318
+ if (b & M0F_LINEMSK00)
319
+ cv.setUint32(p16, 0, false);
320
+ else if (b & M0F_LINEMSK0F)
321
+ cv.setUint32(p16, 0xffffffff, false);
322
+ else
323
+ cv.setUint32(p16, u32(), false);
324
+ p16 += 4;
325
+ if (b & M0F_LINEMSK10)
326
+ cv.setUint32(p16, 0, false);
327
+ else if (b & M0F_LINEMSK1F)
328
+ cv.setUint32(p16, 0xffffffff, false);
329
+ else
330
+ cv.setUint32(p16, u32(), false);
331
+ p16 += 4;
332
+ if (b & M0F_FXMSK00)
333
+ cv.setUint32(p16, 0, false);
334
+ else if (b & M0F_FXMSK0F)
335
+ cv.setUint32(p16, 0xffffffff, false);
336
+ else
337
+ cv.setUint32(p16, u32(), false);
338
+ p16 += 4;
339
+ if (b & M0F_FXMSK10)
340
+ cv.setUint32(p16, 0, false);
341
+ else if (b & M0F_FXMSK1F)
342
+ cv.setUint32(p16, 0xffffffff, false);
343
+ else
344
+ cv.setUint32(p16, u32(), false);
345
+ p16 += 4;
346
+ const databytes = raw(convsz);
347
+ if (databytes.length < convsz)
348
+ throw new ParseError('MED3: truncated pattern');
349
+ conv.set(databytes, 16);
350
+ const grid = unpackBlock(conv, convsz, chn);
351
+ const tracksArr = [];
352
+ for (let k = 0; k < chn; k++)
353
+ tracksArr.push({ rows: 64, event: grid[k] });
354
+ patterns.push({ rows: 64, tracks: tracksArr });
355
+ }
356
+ // Load samples (med3_load.c:419-455).
357
+ const samples = [];
358
+ for (let i = 0; i < 32; i++) {
359
+ const sub = instruments[i].sub[0];
360
+ sub.sid = i;
361
+ samples.push({
362
+ name: '',
363
+ data: new Uint8Array(0),
364
+ length: len[i],
365
+ loopStart: lps[i],
366
+ loopEnd: lpe[i],
367
+ sustainStart: 0,
368
+ sustainEnd: 0,
369
+ finetune: 0,
370
+ volume: sub.vol,
371
+ flags: flg[i],
372
+ c5spd: 8287,
373
+ });
374
+ }
375
+ mask = u32();
376
+ // hio_read32b at EOF returns -1 in libxmp (hio_read32b → read error →
377
+ // the C int32 return is -1, i.e. all bits set → the loop then probes
378
+ // every instrument as an external-file load).
379
+ if (pos >= bytes.length)
380
+ mask = 0xffffffff;
381
+ for (let i = 0; i < 32; i++, mask = (mask << 1) >>> 0) {
382
+ if ((~mask & MASK) !== 0)
383
+ continue;
384
+ if ((~flags & FLAG_INSTRSATT) !== 0) {
385
+ // Song file (med3_load.c:428-434 → med_load_external_instrument,
386
+ // mmd_common.c:995-1035): the sample data lives in a sibling file
387
+ // named after the instrument, discovered via the harness's
388
+ // externalDir hook (the C test suite sets an instrument path; the
389
+ // browser preview has no filesystem so these stay empty).
390
+ const inst = instruments[i];
391
+ const s = samples[i];
392
+ const external = ctx.externalInstrument;
393
+ const data = external ? external(inst.name) : null;
394
+ if (data && data.length > 0) {
395
+ s.length = data.length;
396
+ s.data = data;
397
+ inst.nsm = 1;
398
+ }
399
+ continue;
400
+ }
401
+ // Module file.
402
+ const inst = instruments[i];
403
+ inst.nsm = 1;
404
+ const s = samples[i];
405
+ s.length = u32();
406
+ if (s.length === 0)
407
+ inst.nsm = 0;
408
+ if (u16() !== 0)
409
+ continue; // type — non-zero means external, keep empty
410
+ // Read the sample data inline.
411
+ const bytelen = s.length;
412
+ const remaining = bytes.length - pos;
413
+ const take = Math.min(bytelen, Math.max(0, remaining));
414
+ s.data = bytes.subarray(pos, pos + take);
415
+ pos += bytelen;
416
+ }
417
+ const channels = [];
418
+ for (let i = 0; i < chn; i++) {
419
+ // med3_load never touches channels — the prologue LRLR default
420
+ // (load_helpers.c:334) applies.
421
+ const pattern = Math.floor((i + 1) / 2) % 2 * 0xff;
422
+ channels.push({ pan: Math.min(255, Math.max(0, 0x80 + (pattern - 0x80))), vol: 0x40, flg: 0 });
423
+ }
424
+ const mod = {
425
+ title: '',
426
+ format: 'med',
427
+ comment: '',
428
+ chn,
429
+ pat,
430
+ ins: 32,
431
+ len: modlen,
432
+ restart: 0,
433
+ xxo,
434
+ channels,
435
+ patterns,
436
+ instruments,
437
+ samples,
438
+ num_sequences: 0,
439
+ sequences: [],
440
+ speed,
441
+ bpm,
442
+ volbase: 0x40,
443
+ gvolbase: 0x40,
444
+ gvol: 0x40,
445
+ quirks,
446
+ flowMode: 0,
447
+ // med3_load never sets read_event_type — prologue default (MOD) applies.
448
+ readEventType: ReadEventType.MOD,
449
+ periodType: 0,
450
+ defpan: 0x80,
451
+ time_factor: timeFactor,
452
+ rrate: 250,
453
+ c4rate: 8287,
454
+ compare_vblank: false,
455
+ tracker: 'MED 2.00 MED3',
456
+ extras: { kind: 'med', trackerVersion: 0x0300 },
457
+ };
458
+ void ctx.sampleRate;
459
+ void ctx.outputRate;
460
+ void s8;
461
+ void s16;
462
+ return mod;
463
+ }
464
+ //# sourceMappingURL=med3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"med3.js","sourceRoot":"","sources":["../src/med3.ts"],"names":[],"mappings":"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"}
package/dist/med4.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import type { LoadCtx, ModuleData } from '@modplayjs/core';
2
+ /** MAGIC_MED4 = "MED\x04". */
3
+ export declare function med4Test(bytes: Uint8Array): boolean;
4
+ export declare function med4Load(bytes: Uint8Array, ctx: LoadCtx): ModuleData;
5
+ //# sourceMappingURL=med4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"med4.d.ts","sourceRoot":"","sources":["../src/med4.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAIV,OAAO,EACP,UAAU,EAIX,MAAM,iBAAiB,CAAC;AAuBzB,8BAA8B;AAC9B,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGnD;AAoID,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAmrBpE"}