@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/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
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Copyright (c) 2026 Bitti09 — modplayjs contributors
|
|
3
|
+
// Ported from: libxmp src/loaders/mmd_common.c + loaders/med.h.
|
|
4
|
+
// Common MED/OctaMED code: tempo conversion, effect translation, BPM setup,
|
|
5
|
+
// tracker version detection, and the expdata/InstrExt struct carriers.
|
|
6
|
+
import { FX, ParseError, XMP_KEY_CUT, MED_VER_210 as IMPORTED_MED_VER_210, MED_VER_300 as IMPORTED_MED_VER_300, MED_VER_320 as IMPORTED_MED_VER_320, MED_VER_OCTAMED_100 as IMPORTED_MED_VER_OCTAMED_100, MED_VER_OCTAMED_200 as IMPORTED_MED_VER_OCTAMED_200, MED_VER_OCTAMED_300 as IMPORTED_MED_VER_OCTAMED_300, MED_VER_OCTAMED_500 as IMPORTED_MED_VER_OCTAMED_500, MED_VER_OCTAMED_502 as IMPORTED_MED_VER_OCTAMED_502, MED_VER_OCTAMED_SS_1 as IMPORTED_MED_VER_OCTAMED_SS_1, MED_VER_OCTAMED_SS_2 as IMPORTED_MED_VER_OCTAMED_SS_2, } from '@modplayjs/core';
|
|
7
|
+
/** MED_VER constants (loaders/med.h:9-19), re-exported for the loaders. */
|
|
8
|
+
export const MED_VER_210 = IMPORTED_MED_VER_210;
|
|
9
|
+
export const MED_VER_300 = IMPORTED_MED_VER_300;
|
|
10
|
+
export const MED_VER_320 = IMPORTED_MED_VER_320;
|
|
11
|
+
export const MED_VER_OCTAMED_100 = IMPORTED_MED_VER_OCTAMED_100;
|
|
12
|
+
export const MED_VER_OCTAMED_200 = IMPORTED_MED_VER_OCTAMED_200;
|
|
13
|
+
export const MED_VER_OCTAMED_300 = IMPORTED_MED_VER_OCTAMED_300;
|
|
14
|
+
export const MED_VER_OCTAMED_500 = IMPORTED_MED_VER_OCTAMED_500;
|
|
15
|
+
export const MED_VER_OCTAMED_502 = IMPORTED_MED_VER_OCTAMED_502;
|
|
16
|
+
export const MED_VER_OCTAMED_SS_1 = IMPORTED_MED_VER_OCTAMED_SS_1;
|
|
17
|
+
export const MED_VER_OCTAMED_SS_2 = IMPORTED_MED_VER_OCTAMED_SS_2;
|
|
18
|
+
/** DEFAULT_TIME_FACTOR (common.h:454) and MED_TIME_FACTOR (common.h:455). */
|
|
19
|
+
export const DEFAULT_TIME_FACTOR = 10;
|
|
20
|
+
export const MED_TIME_FACTOR = 2.64;
|
|
21
|
+
/** MMD song flags (med.h:49-56). */
|
|
22
|
+
export const FLAG_FILTERON = 0x1;
|
|
23
|
+
export const FLAG_JUMPINGON = 0x2;
|
|
24
|
+
export const FLAG_JUMP8TH = 0x4;
|
|
25
|
+
export const FLAG_INSTRSATT = 0x8;
|
|
26
|
+
export const FLAG_VOLHEX = 0x10;
|
|
27
|
+
export const FLAG_STSLIDE = 0x20;
|
|
28
|
+
export const FLAG_8CHANNEL = 0x40;
|
|
29
|
+
export const FLAG_SLOWHQ = 0x80;
|
|
30
|
+
/** MMD song flags2 (med.h:58-60). */
|
|
31
|
+
export const FLAG2_BMASK = 0x1f;
|
|
32
|
+
export const FLAG2_BPM = 0x20;
|
|
33
|
+
export const FLAG2_MIX = 0x80;
|
|
34
|
+
/** InstrExt instr_flags (med.h:219-222). */
|
|
35
|
+
export const SSFLG_LOOP = 0x01;
|
|
36
|
+
export const SSFLG_EXTPSET = 0x02;
|
|
37
|
+
export const SSFLG_DISABLED = 0x04;
|
|
38
|
+
export const SSFLG_PINGPONG = 0x08;
|
|
39
|
+
/** MMD3_DEFAULT_NOTE (med.h:210). */
|
|
40
|
+
export const MMD3_DEFAULT_NOTE = 53;
|
|
41
|
+
/** InstrHdr type bits (med.h:161-163). */
|
|
42
|
+
export const S_16 = 0x10;
|
|
43
|
+
export const MD16 = 0x18;
|
|
44
|
+
export const STEREO = 0x20;
|
|
45
|
+
/** Number of octaves in IFFOCT samples (mmd_common.c:910). */
|
|
46
|
+
export const MMD_NUM_OCT = [5, 3, 2, 4, 6, 7];
|
|
47
|
+
export function zeroInstrExt() {
|
|
48
|
+
return {
|
|
49
|
+
hold: 0, decay: 0, suppress_midi_off: 0, finetune: 0,
|
|
50
|
+
default_pitch: 0, instr_flags: 0, long_repeat: 0, long_replen: 0,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export function zeroExpData() {
|
|
54
|
+
return { s_ext_entries: 0, s_ext_entrsz: 0, i_ext_entries: 0, i_ext_entrsz: 0, annolen: 0, songnamelen: 0 };
|
|
55
|
+
}
|
|
56
|
+
/** mmd_convert_tempo (mmd_common.c:48-82). */
|
|
57
|
+
export function mmdConvertTempo(tempo, bpmOn, med8ch) {
|
|
58
|
+
const temposCompat = [195, 97, 65, 49, 39, 32, 28, 24, 22, 20];
|
|
59
|
+
const tempos8ch = [179, 164, 152, 141, 131, 123, 116, 110, 104, 99];
|
|
60
|
+
if (tempo > 0) {
|
|
61
|
+
// 8-channel mode: left tempo gadget values 1-10; 11-240 = 10.
|
|
62
|
+
if (med8ch) {
|
|
63
|
+
const t = tempo > 10 ? 10 : tempo;
|
|
64
|
+
return tempos8ch[t - 1];
|
|
65
|
+
}
|
|
66
|
+
// Tempos 1-10 in tempo mode are compatibility tempos that
|
|
67
|
+
// approximate Soundtracker speeds.
|
|
68
|
+
if (tempo <= 10 && !bpmOn) {
|
|
69
|
+
return temposCompat[tempo - 1];
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return tempo;
|
|
73
|
+
}
|
|
74
|
+
/** mmd_xlat_fx (mmd_common.c:84-397). */
|
|
75
|
+
export function mmdXlatFx(event, bpmOn, bpmlen, med8ch, hexvol) {
|
|
76
|
+
switch (event.fxt) {
|
|
77
|
+
case 0x00: // arpeggio
|
|
78
|
+
break;
|
|
79
|
+
case 0x01: // slide up — param 0 does nothing
|
|
80
|
+
if (!event.fxp)
|
|
81
|
+
event.fxt = 0;
|
|
82
|
+
break;
|
|
83
|
+
case 0x02: // slide down
|
|
84
|
+
if (!event.fxp)
|
|
85
|
+
event.fxt = 0;
|
|
86
|
+
break;
|
|
87
|
+
case 0x03: // portamento
|
|
88
|
+
break;
|
|
89
|
+
case 0x04: // vibrato (twice as deep as Protracker's)
|
|
90
|
+
event.fxt = FX.FX_VIBRATO2;
|
|
91
|
+
break;
|
|
92
|
+
case 0x05: // slide + fade
|
|
93
|
+
case 0x06: // vibrato + fade
|
|
94
|
+
case 0x07: // tremolo
|
|
95
|
+
break;
|
|
96
|
+
case 0x08: // hold and decay
|
|
97
|
+
event.fxt = FX.FX_MED_HOLD;
|
|
98
|
+
break;
|
|
99
|
+
case 0x09: // secondary tempo
|
|
100
|
+
if (event.fxp >= 0x01 && event.fxp <= 0x20) {
|
|
101
|
+
event.fxt = FX.FX_SPEED;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
event.fxt = 0;
|
|
105
|
+
event.fxp = 0;
|
|
106
|
+
}
|
|
107
|
+
break;
|
|
108
|
+
case 0x0a: // protracker-compatible
|
|
109
|
+
case 0x0b: // position jump
|
|
110
|
+
case 0x0c: // set volume
|
|
111
|
+
if (!hexvol) {
|
|
112
|
+
const p = event.fxp;
|
|
113
|
+
event.fxp = ((p >> 8) & 0xff) * 10 + (p & 0xff);
|
|
114
|
+
}
|
|
115
|
+
break;
|
|
116
|
+
case 0x0d: // volume slide
|
|
117
|
+
event.fxt = FX.FX_VOLSLIDE;
|
|
118
|
+
break;
|
|
119
|
+
case 0x0e: // synth jump
|
|
120
|
+
event.fxt = 0;
|
|
121
|
+
event.fxp = 0;
|
|
122
|
+
break;
|
|
123
|
+
case 0x0f: // miscellaneous
|
|
124
|
+
if (event.fxp === 0x00) { // jump to next block
|
|
125
|
+
event.fxt = FX.FX_BREAK;
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
else if (event.fxp <= 0xf0) {
|
|
129
|
+
event.fxt = FX.FX_S3M_BPM;
|
|
130
|
+
event.fxp = mmdConvertTempo(event.fxp, bpmOn, med8ch);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
switch (event.fxp) {
|
|
135
|
+
case 0xf1: // play note twice
|
|
136
|
+
event.fxt = FX.FX_EXTENDED;
|
|
137
|
+
event.fxp = (0x9 /* EX_RETRIG */ << 4) | 3;
|
|
138
|
+
break;
|
|
139
|
+
case 0xf2: // delay note
|
|
140
|
+
event.fxt = FX.FX_EXTENDED;
|
|
141
|
+
event.fxp = (0xd /* EX_DELAY */ << 4) | 3;
|
|
142
|
+
break;
|
|
143
|
+
case 0xf3: // play note three times
|
|
144
|
+
event.fxt = FX.FX_MED_RETRIG;
|
|
145
|
+
event.fxp = 0x02;
|
|
146
|
+
break;
|
|
147
|
+
case 0xf8: // turn filter off
|
|
148
|
+
case 0xf9: // turn filter on
|
|
149
|
+
case 0xfa: // MIDI pedal on
|
|
150
|
+
case 0xfb: // MIDI pedal off
|
|
151
|
+
case 0xfd: // set pitch
|
|
152
|
+
case 0xfe: // end of song
|
|
153
|
+
event.fxt = 0;
|
|
154
|
+
event.fxp = 0;
|
|
155
|
+
break;
|
|
156
|
+
case 0xff: // turn note off
|
|
157
|
+
event.fxt = 0;
|
|
158
|
+
event.fxp = 0;
|
|
159
|
+
event.note = XMP_KEY_CUT;
|
|
160
|
+
break;
|
|
161
|
+
default:
|
|
162
|
+
event.fxt = 0;
|
|
163
|
+
event.fxp = 0;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
break;
|
|
167
|
+
case 0x11: // slide pitch up (only once)
|
|
168
|
+
event.fxt = FX.FX_F_PORTA_UP;
|
|
169
|
+
break;
|
|
170
|
+
case 0x12: // slide down (only once)
|
|
171
|
+
event.fxt = FX.FX_F_PORTA_DN;
|
|
172
|
+
break;
|
|
173
|
+
case 0x14: // vibrato (protracker depth)
|
|
174
|
+
event.fxt = FX.FX_VIBRATO;
|
|
175
|
+
break;
|
|
176
|
+
case 0x15: // set finetune
|
|
177
|
+
event.fxt = FX.FX_FINETUNE;
|
|
178
|
+
event.fxp = (event.fxp + 8) << 4;
|
|
179
|
+
break;
|
|
180
|
+
case 0x16: // loop
|
|
181
|
+
event.fxt = FX.FX_EXTENDED;
|
|
182
|
+
if (event.fxp > 0x0f)
|
|
183
|
+
event.fxp = 0x0f;
|
|
184
|
+
event.fxp |= 0x60;
|
|
185
|
+
break;
|
|
186
|
+
case 0x18: // stop note
|
|
187
|
+
event.fxt = FX.FX_EXTENDED;
|
|
188
|
+
if (event.fxp > 0x0f)
|
|
189
|
+
event.fxp = 0x0f;
|
|
190
|
+
event.fxp |= 0xc0;
|
|
191
|
+
break;
|
|
192
|
+
case 0x19: // set sample start offset
|
|
193
|
+
event.fxt = FX.FX_OFFSET;
|
|
194
|
+
break;
|
|
195
|
+
case 0x1a: // slide volume up once
|
|
196
|
+
event.fxt = event.fxp ? FX.FX_F_VSLIDE_UP : 0;
|
|
197
|
+
break;
|
|
198
|
+
case 0x1b: // slide volume down once
|
|
199
|
+
event.fxt = event.fxp ? FX.FX_F_VSLIDE_DN : 0;
|
|
200
|
+
break;
|
|
201
|
+
case 0x1d: // jump to next block
|
|
202
|
+
event.fxt = FX.FX_BREAK;
|
|
203
|
+
break;
|
|
204
|
+
case 0x1e: // play line x times
|
|
205
|
+
event.fxt = FX.FX_PATT_DELAY;
|
|
206
|
+
break;
|
|
207
|
+
case 0x1f: // note delay and retrigger
|
|
208
|
+
if (event.fxp !== 0 && event.note !== 0) {
|
|
209
|
+
event.fxt = FX.FX_MED_RETRIG;
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
event.fxt = 0;
|
|
213
|
+
event.fxp = 0;
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
case 0x20: // reverse sample / relative sample offset
|
|
217
|
+
if (event.fxp === 0 && event.note !== 0) {
|
|
218
|
+
event.fxt = FX.FX_REVERSE;
|
|
219
|
+
event.fxp = 1;
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
event.fxt = 0;
|
|
223
|
+
event.fxp = 0;
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
case 0x2e: { // set track panning
|
|
227
|
+
if (event.fxp >= 0xf0 || event.fxp <= 0x10) {
|
|
228
|
+
let fxp = (((event.fxp << 24) >> 24) + 16); // (signed char)fxp + 16
|
|
229
|
+
fxp <<= 3;
|
|
230
|
+
if (fxp === 0x100)
|
|
231
|
+
fxp--;
|
|
232
|
+
event.fxt = FX.FX_SETPAN;
|
|
233
|
+
event.fxp = fxp;
|
|
234
|
+
}
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
default:
|
|
238
|
+
event.fxt = 0;
|
|
239
|
+
event.fxp = 0;
|
|
240
|
+
break;
|
|
241
|
+
}
|
|
242
|
+
void bpmlen;
|
|
243
|
+
void hexvol;
|
|
244
|
+
}
|
|
245
|
+
/** mmd_set_bpm (mmd_common.c:1038-1053). Returns the effective time_factor
|
|
246
|
+
* (C sets m->time_factor) and writes mod.bpm. */
|
|
247
|
+
export function mmdSetBpm(med8ch, deftempo, bpmOn, bpmlen) {
|
|
248
|
+
const bpm = mmdConvertTempo(deftempo, bpmOn, med8ch);
|
|
249
|
+
// 8-channel mode completely overrides regular timing.
|
|
250
|
+
let timeFactor = MED_TIME_FACTOR;
|
|
251
|
+
if (med8ch) {
|
|
252
|
+
timeFactor = DEFAULT_TIME_FACTOR;
|
|
253
|
+
}
|
|
254
|
+
else if (bpmOn) {
|
|
255
|
+
timeFactor = (DEFAULT_TIME_FACTOR * 4) / bpmlen;
|
|
256
|
+
}
|
|
257
|
+
return { bpm, timeFactor };
|
|
258
|
+
}
|
|
259
|
+
/** mmd_tracker_version (mmd_common.c:1092-1162). Returns the MED version
|
|
260
|
+
* constant plus the tracker type string (libxmp_set_type). */
|
|
261
|
+
export function mmdTrackerVersion(mmdver, mmdc, med8ch, expdata) {
|
|
262
|
+
let soundstudio = 0;
|
|
263
|
+
let medver = 0;
|
|
264
|
+
const sExtEntrsz = expdata ? expdata.s_ext_entrsz : 0;
|
|
265
|
+
const songnamelen = expdata ? expdata.songnamelen : 0;
|
|
266
|
+
let mmdch = '0'.charCodeAt(0) + mmdver;
|
|
267
|
+
if (sExtEntrsz > 18) { // s_ext_entrsz == 24
|
|
268
|
+
medver = MED_VER_OCTAMED_SS_2;
|
|
269
|
+
soundstudio = 2;
|
|
270
|
+
}
|
|
271
|
+
else if (mmdver >= 3) {
|
|
272
|
+
medver = MED_VER_OCTAMED_SS_1;
|
|
273
|
+
soundstudio = 1;
|
|
274
|
+
}
|
|
275
|
+
else if (sExtEntrsz > 10) { // s_ext_entrsz == 18
|
|
276
|
+
medver = MED_VER_OCTAMED_SS_1;
|
|
277
|
+
soundstudio = 1;
|
|
278
|
+
}
|
|
279
|
+
else if (sExtEntrsz > 8) { // s_ext_entrsz == 10
|
|
280
|
+
medver = MED_VER_OCTAMED_502;
|
|
281
|
+
}
|
|
282
|
+
else if (sExtEntrsz > 4) { // s_ext_entrsz == 8
|
|
283
|
+
medver = MED_VER_OCTAMED_500;
|
|
284
|
+
}
|
|
285
|
+
else if (mmdver >= 2) {
|
|
286
|
+
medver = MED_VER_OCTAMED_500;
|
|
287
|
+
}
|
|
288
|
+
else if (songnamelen > 0) { // added in OctaMED 3.00
|
|
289
|
+
medver = MED_VER_OCTAMED_300;
|
|
290
|
+
}
|
|
291
|
+
else if (mmdver >= 1) {
|
|
292
|
+
medver = MED_VER_OCTAMED_300;
|
|
293
|
+
}
|
|
294
|
+
else if (sExtEntrsz > 2) { // s_ext_entrsz == 4
|
|
295
|
+
if (med8ch) {
|
|
296
|
+
medver = MED_VER_OCTAMED_200;
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
medver = MED_VER_320;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
else if (expdata !== null) { // s_ext_entrsz == 2
|
|
303
|
+
if (med8ch) {
|
|
304
|
+
medver = MED_VER_OCTAMED_100;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
medver = MED_VER_300;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
medver = MED_VER_210;
|
|
312
|
+
}
|
|
313
|
+
if (mmdc) {
|
|
314
|
+
mmdch = 'C'.charCodeAt(0);
|
|
315
|
+
}
|
|
316
|
+
const ch = String.fromCharCode(mmdch);
|
|
317
|
+
let type;
|
|
318
|
+
if (soundstudio === 2) {
|
|
319
|
+
type = `MED Soundstudio 2.00 MMD${ch}`;
|
|
320
|
+
}
|
|
321
|
+
else if (soundstudio === 1) {
|
|
322
|
+
type = `OctaMED Soundstudio MMD${ch}`;
|
|
323
|
+
}
|
|
324
|
+
else if (medver > MED_VER_320) {
|
|
325
|
+
type = `OctaMED ${medver >> 12}.${(medver & 0xff).toString(16).padStart(2, '0')} MMD${ch}`;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
type = `MED ${medver >> 8}.${(medver & 0xff).toString(16).padStart(2, '0')} MMD${ch}`;
|
|
329
|
+
}
|
|
330
|
+
return { medver, type };
|
|
331
|
+
}
|
|
332
|
+
/** Read a MMD0/MMD1-style InstrExt array (mmd1_load.c:538-563 /
|
|
333
|
+
* mmd3_load.c:483-523). ver2plus adds the OctaMED V5/V5.02/V7 fields. */
|
|
334
|
+
export function readInstrExtArray(u8, u16, u32, seek, count, expdata, ver2plus) {
|
|
335
|
+
const out = [];
|
|
336
|
+
for (let i = 0; i < count && i < expdata.s_ext_entries; i++) {
|
|
337
|
+
const e = zeroInstrExt();
|
|
338
|
+
let skip = expdata.s_ext_entrsz;
|
|
339
|
+
if (expdata.s_ext_entrsz >= 2) { // MED 3.00 / OctaMED V1
|
|
340
|
+
e.hold = u8();
|
|
341
|
+
e.decay = u8();
|
|
342
|
+
skip -= 2;
|
|
343
|
+
}
|
|
344
|
+
if (expdata.s_ext_entrsz >= 4) { // MED 3.20 / OctaMED V2
|
|
345
|
+
e.suppress_midi_off = u8();
|
|
346
|
+
e.finetune = u8();
|
|
347
|
+
skip -= 2;
|
|
348
|
+
}
|
|
349
|
+
if (ver2plus && expdata.s_ext_entrsz >= 8) { // OctaMED V5
|
|
350
|
+
e.default_pitch = u8();
|
|
351
|
+
e.instr_flags = u8();
|
|
352
|
+
void u16();
|
|
353
|
+
skip -= 4;
|
|
354
|
+
}
|
|
355
|
+
if (ver2plus && expdata.s_ext_entrsz >= 10) { // OctaMED V5.02
|
|
356
|
+
void u16();
|
|
357
|
+
skip -= 2;
|
|
358
|
+
}
|
|
359
|
+
if (ver2plus && expdata.s_ext_entrsz >= 18) { // OctaMED V7
|
|
360
|
+
e.long_repeat = u32();
|
|
361
|
+
e.long_replen = u32();
|
|
362
|
+
skip -= 8;
|
|
363
|
+
}
|
|
364
|
+
out.push(e);
|
|
365
|
+
if (skip)
|
|
366
|
+
seek(skip);
|
|
367
|
+
}
|
|
368
|
+
return out;
|
|
369
|
+
}
|
|
370
|
+
/** Read MMDInstrInfo names (mmd1_load.c:567-591). */
|
|
371
|
+
export function readInstrInfoArray(raw, seek, count, expdata) {
|
|
372
|
+
const out = [];
|
|
373
|
+
for (let i = 0; i < count && i < expdata.i_ext_entries; i++) {
|
|
374
|
+
const skip = expdata.i_ext_entrsz - 40;
|
|
375
|
+
const name = raw(40);
|
|
376
|
+
if (name.length < 40)
|
|
377
|
+
throw new ParseError('MED: iinfo truncated');
|
|
378
|
+
out.push(copyAdjustName(name, 40));
|
|
379
|
+
if (skip)
|
|
380
|
+
seek(skip);
|
|
381
|
+
}
|
|
382
|
+
return out;
|
|
383
|
+
}
|
|
384
|
+
/** libxmp_copy_adjust-style name (printable ASCII, trim, stop at NUL). */
|
|
385
|
+
export function copyAdjustName(r, n) {
|
|
386
|
+
let s = '';
|
|
387
|
+
for (let i = 0; i < n && i < r.length; i++) {
|
|
388
|
+
const c = r[i];
|
|
389
|
+
if (c === 0)
|
|
390
|
+
break;
|
|
391
|
+
s += c > 127 || c < 0x20 || c === 0x7f ? '.' : String.fromCharCode(c);
|
|
392
|
+
}
|
|
393
|
+
return s.replace(/ +$/, '');
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=mmdCommon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mmdCommon.js","sourceRoot":"","sources":["../src/mmdCommon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readevent.d.ts","sourceRoot":"","sources":["../src/readevent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAgB,IAAI,EAAE,KAAK,EAA6B,MAAM,iBAAiB,CAAC;AA8C5F;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAkKpE"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Copyright (c) 2026 Bitti09 — modplayjs contributors
|
|
3
|
+
// Ported from: libxmp src/read_event.c read_event_med (:1368-1519) +
|
|
4
|
+
// med_extras.c helpers. MED's own event reader.
|
|
5
|
+
import { NoteFlag, VolSlideFlag, XMP_KEY_CUT, XMP_KEY_OFF, } from '@modplayjs/core';
|
|
6
|
+
import { RESET_NOTE, SET, SET_NOTE, getSubinstrument, isValidInstrument, isValidNote, isValidSample, setChannelVolume, setEffectDefaults, setPeriod, resetEnvelopes, processFx, medCheckHoldSymbol, } from '@modplayjs/core';
|
|
7
|
+
import { MED_VER_OCTAMED_300, MMD3_DEFAULT_NOTE } from './mmdCommon.js';
|
|
8
|
+
/** Tracker version of the loaded module (MED_MODULE_EXTRAS). */
|
|
9
|
+
function trackerVersion(core) {
|
|
10
|
+
const extras = core.module.extras;
|
|
11
|
+
return extras?.kind === 'med' ? extras.trackerVersion : 0;
|
|
12
|
+
}
|
|
13
|
+
/** libxmp_med_set_default_pitch_note (mmd_common.c:492-504): MED
|
|
14
|
+
* Soundstudio 2 mix mode default-note event (note 0x01). */
|
|
15
|
+
function setDefaultPitchNote(core, ins, defaultPitch, ver) {
|
|
16
|
+
if (ver >= 3) {
|
|
17
|
+
let note = MMD3_DEFAULT_NOTE;
|
|
18
|
+
if (defaultPitch)
|
|
19
|
+
note = defaultPitch - 1;
|
|
20
|
+
const inst = core.module.instruments[ins];
|
|
21
|
+
if (note >= 0 && note < 121)
|
|
22
|
+
inst.mapXpo[12] = note;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* read_event_med (read_event.c:1368-1519).
|
|
27
|
+
*/
|
|
28
|
+
export function readEventMed(core, e, chn) {
|
|
29
|
+
const mod = core.module;
|
|
30
|
+
const xc = core.ctx.channelStates[chn];
|
|
31
|
+
let note = -1;
|
|
32
|
+
let sub = null;
|
|
33
|
+
let newInvalidIns = 0;
|
|
34
|
+
let isToneporta = 0;
|
|
35
|
+
const ce = xc.extras;
|
|
36
|
+
const trkVer = trackerVersion(core);
|
|
37
|
+
xc.flags = 0;
|
|
38
|
+
if (e.fxt === 0x03 /* FX_TONEPORTA */ || e.fxt === 0x05 /* FX_TONE_VSLIDE */) {
|
|
39
|
+
isToneporta = 1;
|
|
40
|
+
}
|
|
41
|
+
// Check instrument.
|
|
42
|
+
if (e.ins && e.note) {
|
|
43
|
+
const ins = e.ins - 1;
|
|
44
|
+
SET(xc, VolSlideFlag.NEW_INS);
|
|
45
|
+
xc.fadeout = 0x10000;
|
|
46
|
+
xc.offset.val = 0;
|
|
47
|
+
RESET_NOTE(xc, NoteFlag.RELEASE | NoteFlag.FADEOUT);
|
|
48
|
+
if (isValidInstrument(core, ins)) {
|
|
49
|
+
if (!isToneporta) {
|
|
50
|
+
const xxi = mod.instruments[ins];
|
|
51
|
+
xc.ins = ins;
|
|
52
|
+
xc.ins_fade = xxi.rls;
|
|
53
|
+
const ie = xxi.extras;
|
|
54
|
+
if (ie && 'hold' in ie) {
|
|
55
|
+
// libxmp_med_set_hold_decay (med_extras.c:140-152).
|
|
56
|
+
if (ce) {
|
|
57
|
+
let hold = ie.hold;
|
|
58
|
+
let decay = ie.decay;
|
|
59
|
+
if (hold <= 0) {
|
|
60
|
+
hold = -1;
|
|
61
|
+
decay = -1;
|
|
62
|
+
}
|
|
63
|
+
ce.hold_active = hold > 0 ? 1 : 0;
|
|
64
|
+
ce.hold_count = hold;
|
|
65
|
+
ce.decay_value = decay;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
newInvalidIns = 1;
|
|
72
|
+
core.virt.resetChannel(chn);
|
|
73
|
+
}
|
|
74
|
+
if (ce) {
|
|
75
|
+
ce.arp = 0;
|
|
76
|
+
ce.aidx = 0;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (e.ins) {
|
|
80
|
+
// Hold symbols apply default volume from OctaMED 3.00 onward,
|
|
81
|
+
// but they do not in older trackers. All events with a note
|
|
82
|
+
// and an instrument apply default volume.
|
|
83
|
+
if (isValidNote(e.note - 1) || trkVer >= MED_VER_OCTAMED_300) {
|
|
84
|
+
// Get new instrument volume.
|
|
85
|
+
sub = getSubinstrument(core, e.ins - 1, e.note - 1);
|
|
86
|
+
if (sub !== null) {
|
|
87
|
+
setChannelVolume(xc, sub.vol);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// Check note.
|
|
92
|
+
if (e.note) {
|
|
93
|
+
SET(xc, VolSlideFlag.NEW_NOTE);
|
|
94
|
+
if (e.note === XMP_KEY_OFF) {
|
|
95
|
+
SET_NOTE(xc, NoteFlag.RELEASE);
|
|
96
|
+
}
|
|
97
|
+
else if (e.note === XMP_KEY_CUT) {
|
|
98
|
+
SET_NOTE(xc, NoteFlag.END);
|
|
99
|
+
xc.period = 0;
|
|
100
|
+
core.virt.resetChannel(chn);
|
|
101
|
+
}
|
|
102
|
+
else if (!isToneporta && isValidInstrument(core, xc.ins) &&
|
|
103
|
+
isValidNote(e.note - 1)) {
|
|
104
|
+
const xxi = mod.instruments[xc.ins];
|
|
105
|
+
xc.key = e.note - 1;
|
|
106
|
+
RESET_NOTE(xc, NoteFlag.END);
|
|
107
|
+
xc.per_adj = 0;
|
|
108
|
+
const ie = xxi.extras;
|
|
109
|
+
if (xxi.nsm > 1 && ie && 'vts' in ie) {
|
|
110
|
+
// synth or iffoct
|
|
111
|
+
if (ie.vts === 0 && ie.wts === 0) {
|
|
112
|
+
// iffoct
|
|
113
|
+
xc.per_adj = 2.0;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
sub = getSubinstrument(core, xc.ins, xc.key);
|
|
117
|
+
if (!newInvalidIns && sub !== null) {
|
|
118
|
+
const transp = xxi.mapXpo[xc.key] ?? 0;
|
|
119
|
+
let smp;
|
|
120
|
+
note = xc.key + sub.xpo + transp;
|
|
121
|
+
smp = sub.sid;
|
|
122
|
+
if (!isValidSample(core, smp)) {
|
|
123
|
+
smp = -1;
|
|
124
|
+
}
|
|
125
|
+
if (smp >= 0 && smp < mod.samples.length) {
|
|
126
|
+
core.virt.setPatchSmp(chn, xc.ins, smp, note);
|
|
127
|
+
xc.smp = smp;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
xc.flags = 0;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// sub is now the currently playing subinstrument, which may not be
|
|
136
|
+
// related to e.ins if there is active toneporta!
|
|
137
|
+
sub = getSubinstrument(core, xc.ins, xc.key);
|
|
138
|
+
// Keep effect-set finetune if no instrument set.
|
|
139
|
+
const finetune = xc.finetune;
|
|
140
|
+
setEffectDefaults(core, note, sub, xc, isToneporta !== 0);
|
|
141
|
+
if (!e.ins) {
|
|
142
|
+
xc.finetune = finetune;
|
|
143
|
+
}
|
|
144
|
+
if (e.ins && sub !== null) {
|
|
145
|
+
resetEnvelopes(core, xc);
|
|
146
|
+
const ie = mod.instruments[e.ins - 1]?.extras;
|
|
147
|
+
if (ie && 'default_pitch' in ie) {
|
|
148
|
+
setDefaultPitchNote(core, e.ins - 1, ie.default_pitch, 3);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Process new volume.
|
|
152
|
+
setChannelVolume(xc, e.vol - 1);
|
|
153
|
+
// Secondary effect handled first.
|
|
154
|
+
processFx(core, xc, chn, e, 1);
|
|
155
|
+
processFx(core, xc, chn, e, 0);
|
|
156
|
+
setPeriod(core, note, sub, xc, isToneporta !== 0);
|
|
157
|
+
// Test next line for a hold symbol. Hold is set either by the
|
|
158
|
+
// instrument or by command 08 Hold/Decay, so test after effects.
|
|
159
|
+
medCheckHoldSymbol(core, xc, chn);
|
|
160
|
+
if (sub === null) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (note >= 0) {
|
|
164
|
+
xc.note = note;
|
|
165
|
+
core.virt.voicePos(chn, xc.offset.val);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=readevent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"readevent.js","sourceRoot":"","sources":["../src/readevent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@modplayjs/fmt-med",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"description": "MED/OctaMED (.med MMD0/1/2/3, MED2/3/4) format plugin for modplayjs (libxmp mmd1_load.c/mmd3_load.c/med*_load.c port).",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsc -p tsconfig.build.json",
|
|
19
|
+
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"@modplayjs/core": "^0.2.2"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"tracker",
|
|
26
|
+
"med",
|
|
27
|
+
"mmd",
|
|
28
|
+
"octamed",
|
|
29
|
+
"libxmp",
|
|
30
|
+
"chiptune",
|
|
31
|
+
"audio",
|
|
32
|
+
"music"
|
|
33
|
+
],
|
|
34
|
+
"sideEffects": false,
|
|
35
|
+
"engines": {
|
|
36
|
+
"node": ">=18"
|
|
37
|
+
},
|
|
38
|
+
"repository": {
|
|
39
|
+
"type": "git",
|
|
40
|
+
"url": "git+https://github.com/modplayjs/modplayjs.git",
|
|
41
|
+
"directory": "packages/fmt-med"
|
|
42
|
+
},
|
|
43
|
+
"bugs": "https://github.com/modplayjs/modplayjs/issues",
|
|
44
|
+
"homepage": "https://github.com/modplayjs/modplayjs#readme",
|
|
45
|
+
"license": "BSD-3-Clause",
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"registry": "https://npm.pkg.github.com"
|
|
48
|
+
}
|
|
49
|
+
}
|