@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.
@@ -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,6 @@
1
+ import type { Core, Event } from '@modplayjs/core';
2
+ /**
3
+ * read_event_med (read_event.c:1368-1519).
4
+ */
5
+ export declare function readEventMed(core: Core, e: Event, chn: number): void;
6
+ //# sourceMappingURL=readevent.d.ts.map
@@ -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.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
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
+ }