@modplayjs/fmt-st 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 CHANGED
@@ -1,3 +1,24 @@
1
- # Temporary Holding Version
1
+ # @modplayjs/fmt-st
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
+ **Ultimate Soundtracker (ST/UST) plugin** for `@modplayjs/core` — the
4
+ original 15-instrument MOD family, ported 1:1 from libxmp's `st_load.c`
5
+ with The Ultimate Soundtracker quirk handling.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ npm install @modplayjs/fmt-st
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```ts
16
+ import { CorePlayer } from '@modplayjs/core';
17
+ import { plugin as stPlugin } from '@modplayjs/fmt-st';
18
+
19
+ const core = new CorePlayer();
20
+ core.registries.registerFormat(stPlugin);
21
+ core.loadModule(bytes);
22
+ ```
23
+
24
+ Part of the [modplayjs monorepo](../../README.md). BSD-3-Clause.
@@ -0,0 +1,2 @@
1
+ export { stTest, stLoad, plugin } from './st.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // @modplayjs/fmt-st — Ultimate Soundtracker family (15-instrument MOD).
4
+ export { stTest, stLoad, plugin } from './st.js';
5
+ //# 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,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
package/dist/st.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { FormatPlugin, LoadCtx, ModuleData } from '@modplayjs/core';
2
+ /** st_test (st_load.c:62-249). */
3
+ export declare function stTest(bytes: Uint8Array): boolean;
4
+ /** st_load (st_load.c:251-517). */
5
+ export declare function stLoad(bytes: Uint8Array, ctx: LoadCtx): ModuleData;
6
+ /** ST format plugin (libxmp loaders/st_load.c + read_event MOD family). */
7
+ export declare const plugin: FormatPlugin;
8
+ //# sourceMappingURL=st.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st.d.ts","sourceRoot":"","sources":["../src/st.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAQ,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA4F/E,kCAAkC;AAClC,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAwHjD;AA4CD,mCAAmC;AACnC,wBAAgB,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,GAAG,UAAU,CAwOlE;AAED,2EAA2E;AAC3E,eAAO,MAAM,MAAM,EAAE,YAOpB,CAAC"}
package/dist/st.js ADDED
@@ -0,0 +1,488 @@
1
+ // SPDX-License-Identifier: BSD-3-Clause
2
+ // Copyright (c) 2026 Bitti09 — modplayjs contributors
3
+ // Ported from: libxmp src/loaders/st_load.c (st_test :62-249, st_load
4
+ // :251-517), the Ultimate Soundtracker / D.O.C Soundtracker family
5
+ // (15 instruments, no magic).
6
+ import { C4_PAL_RATE, PeriodType, Quirk, ReadEventType, SampleFlags } from '@modplayjs/core';
7
+ import { LSN, MSN, ParseError } from '@modplayjs/core';
8
+ import { readEvent as readEventDispatch, decodeEvent, TrackerId } from '@modplayjs/fmt-mod';
9
+ /** musanx.mod contains 22 period and instrument errors (st_load.c:40). */
10
+ const ST_MAX_PATTERN_ERRORS = 22;
11
+ /** Worst known truncation is u2.mod with 7% (st_load.c:43). */
12
+ const ST_TRUNCATION_LIMIT = 93;
13
+ /** ST period table (st_load.c:46-54) incl. the off-by-one values. */
14
+ const PERIOD = [
15
+ 856, 808, 762, 720, 678, 640, 604, 570, 538, 508, 480, 453,
16
+ 428, 404, 381, 360, 339, 320, 302, 285, 269, 254, 240, 226,
17
+ 214, 202, 190, 180, 170, 160, 151, 143, 135, 127, 120, 113,
18
+ // Off-by-one period values found in blueberry.mod, snd.mod,
19
+ // quite a lot.mod, sweet dreams.mod, and bar----fringdus.mod
20
+ 763, 679, 641, 571, 539, 509, 429, 340, 321, 300, 286, 270,
21
+ 227, 191, 162,
22
+ -1,
23
+ ];
24
+ /** st_expected_size (st_load.c:56-60). */
25
+ function stExpectedSize(smpSize, pat) {
26
+ return 600 + smpSize + 1024 * pat;
27
+ }
28
+ /** libxmp_test_name (common.c:274-296) with TEST_NAME_* flags. */
29
+ function testName(s, n, flags) {
30
+ const IGNORE_AFTER_0 = 0x0001;
31
+ const IGNORE_AFTER_CR = 0x0002;
32
+ for (let i = 0; i < n && i < s.length; i++) {
33
+ const c = s[i];
34
+ if (c === 0 && (flags & IGNORE_AFTER_0) !== 0)
35
+ break;
36
+ if (c === 0x0d && (flags & IGNORE_AFTER_CR) !== 0)
37
+ break;
38
+ if (c > 0x7f)
39
+ return false;
40
+ // ACS_Team2.mod has a backspace in instrument name
41
+ // Numerous ST modules from Music Channel BBS have char 14.
42
+ if (c > 0 && c < 32 && c !== 0x08 && c !== 0x0e)
43
+ return false;
44
+ }
45
+ return true;
46
+ }
47
+ /** Read the 600-byte ST header. */
48
+ function readHeader(bytes) {
49
+ const name = bytes.slice(0, 20);
50
+ // The Super Ski 2 modules have unusual "SONG\x13\x88" names.
51
+ if (name[5] === 0x88) {
52
+ name[5] = 0x58; // 'X'
53
+ if (name[4] === 0x13)
54
+ name[4] = 0x58; // 'X'
55
+ }
56
+ const ins = [];
57
+ for (let i = 0; i < 15; i++) {
58
+ const pos = 20 + i * 30;
59
+ ins.push({
60
+ name: bytes.slice(pos, pos + 22),
61
+ size: (bytes[pos + 22] << 8) | bytes[pos + 23],
62
+ finetune: bytes[pos + 24],
63
+ volume: bytes[pos + 25],
64
+ loop_start: (bytes[pos + 26] << 8) | bytes[pos + 27],
65
+ loop_size: (bytes[pos + 28] << 8) | bytes[pos + 29],
66
+ });
67
+ }
68
+ return {
69
+ name,
70
+ ins,
71
+ len: bytes[470],
72
+ restart: bytes[471],
73
+ order: bytes.slice(472, 600),
74
+ };
75
+ }
76
+ /** st_test (st_load.c:62-249). */
77
+ export function stTest(bytes) {
78
+ const size = bytes.length;
79
+ if (size < 600)
80
+ return false;
81
+ let smpSize = 0;
82
+ const mh = readHeader(bytes);
83
+ const TEST_NAME_IGNORE_AFTER_CR = 0x0002;
84
+ let testFlags = TEST_NAME_IGNORE_AFTER_CR;
85
+ if (!testName(mh.name, 20, testFlags))
86
+ return false;
87
+ for (let i = 0; i < 15; i++) {
88
+ const ins = mh.ins[i];
89
+ smpSize += 2 * ins.size;
90
+ // pennylane.mod and heymusic-sssexremix.mod have unusual
91
+ // values after the \0.
92
+ if (i === 0) {
93
+ const n = ins.name;
94
+ const eq = (arr) => {
95
+ if (n.length < arr.length)
96
+ return false;
97
+ for (let k = 0; k < arr.length; k++) {
98
+ if (n[k] !== arr[k])
99
+ return false;
100
+ }
101
+ return true;
102
+ };
103
+ if (eq([0x66, 0x75, 0x6e, 0x62, 0x61, 0x73, 0x73, 0x00, 0x0d]) || // "funbass\0\r"
104
+ eq([0x73, 0x74, 0x2d, 0x36, 0x39, 0x3a, 0x62, 0x61, 0x73, 0x65, 0x6c, 0x69, 0x6e, 0x65, 0x00, 0x52, 0x00, 0x00, 0xa5]) // "st-69:baseline\0R\0\0\xA5"
105
+ ) {
106
+ testFlags |= 0x0001; // TEST_NAME_IGNORE_AFTER_0
107
+ }
108
+ }
109
+ // Crepequs.mod has random values in first byte
110
+ ins.name[0] = 0x58; // 'X'
111
+ if (!testName(ins.name, 22, testFlags))
112
+ return false;
113
+ if (ins.volume > 0x40)
114
+ return false;
115
+ if ((ins.finetune & 0xf0) !== 0)
116
+ return false;
117
+ if (ins.size > 0x8000)
118
+ return false;
119
+ // This test is always false, disable it
120
+ // if ((loop_start >> 1) > 0x8000) return -1;
121
+ if (ins.loop_size > 0x8000)
122
+ return false;
123
+ // This test fails in atmosfer.mod, disable it
124
+ // if (loop_size > 1 && loop_size > size) return -1;
125
+ // Bad rip of fin-nv1.mod has this unused instrument.
126
+ if (ins.size === 0 && ins.loop_start === 4462 && ins.loop_size === 2078) {
127
+ continue;
128
+ }
129
+ if ((ins.loop_start >> 1) > ins.size)
130
+ return false;
131
+ if (ins.size !== 0 && (ins.loop_start >> 1) === ins.size)
132
+ return false;
133
+ if (ins.size === 0 && ins.loop_start > 0)
134
+ return false;
135
+ }
136
+ if (smpSize < 8)
137
+ return false;
138
+ // Pattern count from the order table.
139
+ let pat = 0;
140
+ let patShort = 0;
141
+ for (let i = 0; i < 128; i++) {
142
+ const x = mh.order[i];
143
+ if (x > 0x7f)
144
+ return false;
145
+ if (x > pat) {
146
+ pat = x;
147
+ if (i < mh.len)
148
+ patShort = x;
149
+ }
150
+ }
151
+ pat++;
152
+ patShort++;
153
+ if (pat > 0x7f || mh.len === 0 || mh.len > 0x80)
154
+ return false;
155
+ // ST pattern-list quirk (razor-1911.mod, Operation Wolf, Bad Dudes).
156
+ if (size < stExpectedSize(smpSize, pat) && size === stExpectedSize(smpSize, patShort)) {
157
+ pat = patShort;
158
+ }
159
+ // Pattern data sanity (st_load.c:208-249): sample numbers > 15 and
160
+ // periods outside the ST table count as errors.
161
+ let patternErrors = 0;
162
+ let ins0 = 0;
163
+ for (let i = 0; i < pat; i++) {
164
+ const base = 600 + i * 1024;
165
+ if (base + 1024 > size)
166
+ return false; // hio_read short → not ST
167
+ for (let j = 0; j < 64 * 4; j++) {
168
+ const off = base + j * 4;
169
+ const s = (bytes[off] & 0xf0) | MSN(bytes[off + 2]);
170
+ if (s > 15) {
171
+ if (++patternErrors > ST_MAX_PATTERN_ERRORS)
172
+ return false;
173
+ }
174
+ if (s > ins0)
175
+ ins0 = s;
176
+ const p = 256 * LSN(bytes[off]) + bytes[off + 1];
177
+ if (p === 0)
178
+ continue;
179
+ let k = 0;
180
+ for (; PERIOD[k] >= 0; k++) {
181
+ if (p === PERIOD[k])
182
+ break;
183
+ }
184
+ if (PERIOD[k] < 0) {
185
+ if (++patternErrors > ST_MAX_PATTERN_ERRORS)
186
+ return false;
187
+ }
188
+ }
189
+ }
190
+ // Check if file was cut before any unused samples (st_load.c:250-266).
191
+ if (size < stExpectedSize(smpSize, pat)) {
192
+ let ss = 0;
193
+ for (let i = 0; i < 15 && i < ins0; i++) {
194
+ ss += 2 * mh.ins[i].size;
195
+ }
196
+ const limit = Math.trunc((stExpectedSize(ss, pat) * ST_TRUNCATION_LIMIT) / 100);
197
+ if (size < limit)
198
+ return false;
199
+ }
200
+ return true;
201
+ }
202
+ /** Zeroed envelope (libxmp_init_instrument calloc semantics). */
203
+ function zeroEnvelope() {
204
+ return { flags: 0, npt: 0, scl: 0, sus: 0, sue: 0, lps: 0, lpe: 0, x: [], y: [] };
205
+ }
206
+ function zeroInstrument(name, sub) {
207
+ return {
208
+ name,
209
+ volume: 0x40,
210
+ nsm: 0,
211
+ rls: 0,
212
+ map: new Array(121).fill(0),
213
+ mapXpo: new Array(121).fill(0),
214
+ sub,
215
+ aei: zeroEnvelope(),
216
+ fei: zeroEnvelope(),
217
+ pei: zeroEnvelope(),
218
+ };
219
+ }
220
+ function copyTitleName(r, n) {
221
+ // C: strncpy(mod->name, mh.name, 20) is RAW — the control→' ' mapping
222
+ // happens later in libxmp_adjust_string (load.c:298). Only instrument/
223
+ // sample names go through libxmp_copy_adjust's dot substitution.
224
+ let s = '';
225
+ for (let i = 0; i < n && i < r.length; i++) {
226
+ const c = r[i];
227
+ if (c === 0)
228
+ break;
229
+ s += String.fromCharCode(c);
230
+ }
231
+ return s.replace(/ +$/, '');
232
+ }
233
+ function copyAdjustName(r, n) {
234
+ let s = '';
235
+ for (let i = 0; i < n && i < r.length; i++) {
236
+ const c = r[i];
237
+ if (c === 0)
238
+ break;
239
+ s += c > 127 || c < 0x20 || c === 0x7f ? '.' : String.fromCharCode(c);
240
+ }
241
+ return s;
242
+ }
243
+ /** st_load (st_load.c:251-517). */
244
+ export function stLoad(bytes, ctx) {
245
+ const size = bytes.length;
246
+ const fail = (msg) => {
247
+ throw new ParseError(msg);
248
+ };
249
+ const mh = readHeader(bytes);
250
+ let ust = 1;
251
+ let smpSize = 0;
252
+ for (let i = 0; i < 15; i++) {
253
+ smpSize += 2 * mh.ins[i].size;
254
+ }
255
+ const len = mh.len;
256
+ let rst = mh.restart;
257
+ // UST: The byte at module offset 471 is BPM, not the song restart.
258
+ // The default for UST modules is 0x78 = 120 BPM = 48 Hz.
259
+ if (rst < 0x40)
260
+ ust = 0;
261
+ const xxo = Array.from(mh.order);
262
+ let pat = 0;
263
+ let patShort = 0;
264
+ for (let i = 0; i < 128; i++) {
265
+ if (xxo[i] > pat) {
266
+ pat = xxo[i];
267
+ if (i < len)
268
+ patShort = pat;
269
+ }
270
+ }
271
+ pat++;
272
+ patShort++;
273
+ // ST pattern-list quirk.
274
+ if (size < stExpectedSize(smpSize, pat) && size === stExpectedSize(smpSize, patShort)) {
275
+ pat = patShort;
276
+ }
277
+ // UST heuristics (st_load.c:328-355).
278
+ for (let i = 0; i < 15; i++) {
279
+ const ins = mh.ins[i];
280
+ if (ins.finetune !== 0)
281
+ ust = 0;
282
+ if (ins.size > 0x1387 || ins.loop_start > 9999 || ins.loop_size > 0x1387)
283
+ ust = 0;
284
+ }
285
+ // Instruments (st_load.c:357-397): ST loop points are BYTE offsets from
286
+ // the sample start — xxs->len = 2*size - loop_start, lps = 0.
287
+ const instruments = [];
288
+ const rawSamples = [];
289
+ for (let i = 0; i < 15; i++) {
290
+ const ins = mh.ins[i];
291
+ const xlen = 2 * ins.size - ins.loop_start;
292
+ const lps = 0;
293
+ const lpe = lps + 2 * ins.loop_size;
294
+ const xflg = ins.loop_size > 1 ? SampleFlags.LOOP : 0;
295
+ const fin = (((ins.finetune << 4) & 0xff) << 24) >> 24; // (int8)((uint8)finetune << 4)
296
+ const sub = {
297
+ vol: ins.volume,
298
+ gvl: 0x40, // no QUIRK_INSVOL: load_epilogue sets gvl = volbase
299
+ pan: -1, // XMP_INST_NO_DEFAULT_PAN
300
+ xpo: 0,
301
+ fin,
302
+ vwf: 0,
303
+ vde: 0,
304
+ vra: 0,
305
+ vsw: 0,
306
+ sid: i,
307
+ rvv: 0,
308
+ nna: 0,
309
+ dct: 0,
310
+ dca: 0,
311
+ ifc: 0,
312
+ ifr: 0,
313
+ };
314
+ const iname = copyAdjustName(ins.name, 22);
315
+ const xxi = zeroInstrument(iname, [sub]);
316
+ if (xlen > 0)
317
+ xxi.nsm = 1;
318
+ instruments.push(xxi);
319
+ rawSamples.push({
320
+ name: '', // st_load never writes xxs->name
321
+ data: new Uint8Array(0),
322
+ length: xlen,
323
+ loopStart: lps,
324
+ loopEnd: lpe,
325
+ sustainStart: 0,
326
+ sustainEnd: 0,
327
+ finetune: fin,
328
+ volume: ins.volume,
329
+ flags: xflg,
330
+ c5spd: C4_PAL_RATE,
331
+ });
332
+ }
333
+ // Patterns (st_load.c:402-433): decode + tracker detection in one pass.
334
+ const chn = 4;
335
+ const patlen = 64 * 4 * chn;
336
+ const patterns = [];
337
+ let fxused = 0;
338
+ const events = []; // [pat][row][chn]
339
+ for (let i = 0; i < pat; i++) {
340
+ const base = 600 + i * 1024;
341
+ if (base + 1024 > size)
342
+ fail('ST: read error at pattern');
343
+ const patEvents = [];
344
+ const tracks = [];
345
+ for (let k = 0; k < chn; k++)
346
+ tracks.push({ rows: 64, event: [] });
347
+ for (let j = 0; j < 64 * 4; j++) {
348
+ const row = Math.floor(j / 4);
349
+ const c = j % 4;
350
+ const ev = {
351
+ note: 0, ins: 0, vol: 0, fxt: 0, fxp: 0, f2t: 0, f2p: 0,
352
+ };
353
+ decodeEvent(ev, bytes, base + j * 4, TrackerId.PROTRACKER);
354
+ if (ev.fxt)
355
+ fxused |= 1 << ev.fxt;
356
+ else if (ev.fxp)
357
+ fxused |= 1;
358
+ // UST: Only effects 1 (arpeggio) and 2 (pitchbend) are available.
359
+ if (ev.fxt && ev.fxt !== 1 && ev.fxt !== 2)
360
+ ust = 0;
361
+ // Karsten Obarski's sleepwalk uses arpeggio 30 and 40.
362
+ if (ev.fxt === 1) {
363
+ if (ev.fxp === 0x00)
364
+ ust = 0;
365
+ }
366
+ if (ev.fxt === 2) {
367
+ // bend up and down at same time?
368
+ if ((ev.fxp & 0x0f) !== 0 && (ev.fxp & 0xf0) !== 0)
369
+ ust = 0;
370
+ }
371
+ while (patEvents.length <= row)
372
+ patEvents.push([]);
373
+ patEvents[row][c] = ev;
374
+ tracks[c].event[row] = ev;
375
+ }
376
+ patterns.push({ rows: 64, tracks });
377
+ events.push(patEvents);
378
+ }
379
+ // Tracker type (st_load.c:435-447).
380
+ let modtype;
381
+ if ((fxused & ~0x0006) !== 0)
382
+ ust = 0;
383
+ if (ust !== 0) {
384
+ modtype = 'Ultimate Soundtracker';
385
+ }
386
+ else if ((fxused & ~0xd007) === 0) {
387
+ modtype = 'Soundtracker IX'; // or MasterSoundtracker?
388
+ }
389
+ else if ((fxused & ~0xf807) === 0) {
390
+ modtype = 'D.O.C Soundtracker 2.0';
391
+ }
392
+ else {
393
+ modtype = 'unknown tracker 15 instrument';
394
+ }
395
+ // UST conversions (st_load.c:482-511).
396
+ let bpm = 125;
397
+ if (ust !== 0) {
398
+ // Fix restart & bpm.
399
+ bpm = rst;
400
+ rst = 0;
401
+ // Fix effects (arpeggio and pitchbending).
402
+ for (let i = 0; i < pat; i++) {
403
+ for (let j = 0; j < 64 * 4; j++) {
404
+ const row = Math.floor(j / 4);
405
+ const c = j % 4;
406
+ const ev = events[i][row][c];
407
+ if (ev.fxt === 1)
408
+ ev.fxt = 0;
409
+ else if (ev.fxt === 2 && (ev.fxp & 0xf0) === 0)
410
+ ev.fxt = 1;
411
+ else if (ev.fxt === 2 && (ev.fxp & 0x0f) === 0)
412
+ ev.fxp >>= 4;
413
+ }
414
+ }
415
+ }
416
+ else {
417
+ if (rst >= len)
418
+ rst = 0;
419
+ }
420
+ // Samples (st_load.c:513-517): skip the transient pre-loop part
421
+ // (hio_seek(loop_start, SEEK_CUR)), then libxmp_load_sample.
422
+ let filePos = 600 + pat * patlen;
423
+ for (let i = 0; i < 15; i++) {
424
+ const raw = rawSamples[i];
425
+ if (raw.length === 0) {
426
+ ctx.addSample(raw);
427
+ continue;
428
+ }
429
+ // Skip transient part of sample (st_load.c:528-543).
430
+ filePos += mh.ins[i].loop_start;
431
+ const remaining = Math.max(0, size - filePos);
432
+ const take = Math.min(raw.length, remaining);
433
+ raw.data = bytes.subarray(filePos, filePos + take);
434
+ filePos += raw.length; // hio_read advances by requested count
435
+ ctx.addSample(raw);
436
+ }
437
+ // Channel defaults (load_helpers.c:334-339): pan LRLR, vol 0x40, flg 0.
438
+ const channels = [];
439
+ for (let i = 0; i < chn; i++) {
440
+ const pan = Math.floor((i + 1) / 2) % 2 * 0xff;
441
+ channels.push({ pan: Math.min(255, Math.max(0, 0x80 + (pan - 0x80))), vol: 0x40, flg: 0 });
442
+ }
443
+ const mod = {
444
+ title: copyTitleName(mh.name, 20),
445
+ format: 'mod',
446
+ comment: '',
447
+ chn,
448
+ pat,
449
+ ins: 15,
450
+ len,
451
+ restart: rst,
452
+ xxo,
453
+ channels,
454
+ patterns,
455
+ instruments,
456
+ samples: rawSamples,
457
+ num_sequences: 0,
458
+ sequences: [],
459
+ speed: 6,
460
+ bpm,
461
+ volbase: 0x40,
462
+ gvolbase: 0x40,
463
+ gvol: 0x40,
464
+ quirks: Quirk.NOBPM,
465
+ flowMode: 0,
466
+ readEventType: ReadEventType.MOD,
467
+ periodType: PeriodType.MODRNG,
468
+ defpan: 0x80,
469
+ time_factor: 10,
470
+ rrate: 250,
471
+ c4rate: C4_PAL_RATE,
472
+ compare_vblank: false,
473
+ tracker: modtype,
474
+ };
475
+ void ctx.sampleRate;
476
+ void ctx.outputRate;
477
+ return mod;
478
+ }
479
+ /** ST format plugin (libxmp loaders/st_load.c + read_event MOD family). */
480
+ export const plugin = {
481
+ name: 'st',
482
+ test: stTest,
483
+ load: stLoad,
484
+ readEvent(core, chn, row) {
485
+ readEventDispatch(core, chn, row);
486
+ },
487
+ };
488
+ //# sourceMappingURL=st.js.map
package/dist/st.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"st.js","sourceRoot":"","sources":["../src/st.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,49 @@
1
1
  {
2
2
  "name": "@modplayjs/fmt-st",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.2.1",
4
+ "description": "Ultimate Soundtracker (ST/UST 15-instrument MOD family) format plugin for modplayjs (libxmp st_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.1",
23
+ "@modplayjs/fmt-mod": "^0.2.1"
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-st"
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
+ }