pixi-effects 0.26.0 → 0.26.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/CHANGELOG.md +20 -0
- package/README.md +6 -6
- package/ai/chat-template.html +3 -3
- package/ai/tools/check.mjs +12 -0
- package/dist/{Base-BgnRXbtJ.d.ts → Base-CpdDs4HT.d.ts} +1 -1
- package/dist/{Base-DHVKqA46.d.cts → Base-TbBhHPrG.d.cts} +1 -1
- package/dist/Composition-H4QA24MV.js +7 -0
- package/dist/{Composition-C4FSWJZF.js.map → Composition-H4QA24MV.js.map} +1 -1
- package/dist/Composition-HM4YT5L7.cjs +16 -0
- package/dist/{Composition-2GJSCHPP.cjs.map → Composition-HM4YT5L7.cjs.map} +1 -1
- package/dist/Controller.d.cts +2 -2
- package/dist/Controller.d.ts +2 -2
- package/dist/{Movie-DP5p1r4E.d.ts → Movie-DVeDTdnc.d.ts} +23 -2
- package/dist/{Movie-DXReF4-W.d.cts → Movie-i05Oh9mJ.d.cts} +23 -2
- package/dist/Presenter.d.cts +2 -2
- package/dist/Presenter.d.ts +2 -2
- package/dist/{chunk-SY27HZC5.cjs → chunk-555URQHQ.cjs} +59 -59
- package/dist/{chunk-SY27HZC5.cjs.map → chunk-555URQHQ.cjs.map} +1 -1
- package/dist/{chunk-XS6GSJCN.js → chunk-GBUM7X2S.js} +3 -3
- package/dist/{chunk-XS6GSJCN.js.map → chunk-GBUM7X2S.js.map} +1 -1
- package/dist/{chunk-DP37TTMO.cjs → chunk-WPXDRSGN.cjs} +164 -9
- package/dist/chunk-WPXDRSGN.cjs.map +1 -0
- package/dist/{chunk-PRZ4U6JN.js → chunk-X3HB4DSR.js} +164 -9
- package/dist/chunk-X3HB4DSR.js.map +1 -0
- package/dist/index.cjs +188 -34
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.js +164 -10
- package/dist/index.js.map +1 -1
- package/dist/loader.css +35 -2
- package/dist/{music-AF4VTFAF.js → music-3O5MDQXY.js} +52 -6
- package/dist/music-3O5MDQXY.js.map +1 -0
- package/dist/{music-KB7YZLHP.cjs → music-4O367SPR.cjs} +52 -6
- package/dist/music-4O367SPR.cjs.map +1 -0
- package/dist/three.cjs +5 -5
- package/dist/three.d.cts +2 -2
- package/dist/three.d.ts +2 -2
- package/dist/three.js +1 -1
- package/dist/{types-CoT0ypcx.d.ts → types-DSGwN5w1.d.cts} +2 -0
- package/dist/{types-CoT0ypcx.d.cts → types-DSGwN5w1.d.ts} +2 -0
- package/docs/api.md +3 -2
- package/docs/dsl.md +2 -2
- package/llms-full.txt +8 -6
- package/package.json +1 -1
- package/skills/pixi-effects/SKILL.md +2 -2
- package/skills/pixi-effects/reference/cheatsheet.md +1 -1
- package/skills/pixi-effects/reference/pitfalls.md +1 -0
- package/skills/pixi-effects/template.html +6 -5
- package/dist/Composition-2GJSCHPP.cjs +0 -16
- package/dist/Composition-C4FSWJZF.js +0 -7
- package/dist/chunk-DP37TTMO.cjs.map +0 -1
- package/dist/chunk-PRZ4U6JN.js.map +0 -1
- package/dist/music-AF4VTFAF.js.map +0 -1
- package/dist/music-KB7YZLHP.cjs.map +0 -1
package/dist/loader.css
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* pixi-effects loader: one line of HTML on the page, a few lines of CSS, no JavaScript of your own.
|
|
3
3
|
*
|
|
4
|
-
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/pixi-effects@0.26.
|
|
4
|
+
* <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/pixi-effects@0.26.2/dist/loader.css">
|
|
5
5
|
* <div class="stage" style="position: relative"> <!-- any box the canvas sits in, with position: relative -->
|
|
6
6
|
* <canvas id="stage" width="1280" height="720"></canvas>
|
|
7
7
|
* <div class="pe-loader" data-label="LOADING"></div> <!-- or class="pe-loader pe-loader--bar" -->
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
*
|
|
16
16
|
* Looks: .pe-loader (a ring) · .pe-loader--pulse (a breathing dot) · .pe-loader--bar (a sweeping line along the bottom)
|
|
17
17
|
* .pe-loader--custom: no built-in drawing; put your own markup inside (animate only transform / opacity there too).
|
|
18
|
+
* Progress: movie.init() also writes how far it is (--pe-progress 0..1, data-stage, data-percent): a bar along the bottom and the label
|
|
19
|
+
* "BUILDING LAYERS 62%" appear by themselves; the same numbers come as the movie's `loadprogress` event.
|
|
18
20
|
* Restyle: --pe-loader-color, --pe-loader-bg, --pe-loader-track, --pe-loader-size (set them on the element or on any ancestor).
|
|
19
21
|
*/
|
|
20
22
|
.pe-loader {
|
|
@@ -80,7 +82,37 @@
|
|
|
80
82
|
}
|
|
81
83
|
.pe-loader--bar[data-label]::after { top: calc(50% - 6px); }
|
|
82
84
|
|
|
83
|
-
/*
|
|
85
|
+
/* how far init is: a thin bar along the bottom edge and a label of the stage and the percent. The bar is scaled by --pe-progress (a number the library
|
|
86
|
+
writes; the browser eases between the steps), so it moves on the compositor like the rest and keeps its look while the page is busy. */
|
|
87
|
+
.pe-loader__bar {
|
|
88
|
+
position: absolute;
|
|
89
|
+
left: 0;
|
|
90
|
+
right: 0;
|
|
91
|
+
bottom: 0;
|
|
92
|
+
height: 3px;
|
|
93
|
+
background: var(--pe-loader-color, #ffffff);
|
|
94
|
+
transform-origin: 0 50%;
|
|
95
|
+
transform: scaleX(var(--pe-progress, 0));
|
|
96
|
+
transition: transform 0.35s linear;
|
|
97
|
+
}
|
|
98
|
+
.pe-loader[data-stage]::after {
|
|
99
|
+
content: attr(data-stage) ' ' attr(data-percent) '%';
|
|
100
|
+
position: absolute;
|
|
101
|
+
left: 0;
|
|
102
|
+
right: 0;
|
|
103
|
+
top: calc(50% + var(--pe-loader-size, 34px) / 2 + 18px);
|
|
104
|
+
padding-left: 0.4em;
|
|
105
|
+
text-align: center;
|
|
106
|
+
font: 600 11px/1 system-ui, -apple-system, 'Helvetica Neue', Arial, sans-serif;
|
|
107
|
+
letter-spacing: 0.4em;
|
|
108
|
+
opacity: 0.7;
|
|
109
|
+
animation: none;
|
|
110
|
+
}
|
|
111
|
+
.pe-loader--bar[data-stage]::before { display: none; }
|
|
112
|
+
.pe-loader--bar[data-stage]::after { top: 50%; }
|
|
113
|
+
|
|
114
|
+
/* your own drawing inside the box (the built-in bar and label stay out of it; --pe-progress is still there for your own markup) */
|
|
115
|
+
.pe-loader--custom .pe-loader__bar { display: none; }
|
|
84
116
|
.pe-loader--custom::before,
|
|
85
117
|
.pe-loader--custom::after { content: none; display: none; }
|
|
86
118
|
|
|
@@ -104,6 +136,7 @@
|
|
|
104
136
|
}
|
|
105
137
|
|
|
106
138
|
@media (prefers-reduced-motion: reduce) {
|
|
139
|
+
.pe-loader__bar { transition: none; }
|
|
107
140
|
.pe-loader::before { animation-duration: 3s; }
|
|
108
141
|
.pe-loader--pulse::before, .pe-loader--bar::before { animation-duration: 3.2s; }
|
|
109
142
|
.pe-loader[data-label]::after { animation: none; opacity: 0.6; }
|
|
@@ -337,7 +337,50 @@ var CHORD_KINDS = {
|
|
|
337
337
|
m13: [0, 3, 7, 10, 14, 21],
|
|
338
338
|
"maj7#11": [0, 4, 7, 11, 18]
|
|
339
339
|
};
|
|
340
|
-
var NOTE_FORMS = "a note like c4, f#3,
|
|
340
|
+
var NOTE_FORMS = "a note in lowercase like c4, f#3, bb2; a chord starting with a capital like Am7, G7, C@4, Am7/e; [c4 e4 g4]; _ for a rest; ~ to hold";
|
|
341
|
+
var KIND_SPELLINGS = {
|
|
342
|
+
maj: "",
|
|
343
|
+
M: "",
|
|
344
|
+
major: "",
|
|
345
|
+
min: "m",
|
|
346
|
+
minor: "m",
|
|
347
|
+
mi: "m",
|
|
348
|
+
"-": "m",
|
|
349
|
+
min7: "m7",
|
|
350
|
+
mi7: "m7",
|
|
351
|
+
"-7": "m7",
|
|
352
|
+
minor7: "m7",
|
|
353
|
+
min9: "m9",
|
|
354
|
+
min6: "m6",
|
|
355
|
+
min11: "m11",
|
|
356
|
+
M7: "maj7",
|
|
357
|
+
Maj7: "maj7",
|
|
358
|
+
ma7: "maj7",
|
|
359
|
+
major7: "maj7",
|
|
360
|
+
M9: "maj9",
|
|
361
|
+
Maj9: "maj9",
|
|
362
|
+
sus: "sus4",
|
|
363
|
+
dom7: "7",
|
|
364
|
+
dom: "7",
|
|
365
|
+
"+": "aug",
|
|
366
|
+
o: "dim",
|
|
367
|
+
o7: "dim7",
|
|
368
|
+
"\xF8": "m7b5",
|
|
369
|
+
"m7-5": "m7b5",
|
|
370
|
+
add: "add9",
|
|
371
|
+
"7sus": "7sus4",
|
|
372
|
+
"sus7": "7sus4",
|
|
373
|
+
"9sus4": "7sus4",
|
|
374
|
+
"6/9": "6",
|
|
375
|
+
"69": "6"
|
|
376
|
+
};
|
|
377
|
+
function capitalHint(tok) {
|
|
378
|
+
if (/^[A-G][#b]?-?\d$/.test(tok)) return `it starts with a capital letter, so it is read as a chord; write the note in lowercase: ${tok.toLowerCase()}`;
|
|
379
|
+
const m = /^([A-G][#b]?)([^@/\s]*)((?:@\d)?(?:\/[a-gA-G][#b]?)?)$/.exec(tok);
|
|
380
|
+
if (!m) return null;
|
|
381
|
+
const fix = KIND_SPELLINGS[m[2]];
|
|
382
|
+
return fix === void 0 ? null : `the chord kind "${m[2]}" is not known; did you mean "${m[1]}${fix}${m[3]}"?`;
|
|
383
|
+
}
|
|
341
384
|
function noteToMidi(name) {
|
|
342
385
|
const m = /^([a-gA-G])([#b]?)(-?\d)$/.exec(name);
|
|
343
386
|
if (!m) return null;
|
|
@@ -388,9 +431,12 @@ function parseNotes(str, step = 1) {
|
|
|
388
431
|
}
|
|
389
432
|
let midi;
|
|
390
433
|
if (tok.startsWith("[")) midi = tok.slice(1, -1).trim().split(/\s+/).map(noteToMidi);
|
|
391
|
-
else if (
|
|
392
|
-
else midi =
|
|
393
|
-
if (!midi || midi.length === 0 || midi.some((x) => x === null))
|
|
434
|
+
else if (/^[A-G]/.test(tok)) midi = chordToMidi(tok);
|
|
435
|
+
else midi = [noteToMidi(tok)];
|
|
436
|
+
if (!midi || midi.length === 0 || midi.some((x) => x === null)) {
|
|
437
|
+
const hint = /^[A-G]/.test(tok) && !tok.startsWith("[") ? capitalHint(tok) : null;
|
|
438
|
+
throw new Error(`cannot read "${raw}"${hint ? `: ${hint}` : ""} (${NOTE_FORMS})`);
|
|
439
|
+
}
|
|
394
440
|
events.push({ t, dur, midi, vel });
|
|
395
441
|
t += dur;
|
|
396
442
|
}
|
|
@@ -805,5 +851,5 @@ function renderMusic(m, sampleRate, length, loop = false) {
|
|
|
805
851
|
}
|
|
806
852
|
|
|
807
853
|
export { CHORD_KINDS, DEFAULT_TAIL, DRUMS, INSTRUMENTS, MAX_SECONDS, MUSIC_PEAK, TempoMap, chordToMidi, musicBeatTimes, musicKey, musicLength, noteToMidi, parseDrumGrid, parseNotes, renderMusic, resolveMusic };
|
|
808
|
-
//# sourceMappingURL=music-
|
|
809
|
-
//# sourceMappingURL=music-
|
|
854
|
+
//# sourceMappingURL=music-3O5MDQXY.js.map
|
|
855
|
+
//# sourceMappingURL=music-3O5MDQXY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/audio/music/instruments.ts","../src/audio/music/notation.ts","../src/audio/music/resolve.ts","../src/audio/music/render.ts"],"names":[],"mappings":"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","file":"music-3O5MDQXY.js","sourcesContent":["/**\n * The voices of `music`: a handful of small synthesisers and drums, each rendering ONE note into a stereo buffer.\n * Pure DSP over Float32Array, seeded noise only, so the same score always gives the same samples. Ported from the\n * spike the owner approved by ear; the sample rate is set once per render (renders are synchronous).\n */\n\nexport interface Bus { L: Float32Array; R: Float32Array }\nexport type Rand = () => number;\n\n/** Per-track knobs an instrument may use. */\nexport interface VoiceOptions {\n /** Seconds the sound fades in (pad, lead). */\n attack?: number;\n /** Seconds the sound fades out after the written length. */\n release?: number;\n /** Seconds a bell / music box keeps ringing. */\n ring?: number;\n}\n\ntype Voice = (midi: number, dur: number, vel: number, out: Bus, start: number, rnd: Rand, o: VoiceOptions) => void;\n\nconst TAU = Math.PI * 2;\nlet SR = 44100;\n/** Set the sample rate for the render that follows. */\nexport function setSampleRate(sr: number): void { SR = sr; }\n\nconst mtof = (m: number): number => 440 * 2 ** ((m - 69) / 12);\n\nclass Biquad {\n private b0 = 1; private b1 = 0; private b2 = 0; private a1 = 0; private a2 = 0;\n private x1 = 0; private x2 = 0; private y1 = 0; private y2 = 0;\n constructor(type: 'lp' | 'hp' | 'bp', fc: number, q = 0.707) { this.set(type, fc, q); }\n /** Change the cutoff without clearing the state (so it can move while a sound plays). */\n set(type: 'lp' | 'hp' | 'bp', fc: number, q = 0.707): void {\n const w = (TAU * Math.min(fc, SR * 0.45)) / SR, c = Math.cos(w), s = Math.sin(w), al = s / (2 * q);\n const a0 = 1 + al;\n let b0: number, b1: number, b2: number;\n if (type === 'lp') { b0 = (1 - c) / 2; b1 = 1 - c; b2 = b0; }\n else if (type === 'hp') { b0 = (1 + c) / 2; b1 = -(1 + c); b2 = b0; }\n else { b0 = al; b1 = 0; b2 = -al; }\n this.b0 = b0 / a0; this.b1 = b1 / a0; this.b2 = b2 / a0; this.a1 = (-2 * c) / a0; this.a2 = (1 - al) / a0;\n }\n run(x: number): number {\n const y = this.b0 * x + this.b1 * this.x1 + this.b2 * this.x2 - this.a1 * this.y1 - this.a2 * this.y2;\n this.x2 = this.x1; this.x1 = x; this.y2 = this.y1; this.y1 = y;\n return y;\n }\n}\nexport { Biquad };\n\nconst polyblep = (t: number, dt: number): number => (t < dt ? ((t /= dt), t + t - t * t - 1) : t > 1 - dt ? ((t = (t - 1) / dt), t * t + t + t + 1) : 0);\nconst saw = (ph: number, dt: number): number => 2 * ph - 1 - polyblep(ph, dt);\nconst adsr = (t: number, dur: number, a: number, d: number, s: number, r: number): number => {\n if (t < dur) return t < a ? t / a : t < a + d ? 1 - (1 - s) * ((t - a) / d) : s;\n const base = dur < a ? dur / a : dur < a + d ? 1 - (1 - s) * ((dur - a) / d) : s;\n return Math.max(0, base * (1 - (t - dur) / r));\n};\n\nfunction addTo(out: Bus, start: number, i: number, l: number, r: number): void {\n const k = start + i;\n if (k >= 0 && k < out.L.length) { out.L[k]! += l; out.R[k]! += r; }\n}\n\nexport const INSTRUMENTS = ['keys', 'pluck', 'pad', 'bass', 'sub', 'lead', 'bell', 'musicbox'] as const;\nexport type InstrumentName = (typeof INSTRUMENTS)[number];\n\nexport const VOICES: Record<InstrumentName, Voice> = {\n // electric piano: two FM operators (tine + bell), a little stereo chorus\n keys(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), rel = o.release ?? 0.5, total = dur + rel + 1.2;\n const n = Math.floor(Math.min(total, 6) * SR), idx = 1.1 + 2.2 * vel, det = 1 + (rnd() - 0.5) * 0.002;\n for (let i = 0; i < n; i++) {\n const t = i / SR;\n const decay = Math.exp(-t * (1.1 + f / 1500));\n const mod = Math.sin(TAU * f * 14 * t) * idx * 0.12 * Math.exp(-t * 18) + Math.sin(TAU * f * t) * idx * Math.exp(-t * 3.2);\n const body = Math.sin(TAU * f * t + mod) * decay;\n const body2 = Math.sin(TAU * f * det * t + mod * 0.9) * decay;\n const env = t < dur ? 1 : Math.max(0, 1 - (t - dur) / rel);\n const a = Math.min(1, t / 0.004) * env * 0.5 * vel;\n addTo(out, start, i, a * (body * 0.7 + body2 * 0.3), a * (body * 0.3 + body2 * 0.7));\n }\n },\n // plucked string (Karplus–Strong with a darker loss filter): guitar / harp / koto\n pluck(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), len = Math.max(2, Math.round(SR / f)), buf = new Float32Array(len);\n const lp = new Biquad('lp', 2500 + 3500 * vel, 0.6);\n for (let i = 0; i < len; i++) buf[i] = lp.run(rnd() * 2 - 1);\n const rel = o.release ?? 0.25, total = Math.min(dur + rel + 0.4, 5), n = Math.floor(total * SR), loss = 0.9965 - 0.5 / (f + 100);\n let p = 0, prev = 0;\n const pan = (rnd() - 0.5) * 0.3;\n for (let i = 0; i < n; i++) {\n const cur = buf[p]!, nxt = buf[(p + 1) % len]!;\n buf[p] = loss * 0.5 * (cur + nxt);\n p = (p + 1) % len;\n const t = i / SR, env = t < dur ? 1 : Math.max(0, 1 - (t - dur) / rel);\n const y = (cur - prev * 0.2) * env * 0.55 * vel;\n prev = cur;\n addTo(out, start, i, y * (1 - pan), y * (1 + pan));\n }\n },\n // warm pad: five detuned band-limited saws through a slow low-pass\n pad(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), A = o.attack ?? 0.7, R = o.release ?? 1.4, n = Math.floor((dur + R) * SR);\n const voices = [-0.14, -0.07, 0, 0.07, 0.14].map((c, k) => ({ ph: rnd(), f: f * 2 ** ((c / 12) * 0.6), pan: (k - 2) / 2.5 }));\n const cut = Math.min(1800, 500 + f * 1.5);\n const lp = new Biquad('lp', cut, 0.6), lp2 = new Biquad('lp', cut, 0.6);\n for (let i = 0; i < n; i++) {\n const t = i / SR;\n let l = 0, r = 0;\n for (const v of voices) {\n const dt = v.f / SR;\n v.ph += dt; if (v.ph >= 1) v.ph -= 1;\n const s = saw(v.ph, dt);\n l += s * (1 - v.pan) * 0.5; r += s * (1 + v.pan) * 0.5;\n }\n const env = t < dur ? Math.min(1, t / A) : Math.max(0, Math.min(1, dur / A) * (1 - (t - dur) / R));\n const g = env * 0.11 * vel;\n addTo(out, start, i, lp.run(l) * g, lp2.run(r) * g);\n }\n },\n // synth bass: saw + sine sub, filter envelope\n bass(m, dur, vel, out, start, _rnd, o) {\n const f = mtof(m), rel = o.release ?? 0.12, n = Math.floor((dur + rel) * SR);\n let ph = 0, ph2 = 0;\n const lp = new Biquad('lp', 400, 1.1);\n for (let i = 0; i < n; i++) {\n const t = i / SR, dt = f / SR;\n ph = (ph + dt) % 1; ph2 = (ph2 + dt) % 1;\n if (i % 64 === 0) lp.set('lp', Math.min(160 + 900 * Math.exp(-t * 7) * vel, 4000), 1.1);\n const s = lp.run(saw(ph, dt)) * 0.55 + Math.sin(TAU * ph2) * 0.55;\n const env = t < dur ? Math.min(1, t / 0.006) * (0.75 + 0.25 * Math.exp(-t * 4)) : Math.max(0, 1 - (t - dur) / rel) * 0.75;\n const y = s * env * 0.5 * vel;\n addTo(out, start, i, y, y);\n }\n },\n // a pure sine bass: a soft heartbeat or sub (no filter sweep, hardly any upper harmonics)\n sub(m, dur, vel, out, start, _rnd, o) {\n const f = mtof(m), rel = o.release ?? 0.2, n = Math.floor((dur + rel) * SR);\n let ph = 0;\n for (let i = 0; i < n; i++) {\n const t = i / SR;\n ph += (TAU * f) / SR;\n const env = t < dur ? Math.min(1, t / (o.attack ?? 0.012)) * (0.8 + 0.2 * Math.exp(-t * 5)) : Math.max(0, 1 - (t - dur) / rel) * 0.8;\n const y = (Math.sin(ph) + 0.12 * Math.sin(2 * ph)) * env * 0.6 * vel;\n addTo(out, start, i, y, y);\n }\n },\n // lead: soft saw / triangle with a delayed vibrato\n lead(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), rel = o.release ?? 0.18, A = o.attack ?? 0.02, n = Math.floor((dur + rel) * SR);\n let ph = rnd(), ph2 = rnd();\n const lp = new Biquad('lp', 2600 + 1800 * vel, 0.8);\n for (let i = 0; i < n; i++) {\n const t = i / SR, vib = 1 + 0.0035 * Math.sin(TAU * 5.3 * t) * Math.min(1, Math.max(0, (t - 0.18) / 0.3));\n const dt = (f * vib) / SR;\n ph = (ph + dt) % 1; ph2 = (ph2 + dt * 1.003) % 1;\n const tri = 4 * Math.abs(ph - 0.5) - 1;\n const s = lp.run(saw(ph2, dt) * 0.35 + tri * 0.65);\n const y = s * adsr(t, dur, A, 0.15, 0.7, rel) * 0.28 * vel;\n addTo(out, start, i, y * 0.9, y * 1.1);\n }\n },\n // bell / glockenspiel: inharmonic FM; `ring` is how many seconds it keeps sounding\n bell(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), ring = o.ring ?? 2.5, n = Math.floor(Math.min(dur + ring, 6) * SR), pan = (rnd() - 0.5) * 0.6;\n const k = 1.5 * (2.5 / ring);\n for (let i = 0; i < n; i++) {\n const t = i / SR;\n const mod = Math.sin(TAU * f * 3.5 * t) * 1.6 * Math.exp(-t * 5);\n const s = Math.sin(TAU * f * t + mod) * Math.exp(-t * k) + Math.sin(TAU * f * 2.76 * t) * 0.25 * Math.exp(-t * 4);\n const y = s * Math.min(1, t / 0.002) * 0.3 * vel;\n addTo(out, start, i, y * (1 - pan), y * (1 + pan));\n }\n },\n // music box: a bright tine with a strong upper partial and a short, dry ring\n musicbox(m, dur, vel, out, start, rnd, o) {\n const f = mtof(m), ring = o.ring ?? 1.3, n = Math.floor(Math.min(dur + ring, 4) * SR), pan = (rnd() - 0.5) * 0.4;\n for (let i = 0; i < n; i++) {\n const t = i / SR;\n const s = Math.sin(TAU * f * t) * Math.exp(-t * (3.2 / ring * 1.3)) + Math.sin(TAU * f * 4.0 * t) * 0.22 * Math.exp(-t * (9 / ring)) + Math.sin(TAU * f * 6.8 * t) * 0.08 * Math.exp(-t * 18);\n const y = s * Math.min(1, t / 0.0015) * 0.34 * vel;\n addTo(out, start, i, y * (1 - pan), y * (1 + pan));\n }\n },\n};\n\nexport const DRUMS = ['kick', 'snare', 'hat', 'openhat', 'clap', 'rim', 'tom', 'crash', 'shaker', 'sleigh'] as const;\nexport type DrumName = (typeof DRUMS)[number];\n\nexport function hitDrum(kind: DrumName, vel: number, out: Bus, start: number, rnd: Rand): void {\n const mono = (n: number, f: (t: number) => [number, number]): void => {\n for (let i = 0; i < n; i++) { const [l, r] = f(i / SR); addTo(out, start, i, l, r); }\n };\n const len = (s: number) => Math.floor(s * SR);\n if (kind === 'kick') {\n let ph = 0;\n mono(len(0.5), t => { ph += (TAU * (45 + 110 * Math.exp(-t * 28))) / SR; const o = (Math.sin(ph) * Math.exp(-t * 7.5) + (t < 0.004 ? (rnd() - 0.5) * 0.5 : 0)) * 0.95 * vel; return [o, o]; });\n } else if (kind === 'snare') {\n const bp = new Biquad('bp', 1900, 0.9), hp = new Biquad('hp', 700, 0.7);\n let ph = 0;\n mono(len(0.4), t => { ph += (TAU * (185 - 40 * t)) / SR; const nz = hp.run(bp.run(rnd() * 2 - 1)) * 2.2; const o = (nz * Math.exp(-t * 17) + Math.sin(ph) * Math.exp(-t * 26) * 0.6) * 0.6 * vel; return [o * 0.95, o * 1.05]; });\n } else if (kind === 'clap') {\n const bp = new Biquad('bp', 1500, 1.2);\n mono(len(0.35), t => { const burst = t < 0.033 ? Math.exp(-((t * 1000) % 11) * 0.5) : Math.exp(-(t - 0.033) * 22); const o = bp.run(rnd() * 2 - 1) * 2.4 * burst * 0.5 * vel; return [o, o * 0.9]; });\n } else if (kind === 'hat' || kind === 'openhat') {\n const hp = new Biquad('hp', 7500, 0.8), dec = kind === 'hat' ? 55 : 9;\n mono(len(kind === 'hat' ? 0.12 : 0.6), t => { const o = hp.run(rnd() * 2 - 1) * Math.exp(-t * dec) * 0.35 * vel; return [o * 0.8, o * 1.2]; });\n } else if (kind === 'rim') {\n let ph = 0;\n const bp = new Biquad('bp', 3200, 4);\n mono(len(0.1), t => { ph += (TAU * 1750) / SR; const o = (Math.sin(ph) * 0.5 + bp.run(rnd() * 2 - 1)) * Math.exp(-t * 70) * 0.5 * vel; return [o, o]; });\n } else if (kind === 'tom') {\n let ph = 0;\n mono(len(0.5), t => { ph += (TAU * (95 + 70 * Math.exp(-t * 15))) / SR; const o = Math.sin(ph) * Math.exp(-t * 7) * 0.7 * vel; return [o, o]; });\n } else if (kind === 'crash') {\n const hp = new Biquad('hp', 5200, 0.7), bp = new Biquad('bp', 9000, 0.6);\n mono(len(1.8), t => { const nz = rnd() * 2 - 1; const o = (hp.run(nz) * 0.7 + bp.run(nz) * 0.5) * (0.55 * Math.exp(-t * 2.6) + 0.45 * Math.exp(-t * 11)) * 0.5 * vel; return [o * 0.9, o * 1.1]; });\n } else if (kind === 'shaker') {\n const bp = new Biquad('bp', 6500, 1.4);\n mono(len(0.16), t => { const env = (t < 0.018 ? t / 0.018 : 1) * Math.exp(-t * 28); const o = bp.run(rnd() * 2 - 1) * env * 1.4 * 0.3 * vel; return [o * 0.85, o * 1.15]; });\n } else { // sleigh: a jingle of small bells (bright noise + a cluster of high partials with a fast flutter)\n const bp = new Biquad('bp', 7800, 1.0);\n const partials = [4200, 5630, 6900, 8350];\n mono(len(0.5), t => {\n let s = 0;\n for (let k = 0; k < partials.length; k++) s += Math.sin(TAU * partials[k]! * t * (1 + k * 0.0007)) * (0.5 + 0.5 * Math.sin(TAU * (19 + k * 3.1) * t + k)) * Math.exp(-t * (7 + k * 2));\n const o = (s * 0.11 + bp.run(rnd() * 2 - 1) * Math.exp(-t * 16) * 0.5) * Math.min(1, t / 0.003) * vel * 0.8;\n return [o * 0.85, o * 1.15];\n });\n }\n}\n\n/** Freeverb-style reverb: sums the `send` bus to mono and adds its tail to `out` (the same bus works too). `wet` 0–1. */\nexport function reverb(send: Bus, out: Bus, wet: number, size = 0.8): void {\n const L = out.L, R = out.R, sL = send.L, sR = send.R;\n const scale = SR / 44100;\n type Comb = { b: Float32Array; i: number; fb: number; d: number; damp: number };\n const comb = (len: number): Comb => ({ b: new Float32Array(Math.max(8, Math.round(len * scale))), i: 0, fb: size, d: 0, damp: 0.35 });\n const mk = (off: number) => ({\n c: [1116, 1188, 1277, 1356, 1422, 1491].map(l => comb(l + off)),\n a: [556, 441, 341].map(l => ({ b: new Float32Array(Math.max(8, Math.round((l + off) * scale))), i: 0 })),\n });\n const run = (x: number, ch: ReturnType<typeof mk>): number => {\n let y = 0;\n for (const c of ch.c) {\n const o = c.b[c.i]!;\n c.d = o * (1 - c.damp) + c.d * c.damp;\n c.b[c.i] = x * 0.03 + c.d * c.fb;\n c.i = (c.i + 1) % c.b.length;\n y += o;\n }\n for (const a of ch.a) {\n const o = a.b[a.i]!, inp = y;\n a.b[a.i] = inp + o * 0.5;\n a.i = (a.i + 1) % a.b.length;\n y = o - inp;\n }\n return y;\n };\n const chL = mk(0), chR = mk(23);\n for (let i = 0; i < L.length; i++) {\n const m = (sL[i]! + sR[i]!) * 0.5;\n L[i]! += run(m, chL) * wet; R[i]! += run(m, chR) * wet;\n }\n}\n","/**\n * The text notation of `music`: notes, chords, rests and drum grids, and the tempo map. Pure functions, no audio.\n * Ported from the spike the owner approved by ear (a score of 8 lines of text → a lo-fi tune that sounds like one).\n */\n\nconst SEMI: Record<string, number> = { c: 0, d: 2, e: 4, f: 5, g: 7, a: 9, b: 11 };\nconst accidental = (s: string): number => (s === '#' ? 1 : s === 'b' ? -1 : 0);\n\n/** Chord kinds as semitones above the root (a ninth is 14, an eleventh 17, a thirteenth 21). Voiced close, around octave 3. */\nexport const CHORD_KINDS: Record<string, number[]> = {\n '': [0, 4, 7], m: [0, 3, 7], 5: [0, 7], aug: [0, 4, 8], dim: [0, 3, 6], sus2: [0, 2, 7], sus4: [0, 5, 7],\n 6: [0, 4, 7, 9], m6: [0, 3, 7, 9], add9: [0, 4, 7, 14], madd9: [0, 3, 7, 14], add11: [0, 4, 7, 17],\n 7: [0, 4, 7, 10], maj7: [0, 4, 7, 11], m7: [0, 3, 7, 10], mMaj7: [0, 3, 7, 11], dim7: [0, 3, 6, 9], m7b5: [0, 3, 6, 10],\n '7sus4': [0, 5, 7, 10], '7b9': [0, 4, 7, 10, 13], '7#9': [0, 4, 7, 10, 15],\n 9: [0, 4, 7, 10, 14], maj9: [0, 4, 7, 11, 14], m9: [0, 3, 7, 10, 14],\n 11: [0, 4, 7, 10, 14, 17], m11: [0, 3, 7, 10, 14, 17], 13: [0, 4, 7, 10, 14, 21], maj13: [0, 4, 7, 11, 14, 21], m13: [0, 3, 7, 10, 14, 21],\n 'maj7#11': [0, 4, 7, 11, 18],\n};\n\nexport const NOTE_FORMS = 'a note in lowercase like c4, f#3, bb2; a chord starting with a capital like Am7, G7, C@4, Am7/e; [c4 e4 g4]; _ for a rest; ~ to hold';\n\n/** Spellings people reach for that are not chord kinds here, and the kind they mean (`Cmin7` → `Cm7`). */\nconst KIND_SPELLINGS: Record<string, string> = {\n maj: '', M: '', major: '', min: 'm', minor: 'm', mi: 'm', '-': 'm', min7: 'm7', mi7: 'm7', '-7': 'm7', minor7: 'm7', min9: 'm9', min6: 'm6', min11: 'm11',\n M7: 'maj7', Maj7: 'maj7', ma7: 'maj7', major7: 'maj7', M9: 'maj9', Maj9: 'maj9', sus: 'sus4', dom7: '7', dom: '7', '+': 'aug', o: 'dim', o7: 'dim7',\n 'ø': 'm7b5', 'm7-5': 'm7b5', add: 'add9', '7sus': '7sus4', 'sus7': '7sus4', '9sus4': '7sus4', '6/9': '6', '69': '6',\n};\n\n/** Why a bare token that starts with a capital letter is not a chord, as one sentence with the fix (or null when it is something else). */\nfunction capitalHint(tok: string): string | null {\n if (/^[A-G][#b]?-?\\d$/.test(tok)) return `it starts with a capital letter, so it is read as a chord; write the note in lowercase: ${tok.toLowerCase()}`;\n const m = /^([A-G][#b]?)([^@/\\s]*)((?:@\\d)?(?:\\/[a-gA-G][#b]?)?)$/.exec(tok);\n if (!m) return null;\n const fix = KIND_SPELLINGS[m[2]!];\n return fix === undefined ? null : `the chord kind \"${m[2]}\" is not known; did you mean \"${m[1]}${fix}${m[3]}\"?`;\n}\n\n/** `c4` / `f#3` / `Bb2` → MIDI number (c4 = 60), or null. */\nexport function noteToMidi(name: string): number | null {\n const m = /^([a-gA-G])([#b]?)(-?\\d)$/.exec(name);\n if (!m) return null;\n return 12 * (Number(m[3]) + 1) + SEMI[m[1]!.toLowerCase()]! + accidental(m[2]!);\n}\n\n/** `Am7` → MIDI notes (root in octave 3); `C@4` puts the root in octave 4, `Am7/e` puts e in the bass. Null when it is not a chord. */\nexport function chordToMidi(sym: string): number[] | null {\n const m = /^([A-G])([#b]?)([^@/\\s]*)(?:@(\\d))?(?:\\/([a-gA-G][#b]?))?$/.exec(sym);\n if (!m) return null;\n const kind = CHORD_KINDS[m[3]!];\n if (!kind) return null;\n const root = SEMI[m[1]!.toLowerCase()]! + accidental(m[2]!);\n const oct = m[4] !== undefined ? Number(m[4]) : 3;\n const notes = kind.map(i => 12 * (oct + 1) + root + i);\n if (m[5]) notes.unshift(12 * oct + SEMI[m[5][0]!.toLowerCase()]! + accidental(m[5][1] ?? ''));\n return notes;\n}\n\n/** One note or chord of a track: where (beats from the start), how long (beats), which MIDI notes, how hard (0–1). */\nexport interface MusicEvent { t: number; dur: number; midi: number[]; vel: number }\n\n/**\n * A track's `notes` string → events. Tokens are separated by spaces (`|` is ignored: use it for bars).\n * `c4`, `c4:2`, `c4:0.5` a note (`:` = length in beats, default `step`) · `Am7:4`, `C@4:2`, `Am7/e:4` a chord · `[c4 e4 g4]:2` a chord note by note ·\n * `_`, `_:2` a rest · `~`, `~:1` hold (lengthens the note before) · `!` accent, `,` soft, before or after the length: `c4!:1`, `c4:1!`.\n * Throws an Error that names the token.\n */\nexport function parseNotes(str: string, step = 1): { events: MusicEvent[]; length: number } {\n const events: MusicEvent[] = [];\n let t = 0;\n for (const raw of String(str).replace(/\\|/g, ' ').match(/\\[[^\\]]*\\](?::[\\d.]+)?[!,]?|\\S+/g) ?? []) {\n let tok = raw, vel = 0.8;\n const mark = (c: string) => { vel = c === '!' ? 1 : 0.55; };\n if (/[!,]$/.test(tok)) { mark(tok.slice(-1)); tok = tok.slice(0, -1); }\n let dur = step;\n const dm = /:([\\d.]+)$/.exec(tok);\n if (dm) { dur = Number(dm[1]); tok = tok.slice(0, dm.index); }\n if (/[!,]$/.test(tok)) { mark(tok.slice(-1)); tok = tok.slice(0, -1); }\n if (!(dur > 0) || !Number.isFinite(dur)) throw new Error(`\"${raw}\" has a length of ${dm?.[1]} beats; a length must be a positive number of beats (c4:2)`);\n if (tok === '_') { t += dur; continue; }\n if (tok === '~') { if (events.length) events[events.length - 1]!.dur += dur; t += dur; continue; }\n let midi: Array<number | null> | null;\n if (tok.startsWith('[')) midi = tok.slice(1, -1).trim().split(/\\s+/).map(noteToMidi);\n else if (/^[A-G]/.test(tok)) midi = chordToMidi(tok); // a capital letter starts a chord (G7, C5, C6), a lowercase one a note (g7, c5, c6): never both\n else midi = [noteToMidi(tok)];\n if (!midi || midi.length === 0 || midi.some(x => x === null)) {\n const hint = /^[A-G]/.test(tok) && !tok.startsWith('[') ? capitalHint(tok) : null;\n throw new Error(`cannot read \"${raw}\"${hint ? `: ${hint}` : ''} (${NOTE_FORMS})`);\n }\n events.push({ t, dur, midi: midi as number[], vel });\n t += dur;\n }\n return { events, length: t };\n}\n\n/** A drum pattern: `x` a hit, `o` a soft hit, `.` nothing (spaces and `|` are ignored). Step = 1/`grid` of a beat. */\nexport function parseDrumGrid(grid: string): { hits: Array<{ i: number; vel: number }>; steps: number } {\n const hits: Array<{ i: number; vel: number }> = [];\n let i = 0;\n for (const ch of String(grid).replace(/[\\s|]/g, '')) {\n if (ch === 'x' || ch === 'X') hits.push({ i, vel: 1 });\n else if (ch === 'o' || ch === 'O') hits.push({ i, vel: 0.5 });\n else if (ch !== '.' && ch !== '-' && ch !== '_') throw new Error(`\"${ch}\" in the drum pattern \"${grid}\": use x (hit), o (soft hit), . (nothing)`);\n i++;\n }\n return { hits, steps: i };\n}\n\n/** Tempo as `[beat, bpm]` points; between two points the tempo changes linearly (a ritardando), before / after it holds. */\nexport type TempoPoints = Array<[number, number]>;\n\n/** Beats → seconds for a tempo map (exact integral of 60 / bpm). */\nexport class TempoMap {\n private readonly points: TempoPoints;\n private readonly secAt: number[] = [0];\n\n constructor(bpm: number | TempoPoints) {\n this.points = typeof bpm === 'number' ? [[0, bpm]] : [...bpm].sort((a, b) => a[0] - b[0]);\n if (this.points[0]![0] > 0) this.points.unshift([0, this.points[0]![1]]);\n for (let i = 1; i < this.points.length; i++) {\n const [b0, t0] = this.points[i - 1]!, [b1, t1] = this.points[i]!;\n this.secAt.push(this.secAt[i - 1]! + TempoMap.span(b1 - b0, t0, t1));\n }\n }\n\n /** Seconds taken by `db` beats while the tempo goes from `t0` to `t1` bpm. */\n private static span(db: number, t0: number, t1: number): number {\n return Math.abs(t1 - t0) < 1e-9 ? (60 * db) / t0 : (60 * db * Math.log(t1 / t0)) / (t1 - t0);\n }\n\n seconds(beat: number): number {\n if (beat <= 0) return (60 * beat) / this.points[0]![1];\n let i = this.points.length - 1;\n while (i > 0 && this.points[i]![0] > beat) i--;\n const [b0, t0] = this.points[i]!;\n const next = this.points[i + 1];\n if (!next) return this.secAt[i]! + (60 * (beat - b0)) / t0;\n const t = t0 + ((next[1] - t0) * (beat - b0)) / (next[0] - b0);\n return this.secAt[i]! + TempoMap.span(beat - b0, t0, t);\n }\n\n /** The tempo at a beat. */\n bpmAt(beat: number): number {\n if (beat <= this.points[0]![0]) return this.points[0]![1];\n for (let i = 1; i < this.points.length; i++) {\n const [b0, t0] = this.points[i - 1]!, [b1, t1] = this.points[i]!;\n if (beat < b1) return t0 + ((t1 - t0) * (beat - b0)) / (b1 - b0);\n }\n return this.points[this.points.length - 1]![1];\n }\n}\n","import { suggestName, warnUnknownOptions } from '../../core/options';\nimport type { MusicOptions } from '../../types';\nimport { DRUMS, INSTRUMENTS, type DrumName, type InstrumentName, type VoiceOptions } from './instruments';\nimport { parseDrumGrid, parseNotes, TempoMap, type MusicEvent, type TempoPoints } from './notation';\n\nexport const MAX_TRACKS = 16;\nexport const MAX_SECONDS = 180;\nexport const MAX_NOTES = 20000;\nexport const DEFAULT_TAIL = 2.5;\n\nconst OPTION_KEYS = ['bpm', 'tracks', 'drums', 'grid', 'swing', 'reverb', 'humanize', 'drumVol', 'transpose', 'tail', 'seed'] as const;\nconst TRACK_KEYS = ['inst', 'notes', 'vol', 'pan', 'step', 'strum', 'legato', 'tone', 'reverb', 'attack', 'release', 'ring', 'transpose'] as const;\n/** Layer fields an author may put inside `music` by mistake. */\nconst LAYER_KEYS = ['duration', 'length', 'volume', 'at', 'loop'];\n\n/** Words authors reach for, mapped to the instrument that makes that sound. */\nconst INSTRUMENT_ALIASES: Record<string, InstrumentName> = {\n piano: 'keys', ep: 'keys', rhodes: 'keys', epiano: 'keys', electricpiano: 'keys', keyboard: 'keys', organ: 'pad',\n guitar: 'pluck', harp: 'pluck', koto: 'pluck', strings: 'pad', synth: 'lead', melody: 'lead', flute: 'lead',\n glockenspiel: 'bell', glock: 'bell', chime: 'bell', vibes: 'bell', 'music-box': 'musicbox', music_box: 'musicbox', musicbox: 'musicbox',\n sinebass: 'sub', '808': 'sub', bassline: 'bass',\n};\nconst DRUM_ALIASES: Record<string, DrumName> = {\n bd: 'kick', bassdrum: 'kick', sd: 'snare', hihat: 'hat', hh: 'hat', closedhat: 'hat', oh: 'openhat', cymbal: 'crash', tambourine: 'shaker',\n sleighbells: 'sleigh', jingle: 'sleigh', bells: 'sleigh',\n};\n\nexport interface ResolvedTrack {\n inst: InstrumentName;\n events: MusicEvent[];\n length: number;\n vol: number | Array<[number, number]>;\n pan: number;\n strum: number;\n legato: number;\n tone: number;\n reverb: number;\n transpose: number;\n voice: VoiceOptions;\n}\nexport interface ResolvedDrums {\n from: number;\n to: number;\n /** Beats one repeat of the pattern lasts. */\n repeat: number;\n drums: Array<{ kind: DrumName; hits: Array<{ i: number; vel: number }> }>;\n}\nexport interface ResolvedMusic {\n tempo: TempoPoints;\n swing: number;\n reverb: number;\n humanize: number;\n drumVol: number;\n grid: number;\n tail: number;\n seed: number;\n tracks: ResolvedTrack[];\n drums: ResolvedDrums[];\n /** Length of the music in beats (the longest track; drums fill up to it). */\n beats: number;\n /** Length of the music in seconds, without the tail. */\n seconds: number;\n}\n\ntype Warn = (message: string) => void;\nconst defaultWarn: Warn = m => console.warn(m);\nconst clamp = (x: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, x));\nconst finite = (x: unknown): x is number => typeof x === 'number' && Number.isFinite(x);\n\n/** Check an author's `music` value, warn about everything that will not do what they meant, and return what to render (null: silent). */\nexport function resolveMusic(music: unknown, who: string, warn: Warn = defaultWarn): ResolvedMusic | null {\n if (!music || typeof music !== 'object' || Array.isArray(music)) {\n warn(`pixi-effects: ${who}: music must be an object like { bpm: 96, tracks: [{ inst: 'keys', notes: 'Cmaj7:4 Am7:4' }], drums: { kick: 'x...x...' } } (got ${JSON.stringify(music)}). The layer is silent.`);\n return null;\n }\n const o = music as Record<string, unknown>;\n const rest: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(o)) {\n if (LAYER_KEYS.includes(k)) warn(`pixi-effects: ${who}: \"${k}\" goes on the audio layer, not inside music${k === 'duration' || k === 'length' ? ' (the music lasts as long as its notes; a shorter layer duration cuts it)' : ''}`);\n else rest[k] = v;\n }\n warnUnknownOptions(`${who} music`, rest, OPTION_KEYS);\n\n const num = (key: string, lo: number, hi: number, fallback: number): number => {\n const v = o[key];\n if (v === undefined) return fallback;\n if (!finite(v)) { warn(`pixi-effects: ${who}: music.${key} must be a number (got ${JSON.stringify(v)}); using ${fallback}`); return fallback; }\n if (v < lo || v > hi) { warn(`pixi-effects: ${who}: music.${key} ${v} is outside ${lo}–${hi}; using ${clamp(v, lo, hi)}`); return clamp(v, lo, hi); }\n return v;\n };\n\n // tempo\n let tempo: TempoPoints | null = null;\n if (finite(o.bpm)) tempo = [[0, clamp(o.bpm, 20, 400)]];\n else if (Array.isArray(o.bpm) && o.bpm.length > 0 && o.bpm.every(p => Array.isArray(p) && finite(p[0]) && finite(p[1]) && p[1] > 0)) {\n tempo = (o.bpm as Array<[number, number]>).map(([b, t]) => [Math.max(0, b), clamp(t, 20, 400)] as [number, number]).sort((a, b) => a[0] - b[0]);\n }\n if (!tempo) {\n warn(`pixi-effects: ${who}: music.bpm is required: beats per minute (96), or [beat, bpm] points for a tempo change ([[0, 96], [28, 96], [32, 60]]) (got ${JSON.stringify(o.bpm)}). The layer is silent.`);\n return null;\n }\n if (finite(o.bpm) && (o.bpm < 20 || o.bpm > 400)) warn(`pixi-effects: ${who}: music.bpm ${o.bpm} is outside 20–400; using ${tempo[0]![1]}`);\n\n const swing = num('swing', 0, 0.4, 0);\n const reverbAmount = num('reverb', 0, 0.6, 0.22);\n const humanize = num('humanize', 0, 0.06, 0.012);\n const drumVol = num('drumVol', 0, 1, 0.8);\n const grid = Math.round(num('grid', 1, 12, 4));\n const tail = num('tail', 0, 10, DEFAULT_TAIL);\n const transpose = num('transpose', -36, 36, 0);\n const seed = Math.trunc(num('seed', -1e9, 1e9, 1));\n\n // tracks\n const rawTracks: unknown[] = o.tracks === undefined ? [] : Array.isArray(o.tracks) ? o.tracks : [];\n if (o.tracks !== undefined && !Array.isArray(o.tracks)) warn(`pixi-effects: ${who}: music.tracks must be a list of { inst, notes } objects (got ${typeof o.tracks})`);\n if (rawTracks.length > MAX_TRACKS) warn(`pixi-effects: ${who}: music has ${rawTracks.length} tracks; only the first ${MAX_TRACKS} play`);\n const tracks: ResolvedTrack[] = [];\n let notes = 0;\n rawTracks.slice(0, MAX_TRACKS).forEach((raw, i) => {\n const where = `${who} music.tracks[${i}]`;\n if (!raw || typeof raw !== 'object' || Array.isArray(raw)) { warn(`pixi-effects: ${where} must be an object like { inst: 'keys', notes: 'c4 e4 g4' }. The track is skipped.`); return; }\n const t = raw as Record<string, unknown>;\n warnUnknownOptions(where, t, TRACK_KEYS);\n const name = String(t.inst);\n let inst = (INSTRUMENTS as readonly string[]).includes(name) ? (name as InstrumentName) : null;\n if (!inst) {\n const guess = INSTRUMENT_ALIASES[name.toLowerCase().replace(/\\s+/g, '')] ?? (suggestName(name, INSTRUMENTS) as InstrumentName | null);\n warn(`pixi-effects: ${where}: unknown instrument \"${name}\"${guess ? ` — did you mean \"${guess}\"?` : ''} (instruments: ${INSTRUMENTS.join(', ')}). The track is skipped.`);\n return;\n }\n if (typeof t.notes !== 'string') { warn(`pixi-effects: ${where} (${inst}): notes must be a string like 'c4 e4 g4:2 _ Am7:4' (got ${JSON.stringify(t.notes)}). The track is skipped.`); return; }\n const knob = (key: string, lo: number, hi: number, fallback: number): number => {\n const v = t[key];\n if (v === undefined) return fallback;\n if (!finite(v)) { warn(`pixi-effects: ${where}: ${key} must be a number (got ${JSON.stringify(v)}); using ${fallback}`); return fallback; }\n if (v < lo || v > hi) { warn(`pixi-effects: ${where}: ${key} ${v} is outside ${lo}–${hi}; using ${clamp(v, lo, hi)}`); return clamp(v, lo, hi); }\n return v;\n };\n let parsed;\n try { parsed = parseNotes(t.notes, knob('step', 0.0625, 16, 1)); } catch (e) { warn(`pixi-effects: ${where} (${inst}): ${(e as Error).message}. The track is skipped.`); return; }\n notes += parsed.events.length;\n let vol: ResolvedTrack['vol'] = 0.8;\n if (t.vol !== undefined) {\n if (finite(t.vol)) vol = clamp(t.vol, 0, 1.5);\n else if (Array.isArray(t.vol) && t.vol.length > 0 && t.vol.every(p => Array.isArray(p) && finite(p[0]) && finite(p[1]))) {\n vol = (t.vol as Array<[number, number]>).map(([b, v]) => [b, clamp(v, 0, 1.5)] as [number, number]).sort((a, b) => a[0] - b[0]);\n } else warn(`pixi-effects: ${where}: vol must be a number (0.8) or [beat, level] points ([[0, 0], [8, 0.8]]) (got ${JSON.stringify(t.vol)}); using 0.8`);\n }\n const voice: VoiceOptions = {};\n for (const k of ['attack', 'release', 'ring'] as const) if (t[k] !== undefined) voice[k] = knob(k, k === 'ring' ? 0.1 : 0.001, k === 'ring' ? 6 : 8, 0.5);\n tracks.push({\n inst, events: parsed.events, length: parsed.length, vol, pan: knob('pan', -1, 1, 0), strum: knob('strum', 0, 0.2, 0), legato: knob('legato', 0.1, 1, 0.96),\n tone: knob('tone', 0, 1, 1), reverb: knob('reverb', 0, 1, 1), transpose: transpose + knob('transpose', -36, 36, 0), voice,\n });\n });\n if (notes > MAX_NOTES) { warn(`pixi-effects: ${who}: music has ${notes} notes; the limit is ${MAX_NOTES}. The layer is silent.`); return null; }\n\n // drums\n const sections: ResolvedDrums[] = [];\n const rawDrums: unknown[] = o.drums === undefined ? [] : Array.isArray(o.drums) ? o.drums : [o.drums];\n rawDrums.forEach((raw, i) => {\n const where = `${who} music.drums${Array.isArray(o.drums) ? `[${i}]` : ''}`;\n if (!raw || typeof raw !== 'object') { warn(`pixi-effects: ${where} must be an object like { kick: 'x...x...', snare: '....x...' } (steps: x hit, o soft hit, . nothing). It is skipped.`); return; }\n const d = raw as Record<string, unknown>;\n const drums: ResolvedDrums['drums'] = [];\n let steps = 0;\n for (const [key, pattern] of Object.entries(d)) {\n if (key === 'from' || key === 'to') continue;\n const kind = (DRUMS as readonly string[]).includes(key) ? (key as DrumName) : null;\n if (!kind) {\n const guess = DRUM_ALIASES[key.toLowerCase()] ?? (suggestName(key, DRUMS) as DrumName | null);\n warn(`pixi-effects: ${where}: unknown drum \"${key}\"${guess ? ` — did you mean \"${guess}\"?` : ''} (drums: ${DRUMS.join(', ')}, and from / to). It is skipped.`);\n continue;\n }\n if (typeof pattern !== 'string') { warn(`pixi-effects: ${where}.${key} must be a string of steps like 'x...x...' (got ${JSON.stringify(pattern)}). It is skipped.`); continue; }\n try {\n const g = parseDrumGrid(pattern);\n drums.push({ kind, hits: g.hits });\n steps = Math.max(steps, g.steps);\n } catch (e) { warn(`pixi-effects: ${where}.${key}: ${(e as Error).message}. It is skipped.`); }\n }\n if (drums.length === 0 || steps === 0) return;\n const from = finite(d.from) ? Math.max(0, d.from) : 0, to = finite(d.to) ? d.to : Infinity;\n if (d.from !== undefined && !finite(d.from)) warn(`pixi-effects: ${where}.from must be a beat number (got ${JSON.stringify(d.from)}); using 0`);\n sections.push({ from, to, repeat: steps / grid, drums });\n });\n\n const beats = Math.max(0, ...tracks.map(t => t.length), ...sections.map(s => (Number.isFinite(s.to) ? s.to : 0)));\n const map = new TempoMap(tempo);\n const seconds = map.seconds(beats);\n if (beats === 0) {\n warn(`pixi-effects: ${who}: music has no notes${sections.length ? ' (drums alone do not set the length: add a track, or a rest such as notes: \\'_:16\\')' : ''}. The layer is silent.`);\n return null;\n }\n if (seconds > MAX_SECONDS) { warn(`pixi-effects: ${who}: the music lasts ${Math.round(seconds)} s; the limit is ${MAX_SECONDS} s. The layer is silent.`); return null; }\n return { tempo, swing, reverb: reverbAmount, humanize, drumVol, grid, tail, seed, tracks, drums: sections, beats, seconds };\n}\n\n/** Cache key: equal keys render equal samples (the score is plain data, so its JSON is the key). */\nexport function musicKey(m: ResolvedMusic, length: number, loop: boolean): string {\n return `music|${JSON.stringify([m.tempo, m.swing, m.reverb, m.humanize, m.drumVol, m.grid, m.tail, m.seed, m.tracks, m.drums, length, loop])}`;\n}\n","import { Biquad, hitDrum, reverb, setSampleRate, VOICES, type Bus } from './instruments';\nimport { TempoMap } from './notation';\nimport type { ResolvedMusic, ResolvedTrack } from './resolve';\n\n/** The loudest sample of music at `volume: 1` (−6 dBFS), so it sits under speech and sound effects (sfx peak at −12 dBFS). */\nexport const MUSIC_PEAK = 0.5;\nconst RMS_CAP = 0.12;\n\n/** Seeded random numbers (mulberry32): the same seed always gives the same music. */\nfunction rng(seed: number): () => number {\n let a = seed >>> 0;\n return () => {\n a = (a + 0x6d2b79f5) >>> 0;\n let t = a;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n };\n}\n\n/** How long the music plays, in seconds: its notes plus the tail of the reverb. */\nexport function musicLength(m: ResolvedMusic): number {\n return m.seconds + m.tail;\n}\n\n/** The beats of a score as times in seconds (the kick hits when there are drums with a kick, otherwise every beat): what `react()` pulses on. */\nexport function musicBeatTimes(m: ResolvedMusic, until = m.seconds): number[] {\n const map = new TempoMap(m.tempo);\n const times: number[] = [];\n if (m.drums.some(s => s.drums.some(d => d.kind === 'kick'))) {\n for (const s of m.drums) {\n const kick = s.drums.find(d => d.kind === 'kick');\n if (!kick) continue;\n const end = Math.min(s.to, m.beats);\n for (let rep = 0; s.from + rep * s.repeat < end; rep++) for (const h of kick.hits) {\n const b = s.from + rep * s.repeat + h.i / m.grid;\n if (b < end) times.push(map.seconds(b));\n }\n }\n times.sort((a, b) => a - b);\n } else {\n for (let b = 0; b < m.beats; b++) times.push(map.seconds(b));\n }\n return times.filter(t => t < until);\n}\n\n/**\n * Stereo samples `[left, right]` of the music at `sampleRate`, `length` seconds long: cut (with a short fade) if shorter than the music,\n * silent after it if longer, or repeated from the start with `loop`. Same music, same samples.\n */\nexport function renderMusic(m: ResolvedMusic, sampleRate: number, length: number, loop = false): [Float32Array, Float32Array] {\n setSampleRate(sampleRate);\n const total = Math.max(2, Math.round(length * sampleRate));\n const rnd = rng(m.seed);\n const map = new TempoMap(m.tempo);\n const loopSec = map.seconds(m.beats);\n const repeats = loop ? Math.max(1, Math.ceil(length / Math.max(0.1, loopSec))) : 1;\n const bus = (): Bus => ({ L: new Float32Array(total), R: new Float32Array(total) });\n const out = bus(), send = bus(), scratch = bus();\n const swingShift = (beat: number): number => {\n const frac = beat - Math.floor(beat);\n return beat + (Math.abs(frac - 0.5) < 1e-6 ? m.swing * 0.5 : Math.abs(frac - 0.75) < 1e-6 ? m.swing * 0.25 : 0);\n };\n\n const levelAt = (vol: ResolvedTrack['vol']): ((sec: number) => number) => {\n if (typeof vol === 'number') return () => vol;\n const pts = vol.map(([b, v]) => [map.seconds(b), v] as const);\n return sec => {\n const t = loop && loopSec > 0 ? sec % loopSec : sec;\n if (t <= pts[0]![0]) return pts[0]![1];\n for (let i = 1; i < pts.length; i++) {\n if (t < pts[i]![0]) return pts[i - 1]![1] + ((pts[i]![1] - pts[i - 1]![1]) * (t - pts[i - 1]![0])) / (pts[i]![0] - pts[i - 1]![0]);\n }\n return pts[pts.length - 1]![1];\n };\n };\n\n for (const tr of m.tracks) {\n const inst = VOICES[tr.inst];\n scratch.L.fill(0); scratch.R.fill(0);\n for (let r = 0; r < repeats; r++) {\n const offset = r * loopSec;\n for (const e of tr.events) {\n const strum = e.midi.length > 1 ? tr.strum : 0;\n const startBeat = swingShift(e.t);\n const lenSec = Math.max(0.05, (map.seconds(e.t + e.dur) - map.seconds(e.t)) * tr.legato);\n e.midi.forEach((midi, k) => {\n const t0 = offset + map.seconds(startBeat) + (rnd() - 0.5) * m.humanize + k * strum;\n const vel = Math.min(1, e.vel * (0.93 + rnd() * 0.14));\n if (t0 * sampleRate >= total) return;\n inst(midi + tr.transpose, lenSec, vel, scratch, Math.max(0, Math.round(t0 * sampleRate)), rnd, tr.voice);\n });\n }\n }\n if (tr.tone < 1) {\n const fc = 400 * 50 ** tr.tone;\n const a = [new Biquad('lp', fc, 0.7), new Biquad('lp', fc, 0.7)], b = [new Biquad('lp', fc, 0.7), new Biquad('lp', fc, 0.7)];\n for (let i = 0; i < total; i++) {\n scratch.L[i] = a[1]!.run(a[0]!.run(scratch.L[i]!));\n scratch.R[i] = b[1]!.run(b[0]!.run(scratch.R[i]!));\n }\n }\n const level = levelAt(tr.vol), pan = Math.max(-1, Math.min(1, tr.pan));\n const gl = Math.cos(((pan + 1) * Math.PI) / 4) * 1.3, gr = Math.sin(((pan + 1) * Math.PI) / 4) * 1.3;\n const constant = typeof tr.vol === 'number';\n let g = constant ? level(0) : 0;\n for (let i = 0; i < total; i++) {\n if (!constant) g = level(i / sampleRate);\n const l = scratch.L[i]! * g * gl, r = scratch.R[i]! * g * gr;\n out.L[i]! += l; out.R[i]! += r;\n send.L[i]! += l * tr.reverb; send.R[i]! += r * tr.reverb;\n }\n }\n\n if (m.drums.length) {\n scratch.L.fill(0); scratch.R.fill(0);\n for (let r = 0; r < repeats; r++) {\n const offset = r * loopSec;\n for (const s of m.drums) {\n const end = Math.min(s.to, m.beats);\n for (let rep = 0; s.from + rep * s.repeat < end - 1e-6; rep++) for (const d of s.drums) for (const h of d.hits) {\n const beat = s.from + rep * s.repeat + h.i / m.grid;\n if (beat >= end) continue;\n const vel = h.vel * (0.9 + rnd() * 0.2);\n const t0 = offset + map.seconds(swingShift(beat)) + (rnd() - 0.5) * m.humanize * 0.5;\n if (t0 * sampleRate >= total) continue;\n hitDrum(d.kind, vel, scratch, Math.max(0, Math.round(t0 * sampleRate)), rnd);\n }\n }\n }\n for (let i = 0; i < total; i++) {\n const l = scratch.L[i]! * m.drumVol, r = scratch.R[i]! * m.drumVol;\n out.L[i]! += l; out.R[i]! += r; send.L[i]! += l; send.R[i]! += r;\n }\n }\n\n reverb(send, out, m.reverb, 0.8);\n let peak = 0, sum = 0;\n for (let i = 0; i < total; i++) {\n const l = (out.L[i] = Math.tanh(out.L[i]! * 0.9)), r = (out.R[i] = Math.tanh(out.R[i]! * 0.9));\n peak = Math.max(peak, Math.abs(l), Math.abs(r));\n sum += l * l + r * r;\n }\n const rms = Math.sqrt(sum / (2 * total));\n const gain = peak > 0 ? Math.min(MUSIC_PEAK / peak, RMS_CAP / Math.max(rms, 1e-9)) : 0;\n const fade = Math.min(Math.floor(0.4 * sampleRate), total >> 2);\n for (let i = 0; i < total; i++) {\n const f = i >= total - fade ? (total - 1 - i) / fade : 1;\n out.L[i]! *= gain * f; out.R[i]! *= gain * f;\n }\n return [out.L, out.R];\n}\n"]}
|
|
@@ -339,7 +339,50 @@ var CHORD_KINDS = {
|
|
|
339
339
|
m13: [0, 3, 7, 10, 14, 21],
|
|
340
340
|
"maj7#11": [0, 4, 7, 11, 18]
|
|
341
341
|
};
|
|
342
|
-
var NOTE_FORMS = "a note like c4, f#3,
|
|
342
|
+
var NOTE_FORMS = "a note in lowercase like c4, f#3, bb2; a chord starting with a capital like Am7, G7, C@4, Am7/e; [c4 e4 g4]; _ for a rest; ~ to hold";
|
|
343
|
+
var KIND_SPELLINGS = {
|
|
344
|
+
maj: "",
|
|
345
|
+
M: "",
|
|
346
|
+
major: "",
|
|
347
|
+
min: "m",
|
|
348
|
+
minor: "m",
|
|
349
|
+
mi: "m",
|
|
350
|
+
"-": "m",
|
|
351
|
+
min7: "m7",
|
|
352
|
+
mi7: "m7",
|
|
353
|
+
"-7": "m7",
|
|
354
|
+
minor7: "m7",
|
|
355
|
+
min9: "m9",
|
|
356
|
+
min6: "m6",
|
|
357
|
+
min11: "m11",
|
|
358
|
+
M7: "maj7",
|
|
359
|
+
Maj7: "maj7",
|
|
360
|
+
ma7: "maj7",
|
|
361
|
+
major7: "maj7",
|
|
362
|
+
M9: "maj9",
|
|
363
|
+
Maj9: "maj9",
|
|
364
|
+
sus: "sus4",
|
|
365
|
+
dom7: "7",
|
|
366
|
+
dom: "7",
|
|
367
|
+
"+": "aug",
|
|
368
|
+
o: "dim",
|
|
369
|
+
o7: "dim7",
|
|
370
|
+
"\xF8": "m7b5",
|
|
371
|
+
"m7-5": "m7b5",
|
|
372
|
+
add: "add9",
|
|
373
|
+
"7sus": "7sus4",
|
|
374
|
+
"sus7": "7sus4",
|
|
375
|
+
"9sus4": "7sus4",
|
|
376
|
+
"6/9": "6",
|
|
377
|
+
"69": "6"
|
|
378
|
+
};
|
|
379
|
+
function capitalHint(tok) {
|
|
380
|
+
if (/^[A-G][#b]?-?\d$/.test(tok)) return `it starts with a capital letter, so it is read as a chord; write the note in lowercase: ${tok.toLowerCase()}`;
|
|
381
|
+
const m = /^([A-G][#b]?)([^@/\s]*)((?:@\d)?(?:\/[a-gA-G][#b]?)?)$/.exec(tok);
|
|
382
|
+
if (!m) return null;
|
|
383
|
+
const fix = KIND_SPELLINGS[m[2]];
|
|
384
|
+
return fix === void 0 ? null : `the chord kind "${m[2]}" is not known; did you mean "${m[1]}${fix}${m[3]}"?`;
|
|
385
|
+
}
|
|
343
386
|
function noteToMidi(name) {
|
|
344
387
|
const m = /^([a-gA-G])([#b]?)(-?\d)$/.exec(name);
|
|
345
388
|
if (!m) return null;
|
|
@@ -390,9 +433,12 @@ function parseNotes(str, step = 1) {
|
|
|
390
433
|
}
|
|
391
434
|
let midi;
|
|
392
435
|
if (tok.startsWith("[")) midi = tok.slice(1, -1).trim().split(/\s+/).map(noteToMidi);
|
|
393
|
-
else if (
|
|
394
|
-
else midi =
|
|
395
|
-
if (!midi || midi.length === 0 || midi.some((x) => x === null))
|
|
436
|
+
else if (/^[A-G]/.test(tok)) midi = chordToMidi(tok);
|
|
437
|
+
else midi = [noteToMidi(tok)];
|
|
438
|
+
if (!midi || midi.length === 0 || midi.some((x) => x === null)) {
|
|
439
|
+
const hint = /^[A-G]/.test(tok) && !tok.startsWith("[") ? capitalHint(tok) : null;
|
|
440
|
+
throw new Error(`cannot read "${raw}"${hint ? `: ${hint}` : ""} (${NOTE_FORMS})`);
|
|
441
|
+
}
|
|
396
442
|
events.push({ t, dur, midi, vel });
|
|
397
443
|
t += dur;
|
|
398
444
|
}
|
|
@@ -822,5 +868,5 @@ exports.parseDrumGrid = parseDrumGrid;
|
|
|
822
868
|
exports.parseNotes = parseNotes;
|
|
823
869
|
exports.renderMusic = renderMusic;
|
|
824
870
|
exports.resolveMusic = resolveMusic;
|
|
825
|
-
//# sourceMappingURL=music-
|
|
826
|
-
//# sourceMappingURL=music-
|
|
871
|
+
//# sourceMappingURL=music-4O367SPR.cjs.map
|
|
872
|
+
//# sourceMappingURL=music-4O367SPR.cjs.map
|