@modplayjs/fmt-stm 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 CHANGED
@@ -1,3 +1,23 @@
1
- # Temporary Holding Version
1
+ # @modplayjs/fmt-stm
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ **Scream Tracker 2 (.stm) format plugin** for `@modplayjs/core`, ported
4
+ 1:1 from libxmp's `stm_load.c` (ST2 tempo/semaphore semantics).
5
+
6
+ ## Install
7
+
8
+ ```sh
9
+ npm install @modplayjs/fmt-stm
10
+ ```
11
+
12
+ ## Usage
13
+
14
+ ```ts
15
+ import { CorePlayer } from '@modplayjs/core';
16
+ import { plugin as stmPlugin } from '@modplayjs/fmt-stm';
17
+
18
+ const core = new CorePlayer();
19
+ core.registries.registerFormat(stmPlugin);
20
+ core.loadModule(bytes);
21
+ ```
22
+
23
+ Part of the [modplayjs monorepo](../../README.md). BSD-3-Clause.
@@ -0,0 +1,2 @@
1
+ export { stmTest, stmLoad, plugin } from './stm.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Project-original code.
4
+ // @modplayjs/fmt-stm — Scream Tracker 2 (.stm) loader + event reader.
5
+ export { stmTest, stmLoad, plugin } from './stm.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,sDAAsD;AACtD,yBAAyB;AACzB,sEAAsE;AAEtE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC"}
package/dist/stm.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { FormatPlugin, LoadCtx, ModuleData } from '@modplayjs/core';
2
+ export declare function stmTest(bytes: Uint8Array): boolean;
3
+ export declare function stmLoad(bytes: Uint8Array, ctx: LoadCtx): ModuleData;
4
+ /** STM format plugin (libxmp loaders/stm_load.c + read_event_st3). */
5
+ export declare const plugin: FormatPlugin;
6
+ //# sourceMappingURL=stm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stm.d.ts","sourceRoot":"","sources":["../src/stm.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAQ,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA2F/E,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CA4BlD;AAgED,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAgVnE;AAMD,sEAAsE;AACtE,eAAO,MAAM,MAAM,EAAE,YAUpB,CAAC"}
package/dist/stm.js ADDED
@@ -0,0 +1,489 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/stm_load.c (stm_test :104-156,
4
+ // stm_load :184-496, stm_convert_tempo :194-208, stm_calculate_bpm :172-192,
5
+ // fx table :163-181).
6
+ import { SampleFlags } from '@modplayjs/core';
7
+ import { LSN, MSN } from '@modplayjs/core';
8
+ import { ParseError } from '@modplayjs/core';
9
+ import { FX_ARPEGGIO, FX_BREAK, FX_JUMP, FX_PORTA_DN, FX_PORTA_UP, FX_S3M_BPM, FX_S3M_SPEED, FX_SPEED, FX_TONEPORTA, FX_TREMOR, FX_VIBRATO, FX_VOLSLIDE, } from '@modplayjs/core';
10
+ import { FLOW_MODE_ST2, Quirk, QUIRKS_ST3, XMP_KEY_OFF } from '@modplayjs/core';
11
+ import { readEventSt3 } from '@modplayjs/core';
12
+ /** STM_MIX_RATE (stm_load.c:24) — highest mix rate in released ST2 versions. */
13
+ const STM_MIX_RATE = 23863;
14
+ /** STM_TYPE_SONG / STM_TYPE_MODULE (stm_load.c:27-28). */
15
+ const STM_TYPE_SONG = 0x01;
16
+ const STM_TYPE_MODULE = 0x02;
17
+ /** XMP_MIN_BPM (xmp.h:135) = 20. */
18
+ const XMP_MIN_BPM = 20;
19
+ /** Zeroed envelope (libxmp_init_instrument calloc semantics). */
20
+ function zeroEnvelope() {
21
+ return { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] };
22
+ }
23
+ function zeroInstrument(name, sub) {
24
+ return {
25
+ name,
26
+ volume: 0x40,
27
+ nsm: 0,
28
+ rls: 0,
29
+ map: new Array(121).fill(0),
30
+ mapXpo: new Array(121).fill(0),
31
+ sub,
32
+ aei: zeroEnvelope(),
33
+ fei: zeroEnvelope(),
34
+ pei: zeroEnvelope(),
35
+ };
36
+ }
37
+ function readmem16l(m, off) {
38
+ return m[off] | (m[off + 1] << 8);
39
+ }
40
+ function readmem32l(m, off) {
41
+ return (m[off] | (m[off + 1] << 8) | (m[off + 2] << 16) | (m[off + 3] << 24)) >>> 0;
42
+ }
43
+ /** libxmp_copy_adjust (common.c:237-253): printable ASCII, trim. */
44
+ function copyAdjust(r, n) {
45
+ let s = '';
46
+ for (let i = 0; i < n && i < r.length; i++) {
47
+ const c = r[i];
48
+ if (c === 0)
49
+ break; // strncpy stops at NUL (common.c:244)
50
+ s += c > 127 || c < 0x20 || c === 0x7f ? '.' : String.fromCharCode(c);
51
+ }
52
+ return s.replace(/ +$/, '');
53
+ }
54
+ /** libxmp_test_name (common.c:274-292, flags=0): printable ASCII check. */
55
+ function testName(s, n) {
56
+ for (let i = 0; i < n && i < s.length; i++) {
57
+ if (s[i] > 0x7f)
58
+ return false;
59
+ if (s[i] > 0 && s[i] < 32 && s[i] !== 0x08 && s[i] !== 0x0e)
60
+ return false;
61
+ }
62
+ return true;
63
+ }
64
+ /** libxmp_c2spd_to_note (period.c:251-264). */
65
+ function c2spdToNote(c2spd) {
66
+ if (c2spd <= 0)
67
+ return { n: 0, f: 0 };
68
+ const c = Math.trunc((1536.0 * Math.log(c2spd / 8363)) / Math.LN2);
69
+ return { n: Math.trunc(c / 128), f: c % 128 };
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // stm_test (stm_load.c:104-156)
73
+ // ---------------------------------------------------------------------------
74
+ export function stmTest(bytes) {
75
+ if (bytes.length < 64)
76
+ return false;
77
+ // Tracker name should be ASCII (stm_load.c:110-112).
78
+ const buf = bytes.subarray(20, 28);
79
+ if (!testName(buf, 8))
80
+ return false;
81
+ // EOF should be 0x1a; putup10/11.stm have 2 (stm_load.c:114-117).
82
+ if (bytes[28] !== 0x1a && bytes[28] !== 0x02)
83
+ return false;
84
+ if (bytes[29] > STM_TYPE_MODULE)
85
+ return false;
86
+ const version = 100 * bytes[30] + bytes[31];
87
+ if (version !== 110 && version !== 200 && version !== 210 &&
88
+ version !== 220 && version !== 221) {
89
+ return false;
90
+ }
91
+ // We don't want STX files (stm_load.c:137-140): 'SCRM' @ 60.
92
+ if (bytes[60] === 0x53 && bytes[61] === 0x43 &&
93
+ bytes[62] === 0x52 && bytes[63] === 0x4d) {
94
+ return false;
95
+ }
96
+ return true;
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // fx table (stm_load.c:163-181)
100
+ // ---------------------------------------------------------------------------
101
+ const FX_NONE_VAL = 0xff;
102
+ const fxTable = [
103
+ FX_NONE_VAL,
104
+ FX_SPEED, // A - set tempo
105
+ FX_JUMP, // B - break pattern + jump to order
106
+ FX_BREAK, // C - break pattern
107
+ FX_VOLSLIDE, // D - volume slide
108
+ FX_PORTA_DN, // E - slide down
109
+ FX_PORTA_UP, // F - slide up
110
+ FX_TONEPORTA, // G - tone portamento
111
+ FX_VIBRATO, // H - vibrato
112
+ FX_TREMOR, // I - tremor
113
+ FX_ARPEGGIO, // J - arpeggio
114
+ FX_NONE_VAL, FX_NONE_VAL, FX_NONE_VAL, FX_NONE_VAL, FX_NONE_VAL,
115
+ ];
116
+ // ---------------------------------------------------------------------------
117
+ // Tempo conversion (stm_load.c:172-208)
118
+ // ---------------------------------------------------------------------------
119
+ /**
120
+ * stm_calculate_bpm (stm_load.c:172-192). ST2 tempo derives from the mix
121
+ * buffer size at STM_MIX_RATE.
122
+ */
123
+ function stmCalculateBpm(spd, tempoFactor) {
124
+ const speedFactor = [140, 50, 25, 15, 10, 7, 6, 4, 3, 3, 2, 2, 2, 2, 1, 1];
125
+ const divisor = 50 - ((speedFactor[spd] * tempoFactor) >> 4);
126
+ let tickFrames = divisor !== 0 ? Math.trunc(STM_MIX_RATE / divisor) : -1;
127
+ // (unsigned)tick_frames & 0xffff
128
+ tickFrames = (tickFrames >>> 0) & 0xffff;
129
+ // (STM_MIX_RATE * 5 + tick_frames) / (tick_frames * 2) — C integer division
130
+ if (tickFrames === 0)
131
+ return XMP_MIN_BPM;
132
+ return Math.trunc((STM_MIX_RATE * 5 + tickFrames) / (tickFrames * 2));
133
+ }
134
+ /** stm_convert_tempo (stm_load.c:194-208). */
135
+ function stmConvertTempo(tempo, version) {
136
+ let spd;
137
+ let bpm;
138
+ if (version >= 221) {
139
+ spd = MSN(tempo);
140
+ bpm = stmCalculateBpm(spd, LSN(tempo));
141
+ }
142
+ else if (version >= 110) {
143
+ spd = Math.trunc(tempo / 10);
144
+ bpm = stmCalculateBpm(Math.min(spd, 15), tempo % 10);
145
+ }
146
+ else {
147
+ spd = tempo;
148
+ bpm = 125;
149
+ }
150
+ spd = Math.max(spd, 1);
151
+ bpm = Math.max(bpm, XMP_MIN_BPM);
152
+ return { spd, bpm };
153
+ }
154
+ // ---------------------------------------------------------------------------
155
+ // stm_load (stm_load.c:210-496)
156
+ // ---------------------------------------------------------------------------
157
+ export function stmLoad(bytes, ctx) {
158
+ let pos = 0;
159
+ const u8 = () => bytes[pos++];
160
+ const u16 = () => { const v = readmem16l(bytes, pos); pos += 2; return v; };
161
+ const u32 = () => { const v = readmem32l(bytes, pos); pos += 4; return v; };
162
+ const raw = (n) => { const s = bytes.subarray(pos, pos + n); pos += n; return s; };
163
+ const name = raw(20);
164
+ const magic = raw(8);
165
+ const rsvd1 = u8();
166
+ void rsvd1;
167
+ const type = u8();
168
+ const vermaj = u8();
169
+ const vermin = u8();
170
+ const version = 100 * vermaj + vermin;
171
+ if (version !== 110 && version !== 200 && version !== 210 &&
172
+ version !== 220 && version !== 221) {
173
+ throw new ParseError(`STM: unknown version ${version}`);
174
+ }
175
+ let chn;
176
+ let pat;
177
+ let ins;
178
+ let len;
179
+ let spd;
180
+ let bpm;
181
+ let gvol = 0x40;
182
+ if (version >= 200) {
183
+ // v2 subheader (stm_load.c:248-258)
184
+ const tempo = u8();
185
+ const patterns = u8();
186
+ gvol = u8();
187
+ raw(13); // rsvd2
188
+ chn = 4;
189
+ pat = patterns;
190
+ const t = stmConvertTempo(tempo, version);
191
+ spd = t.spd;
192
+ bpm = t.bpm;
193
+ ins = 31;
194
+ len = version === 200 ? 64 : 128;
195
+ }
196
+ else {
197
+ // v1 subheader (stm_load.c:260-291)
198
+ const insnum = u16();
199
+ if (insnum > 32)
200
+ throw new ParseError(`STM: too many instruments ${insnum}`);
201
+ const ordnum = u16();
202
+ if (ordnum > 256)
203
+ throw new ParseError(`STM: too many orders ${ordnum}`);
204
+ const patnum = u16();
205
+ if (patnum > 256)
206
+ throw new ParseError(`STM: too many patterns ${patnum}`);
207
+ u16(); // srate
208
+ const tempo = u8();
209
+ const channels = u8();
210
+ if (channels !== 4)
211
+ throw new ParseError(`STM: wrong channel count ${channels}`);
212
+ const psize = u16();
213
+ if (psize !== 64)
214
+ throw new ParseError(`STM: wrong rows per pattern ${psize}`);
215
+ u16(); // rsvd2
216
+ const skip = u16();
217
+ pos += skip; // hio_seek(f, skip, SEEK_CUR)
218
+ chn = channels;
219
+ pat = patnum;
220
+ const t = stmConvertTempo(tempo, version);
221
+ spd = t.spd;
222
+ bpm = t.bpm;
223
+ ins = insnum;
224
+ len = ordnum;
225
+ }
226
+ const insHeaders = [];
227
+ const insCount = version >= 200 ? 31 : ins;
228
+ for (let i = 0; i < insCount; i++) {
229
+ const iname = raw(13);
230
+ u8(); // idisk
231
+ const irsvd1 = u16();
232
+ const ilength = u16();
233
+ const iloopbeg = u16();
234
+ const iloopend = u16();
235
+ const ivolume = u8();
236
+ u8(); // rsvd2
237
+ const ic2spd = u16();
238
+ u32(); // rsvd3
239
+ const iparalen = u16();
240
+ insHeaders.push({
241
+ name: iname, rsvd1: irsvd1, length: ilength, loopbeg: iloopbeg,
242
+ loopend: iloopend, volume: ivolume, c2spd: ic2spd, paralen: iparalen,
243
+ });
244
+ }
245
+ // m->c4rate = C4_NTSC_RATE (stm_load.c:323)
246
+ const c4rate = 8363;
247
+ // Type string (stm_load.c:330-338)
248
+ const magicStr = String.fromCharCode(...magic);
249
+ let typeStr;
250
+ if (!magic[0] || magicStr.startsWith('PCSTV') || magicStr === '!Scream!') {
251
+ typeStr = `Scream Tracker ${vermaj}.${String(vermin).padStart(2, '0')}`;
252
+ }
253
+ else if (magicStr.startsWith('SWavePro')) {
254
+ typeStr = `SoundWave Pro ${vermaj}.${String(vermin).padStart(2, '0')}`;
255
+ }
256
+ else {
257
+ typeStr = copyAdjust(magic, 8);
258
+ }
259
+ // Instruments + samples (stm_load.c:344-377)
260
+ const instruments = [];
261
+ const rawSamples = [];
262
+ for (let i = 0; i < ins; i++) {
263
+ const h = insHeaders[i];
264
+ const ilpe = h.loopend === 0xffff ? 0 : h.loopend;
265
+ const xflg = ilpe > 0 ? SampleFlags.LOOP : 0;
266
+ const sub = {
267
+ vol: h.volume,
268
+ gvl: 0x40, // no QUIRK_INSVOL: load_epilogue sets gvl = volbase (load_helpers.c:377-383)
269
+ pan: -1, // XMP_INST_NO_DEFAULT_PAN
270
+ xpo: 0,
271
+ fin: 0,
272
+ vwf: 0, vde: 0, vra: 0, vsw: 0,
273
+ sid: i,
274
+ rvv: 0, nna: 0, dct: 0, dca: 0, ifc: 0, ifr: 0,
275
+ };
276
+ // libxmp_c2spd_to_note (stm_load.c:374-376)
277
+ const cn = c2spdToNote(h.c2spd);
278
+ sub.xpo = cn.n;
279
+ sub.fin = cn.f;
280
+ const nameStr = copyAdjust(h.name.subarray(0, 12), 12);
281
+ const xi = zeroInstrument(nameStr, [sub]);
282
+ if (h.length > 0)
283
+ xi.nsm = 1;
284
+ instruments.push(xi);
285
+ rawSamples.push({
286
+ // stm_load.c names only the INSTRUMENT — xxs->name stays empty in C.
287
+ name: '',
288
+ data: new Uint8Array(0),
289
+ length: h.length,
290
+ loopStart: h.loopbeg,
291
+ loopEnd: ilpe,
292
+ sustainStart: 0,
293
+ sustainEnd: 0,
294
+ finetune: 0,
295
+ volume: h.volume,
296
+ flags: xflg,
297
+ c5spd: c4rate,
298
+ });
299
+ }
300
+ // Order table (stm_load.c:379-396)
301
+ const xxoRaw = raw(len);
302
+ const xxo = [];
303
+ let blankPattern = 0;
304
+ let i = 0;
305
+ for (; i < len; i++) {
306
+ const x = xxoRaw[i];
307
+ if (x >= 99)
308
+ break;
309
+ if (x >= pat) {
310
+ xxo.push(pat);
311
+ blankPattern = 1;
312
+ }
313
+ else {
314
+ xxo.push(x);
315
+ }
316
+ }
317
+ const storedPatterns = pat;
318
+ if (blankPattern !== 0)
319
+ pat++;
320
+ len = i;
321
+ // Patterns (stm_load.c:413-483). The blank pattern (orders pointing past
322
+ // the stored count) is index stored_patterns — C allocates it AFTER the
323
+ // stored ones (:420-423 then the loop reads stored_patterns patterns).
324
+ const patterns = [];
325
+ const mkTrack = () => Array.from({ length: 64 }, () => ({ note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0 }));
326
+ for (i = 0; i < storedPatterns; i++) {
327
+ const tracksArr = [];
328
+ for (let k = 0; k < chn; k++)
329
+ tracksArr.push({ rows: 64, event: mkTrack() });
330
+ const pattern = { rows: 64, tracks: tracksArr };
331
+ for (let j = 0; j < 64; j++) {
332
+ for (let k = 0; k < chn; k++) {
333
+ const e = pattern.tracks[k].event[j];
334
+ let b = u8();
335
+ if (b === 251 || b === 252)
336
+ continue; // empty note
337
+ if (b === 253) {
338
+ e.note = XMP_KEY_OFF;
339
+ continue; // key off
340
+ }
341
+ if (b === 254) {
342
+ e.note = XMP_KEY_OFF;
343
+ }
344
+ else if (b === 255) {
345
+ e.note = 0;
346
+ }
347
+ else {
348
+ e.note = 1 + LSN(b) + 12 * (3 + MSN(b));
349
+ }
350
+ b = u8();
351
+ let vol = b & 0x07;
352
+ e.ins = (b & 0xf8) >> 3;
353
+ b = u8();
354
+ vol += (b & 0xf0) >> 1;
355
+ if (version >= 200) {
356
+ e.vol = vol > 0x40 ? 0 : vol + 1;
357
+ }
358
+ else {
359
+ if (vol > 0) {
360
+ e.vol = vol > 0x40 ? 1 : vol + 1;
361
+ }
362
+ }
363
+ e.fxt = fxTable[LSN(b)];
364
+ e.fxp = u8();
365
+ switch (e.fxt) {
366
+ case FX_BREAK:
367
+ // ST2 always breaks to row 0 (stm_load.c:462-465)
368
+ e.fxp = 0;
369
+ break;
370
+ case FX_SPEED:
371
+ if (e.fxp !== 0) {
372
+ const t = stmConvertTempo(e.fxp, version);
373
+ e.fxt = FX_S3M_SPEED;
374
+ e.fxp = t.spd;
375
+ if (version >= 110) {
376
+ e.f2t = FX_S3M_BPM;
377
+ e.f2p = t.bpm;
378
+ }
379
+ }
380
+ else {
381
+ // A00 is a no-op (stm_load.c:476-479)
382
+ e.fxt = 0;
383
+ e.fxp = 0;
384
+ }
385
+ break;
386
+ case FX_NONE_VAL:
387
+ e.fxp = 0;
388
+ e.fxt = 0;
389
+ break;
390
+ }
391
+ }
392
+ }
393
+ patterns.push(pattern);
394
+ }
395
+ // Blank pattern (stm_load.c:420-423) — index stored_patterns, all-empty.
396
+ if (blankPattern !== 0) {
397
+ const tracksArr = [];
398
+ for (let k = 0; k < chn; k++)
399
+ tracksArr.push({ rows: 64, event: mkTrack() });
400
+ patterns.push({ rows: 64, tracks: tracksArr });
401
+ }
402
+ // Sample data (stm_load.c:486-510): STM_TYPE_SONG loads from external
403
+ // files (no FS access — keep metadata only, documented adaptation);
404
+ // STM_TYPE_MODULE seeks rsvd1 << 4 paragraphs. Every slot is registered
405
+ // (C's xxs[] has one entry per instrument regardless of emptiness).
406
+ for (i = 0; i < ins; i++) {
407
+ const h = insHeaders[i];
408
+ const rawS = rawSamples[i];
409
+ if (h.volume === 0 || h.length === 0) {
410
+ instruments[i].nsm = 0;
411
+ ctx.addSample(rawS);
412
+ continue;
413
+ }
414
+ if (type === STM_TYPE_SONG) {
415
+ // External instrument file — unavailable in-browser (documented
416
+ // adaptation; libxmp continues silently on missing files).
417
+ ctx.addSample(rawS);
418
+ continue;
419
+ }
420
+ const dataPos = h.rsvd1 << 4;
421
+ if (dataPos > bytes.length) {
422
+ throw new ParseError(`STM: seek error in sample data (${i})`);
423
+ }
424
+ const remaining = bytes.length - dataPos;
425
+ const take = Math.min(h.length, Math.max(0, remaining));
426
+ rawS.data = bytes.subarray(dataPos, dataPos + take);
427
+ // STM stores signed PCM by default (no SAMPLE_FLAG_UNS here —
428
+ // stm_load.c:507 libxmp_load_sample(m, f, 0, ...)).
429
+ ctx.addSample(rawS);
430
+ }
431
+ // Final quirks (stm_load.c:512-515)
432
+ const quirkFlags = Quirk.VSALL | QUIRKS_ST3;
433
+ // Channel defaults: load prologue LRLR (load_helpers.c:334-339)
434
+ const chan = [];
435
+ for (let k = 0; k < chn; k++) {
436
+ const pan = Math.floor((k + 1) / 2) % 2 * 0xff;
437
+ chan.push({ pan: Math.min(255, Math.max(0, 0x80 + (pan - 0x80))), vol: 0x40, flg: 0 });
438
+ }
439
+ const mod = {
440
+ title: copyAdjust(name, 20),
441
+ format: 'stm',
442
+ comment: '',
443
+ chn,
444
+ pat,
445
+ ins,
446
+ len,
447
+ restart: 0,
448
+ xxo,
449
+ channels: chan,
450
+ patterns,
451
+ instruments,
452
+ samples: rawSamples,
453
+ num_sequences: 0,
454
+ sequences: [],
455
+ speed: spd,
456
+ bpm,
457
+ volbase: 0x40,
458
+ gvolbase: 0x40,
459
+ gvol,
460
+ quirks: quirkFlags,
461
+ flowMode: FLOW_MODE_ST2,
462
+ readEventType: 2, // READ_EVENT_ST3
463
+ periodType: 0, // PERIOD_AMIGA
464
+ defpan: 0x80,
465
+ time_factor: 10,
466
+ rrate: 250,
467
+ c4rate,
468
+ compare_vblank: false,
469
+ tracker: typeStr,
470
+ };
471
+ void ctx.sampleRate;
472
+ void ctx.outputRate;
473
+ return mod;
474
+ }
475
+ // ---------------------------------------------------------------------------
476
+ // Plugin
477
+ // ---------------------------------------------------------------------------
478
+ /** STM format plugin (libxmp loaders/stm_load.c + read_event_st3). */
479
+ export const plugin = {
480
+ name: 'stm',
481
+ test: stmTest,
482
+ load: stmLoad,
483
+ readEvent(core, chn, row) {
484
+ const mod = core.module;
485
+ const e = core.readEventScratch(chn) ?? core.readEventAt(mod.xxo[core.ctx.p.ord] ?? 0, chn, row);
486
+ readEventSt3(core, e, chn);
487
+ },
488
+ };
489
+ //# sourceMappingURL=stm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stm.js","sourceRoot":"","sources":["../src/stm.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,49 @@
1
1
  {
2
2
  "name": "@modplayjs/fmt-stm",
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": "Scream Tracker 2 (.stm) format plugin for modplayjs (libxmp stm_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
+ "@modplayjs/fmt-mod": "^0.2.2"
24
+ },
25
+ "keywords": [
26
+ "tracker",
27
+ "stm",
28
+ "scream tracker",
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-stm"
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
+ }