pixi-effects 0.47.2 → 0.47.4
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 +5 -5
- package/ai/chat-template.html +3 -3
- package/dist/Composition-HTHQ2RLF.js +7 -0
- package/dist/{Composition-ZYMQ7ZRC.js.map → Composition-HTHQ2RLF.js.map} +1 -1
- package/dist/Composition-ZYRDRLYB.cjs +16 -0
- package/dist/{Composition-X6MCEFRH.cjs.map → Composition-ZYRDRLYB.cjs.map} +1 -1
- package/dist/Controller.cjs +3 -3
- package/dist/Controller.js +1 -1
- package/dist/{Spans-6HSLKR5Q.cjs → Spans-I7P7ZVZO.cjs} +12 -12
- package/dist/{Spans-6HSLKR5Q.cjs.map → Spans-I7P7ZVZO.cjs.map} +1 -1
- package/dist/{Spans-LCCZ4PW7.js → Spans-JYCTJV4V.js} +7 -7
- package/dist/{Spans-LCCZ4PW7.js.map → Spans-JYCTJV4V.js.map} +1 -1
- package/dist/{blendModes-EMANEHZS.js → blendModes-535EMYGK.js} +5 -5
- package/dist/{blendModes-EMANEHZS.js.map → blendModes-535EMYGK.js.map} +1 -1
- package/dist/{blendModes-JUISKPCA.cjs → blendModes-V5XHC7U4.cjs} +6 -6
- package/dist/{blendModes-JUISKPCA.cjs.map → blendModes-V5XHC7U4.cjs.map} +1 -1
- package/dist/{chunk-YF4JC2AL.js → chunk-34YNRCMT.js} +15 -8
- package/dist/chunk-34YNRCMT.js.map +1 -0
- package/dist/{chunk-UXPTDNNA.cjs → chunk-AES2L75M.cjs} +93 -93
- package/dist/chunk-AES2L75M.cjs.map +1 -0
- package/dist/{chunk-P2P7C2KZ.js → chunk-BFRWSV3R.js} +4 -4
- package/dist/chunk-BFRWSV3R.js.map +1 -0
- package/dist/{chunk-TVVC4GVK.cjs → chunk-CJS2S5XU.cjs} +50 -43
- package/dist/chunk-CJS2S5XU.cjs.map +1 -0
- package/dist/{chunk-TWZNOUM7.cjs → chunk-DOLTCXCL.cjs} +7 -2
- package/dist/chunk-DOLTCXCL.cjs.map +1 -0
- package/dist/{chunk-4RC4GXEM.cjs → chunk-DS2EWRV4.cjs} +96 -96
- package/dist/{chunk-4RC4GXEM.cjs.map → chunk-DS2EWRV4.cjs.map} +1 -1
- package/dist/{chunk-R43646JP.js → chunk-JBDBICS2.js} +5 -5
- package/dist/{chunk-R43646JP.js.map → chunk-JBDBICS2.js.map} +1 -1
- package/dist/{chunk-M5P7TXZ2.js → chunk-NCM2WU7R.js} +11 -11
- package/dist/chunk-NCM2WU7R.js.map +1 -0
- package/dist/{chunk-2YV7ISX6.cjs → chunk-NGJXVJB7.cjs} +7 -7
- package/dist/chunk-NGJXVJB7.cjs.map +1 -0
- package/dist/{chunk-AOQRB6AU.js → chunk-RTZ5MW3E.js} +6 -6
- package/dist/{chunk-AOQRB6AU.js.map → chunk-RTZ5MW3E.js.map} +1 -1
- package/dist/{chunk-BXOCEZ4U.js → chunk-WGRWFQOB.js} +7 -2
- package/dist/chunk-WGRWFQOB.js.map +1 -0
- package/dist/{chunk-DQVUKP5G.cjs → chunk-WYR2AU4W.cjs} +7 -7
- package/dist/{chunk-DQVUKP5G.cjs.map → chunk-WYR2AU4W.cjs.map} +1 -1
- package/dist/index.cjs +37 -37
- package/dist/index.js +6 -6
- package/dist/loader.css +1 -1
- package/dist/{music-JKOM5YK6.js → music-P4JRT73P.js} +3 -3
- package/dist/{music-JKOM5YK6.js.map → music-P4JRT73P.js.map} +1 -1
- package/dist/{music-6WFTPVHU.cjs → music-XQEPBIDT.cjs} +7 -7
- package/dist/{music-6WFTPVHU.cjs.map → music-XQEPBIDT.cjs.map} +1 -1
- package/dist/present.cjs +13 -13
- package/dist/present.js +6 -6
- package/dist/{sfx-2O6UQEUP.cjs → sfx-G2XAMD7K.cjs} +8 -8
- package/dist/{sfx-2O6UQEUP.cjs.map → sfx-G2XAMD7K.cjs.map} +1 -1
- package/dist/{sfx-VUKARHDX.js → sfx-Z7OQIKHG.js} +3 -3
- package/dist/{sfx-VUKARHDX.js.map → sfx-Z7OQIKHG.js.map} +1 -1
- package/dist/three.cjs +7 -7
- package/dist/three.js +3 -3
- package/docs/api.md +2 -2
- package/docs/dsl.md +6 -5
- package/llms-full.txt +11 -10
- package/package.json +1 -1
- package/skills/pixi-effects/SKILL.md +1 -1
- package/skills/pixi-effects/reference/cheatsheet.md +2 -2
- package/skills/pixi-effects/template.html +6 -6
- package/dist/Composition-X6MCEFRH.cjs +0 -16
- package/dist/Composition-ZYMQ7ZRC.js +0 -7
- package/dist/chunk-2YV7ISX6.cjs.map +0 -1
- package/dist/chunk-BXOCEZ4U.js.map +0 -1
- package/dist/chunk-M5P7TXZ2.js.map +0 -1
- package/dist/chunk-P2P7C2KZ.js.map +0 -1
- package/dist/chunk-TVVC4GVK.cjs.map +0 -1
- package/dist/chunk-TWZNOUM7.cjs.map +0 -1
- package/dist/chunk-UXPTDNNA.cjs.map +0 -1
- package/dist/chunk-YF4JC2AL.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/audio/music/instruments.ts","../src/audio/music/resolve.ts","../src/audio/music/render.ts"],"names":[],"mappings":"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","file":"music-JKOM5YK6.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 { if (sr !== SR) clearVoiceTables(); SR = sr; }\n/** The tables the voices share within a render (see `keysTables`): let go of them when a render is over, they are tens of MB for a long piece. */\nexport function clearVoiceTables(): void { KEYS_TABLES.clear(); BELL_TABLES.clear(); }\ninterface BellTables { s35: Float64Array; e5: Float64Array; ek: Float64Array; s276: Float64Array; e4: Float64Array; n: number }\nconst BELL_TABLES = new Map<string, BellTables>();\nfunction bellTables(f: number, k: number, n: number): BellTables {\n const key = f + '/' + k;\n let tb = BELL_TABLES.get(key);\n if (tb && tb.n >= n) return tb;\n const len = Math.max(n, tb ? tb.n * 2 : 0);\n const s35 = new Float64Array(len), e5 = new Float64Array(len), ek = new Float64Array(len), s276 = new Float64Array(len), e4 = new Float64Array(len);\n for (let i = 0; i < len; i++) { const t = i / SR; s35[i] = Math.sin(TAU * f * 3.5 * t); e5[i] = Math.exp(-t * 5); ek[i] = Math.exp(-t * k); s276[i] = Math.sin(TAU * f * 2.76 * t); e4[i] = Math.exp(-t * 4); }\n tb = { s35, e5, ek, s276, e4, n: len };\n BELL_TABLES.set(key, tb);\n return tb;\n}\n\n\ninterface KeysTables { decay: Float64Array; s14: Float64Array; s1: Float64Array; e18: Float64Array; e32: Float64Array; n: number }\nconst KEYS_TABLES = new Map<number, KeysTables>();\n/** Tables of exp(-t*(1.1+f/1500)), sin(TAU*f*14*t), sin(TAU*f*t) for this pitch and exp(-t*18), exp(-t*3.2) for t = i/SR, at least `n` long (grown when a longer note comes). */\nfunction keysTables(f: number, n: number): KeysTables {\n let tb = KEYS_TABLES.get(f);\n if (tb && tb.n >= n) return tb;\n const len = Math.max(n, tb ? tb.n * 2 : 0);\n const decay = new Float64Array(len), s14 = new Float64Array(len), s1 = new Float64Array(len), e18 = new Float64Array(len), e32 = new Float64Array(len);\n for (let i = 0; i < len; i++) {\n const t = i / SR;\n decay[i] = Math.exp(-t * (1.1 + f / 1500)); s14[i] = Math.sin(TAU * f * 14 * t); s1[i] = Math.sin(TAU * f * t); e18[i] = Math.exp(-t * 18); e32[i] = Math.exp(-t * 3.2);\n }\n tb = { decay, s14, s1, e18, e32, n: len };\n KEYS_TABLES.set(f, tb);\n return tb;\n}\n\n\nconst mtof = (m: number): number => 440 * 2 ** ((m - 69) / 12);\n\nclass Biquad {\n b0 = 1; b1 = 0; b2 = 0; a1 = 0; a2 = 0;\n x1 = 0; x2 = 0; y1 = 0; 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 /** All four memories are so small that anything this filter outputs from silence on rounds to 0 in a Float32Array (below half its smallest number). */\n settled(): boolean {\n return Math.abs(this.x1) < 1e-47 && Math.abs(this.x2) < 1e-47 && Math.abs(this.y1) < 1e-47 && Math.abs(this.y2) < 1e-47;\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\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 // the envelope is 0 from `dur + rel` on: what follows is silence, so it is not computed (the notes used to run 1.2 s of zeros)\n const n = Math.min(Math.floor(Math.min(total, 6) * SR), Math.ceil((dur + rel) * SR) + 2), idx = 1.1 + 2.2 * vel, det = 1 + (rnd() - 0.5) * 0.002;\n const lim = Math.min(n, out.L.length - start);\n // the parts of the sound that depend only on the pitch and the sample index are the same for every note of that pitch: tabled once (the same Math.exp / Math.sin values, so the same samples)\n const tb = keysTables(f, lim), dcy = tb.decay, s14 = tb.s14, s1 = tb.s1, e18 = tb.e18, e32 = tb.e32;\n for (let i = 0; i < lim; i++) { // what falls past the end of the bus is not made\n const t = i / SR;\n const decay = dcy[i]!;\n const mod = s14[i]! * idx * 0.12 * e18[i]! + s1[i]! * idx * e32[i]!;\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 { const wl = a * (body * 0.7 + body2 * 0.3), wr = a * (body * 0.3 + body2 * 0.7); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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 cs = [-0.14, -0.07, 0, 0.07, 0.14];\n const st = (k: number): number => (f * 2 ** ((cs[k]! / 12) * 0.6)) / SR, gL = (k: number): number => 1 - (k - 2) / 2.5, gR = (k: number): number => 1 + (k - 2) / 2.5;\n let p0 = rnd(), p1 = rnd(), p2 = rnd(), p3 = rnd(), p4 = rnd();\n const d0 = st(0), d1 = st(1), d2 = st(2), d3 = st(3), d4 = st(4);\n const gl0 = gL(0), gl1 = gL(1), gl2 = gL(2), gl3 = gL(3), gl4 = gL(4), gr0 = gR(0), gr1 = gR(1), gr2 = gR(2), gr3 = gR(3), gr4 = gR(4);\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, lim = Math.min(n, out.L.length - start); i < lim; i++) {\n const t = i / SR;\n let l = 0, r = 0, sv: number;\n p0 += d0; if (p0 >= 1) p0 -= 1; sv = saw(p0, d0); l += sv * gl0 * 0.5; r += sv * gr0 * 0.5;\n p1 += d1; if (p1 >= 1) p1 -= 1; sv = saw(p1, d1); l += sv * gl1 * 0.5; r += sv * gr1 * 0.5;\n p2 += d2; if (p2 >= 1) p2 -= 1; sv = saw(p2, d2); l += sv * gl2 * 0.5; r += sv * gr2 * 0.5;\n p3 += d3; if (p3 >= 1) p3 -= 1; sv = saw(p3, d3); l += sv * gl3 * 0.5; r += sv * gr3 * 0.5;\n p4 += d4; if (p4 >= 1) p4 -= 1; sv = saw(p4, d4); l += sv * gl4 * 0.5; r += sv * gr4 * 0.5;\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 { const wl = lp.run(l) * g, wr = lp2.run(r) * g; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y, wr = y; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y, wr = y; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * 0.9, wr = y * 1.1; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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 const lim = Math.min(n, out.L.length - start);\n const tb = bellTables(f, k, lim), s35 = tb.s35, e5 = tb.e5, ek = tb.ek, s276 = tb.s276, e4 = tb.e4;\n for (let i = 0; i < lim; i++) { // what falls past the end of the bus is not made\n const t = i / SR;\n const mod = s35[i]! * 1.6 * e5[i]!;\n const s = Math.sin(TAU * f * t + mod) * ek[i]! + s276[i]! * 0.25 * e4[i]!;\n const y = s * Math.min(1, t / 0.002) * 0.3 * vel;\n { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, gl = 1, gr = 1): void => {\n // `f` runs for every sample (it draws noise from the seeded stream); only the samples inside the bus are written\n const lim = Math.min(n, out.L.length - start), L = out.L, R = out.R;\n for (let i = 0; i < n; i++) { const o = f(i / SR); if (i < lim) { L[start + i]! += o * gl; R[start + i]! += o * gr; } }\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; });\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, 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; }, 1, 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, 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; });\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; });\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, 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, 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;\n }, 0.85, 1.15);\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. */\n/** `reverb` in slices: it yields how far it is (0..1) every 16384 samples, so a caller can hand control back to the page. */\nexport function* reverbSteps(send: Bus, out: Bus, wet: number, size = 0.8): Generator<number, void, 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 chL = mk(0), chR = mk(23);\n const block = (i: number, stop: number): void => {\n for (; i < stop; i++) {\n const m = (sL[i]! + sR[i]!) * 0.5;\n L[i]! += runFlat(m, chL) * wet; R[i]! += runFlat(m, chR) * wet;\n }\n };\n for (let i = 0; i < L.length; ) {\n yield i / L.length;\n const stop = Math.min(L.length, (i | 16383) + 1);\n block(i, stop);\n i = stop;\n }\n}\n\nfunction runFlat(x: number, ch: { c: { b: Float32Array; i: number; fb: number; d: number; damp: number }[]; a: { b: Float32Array; i: number }[] }): number {\n let y = 0;\n const cs = ch.c, as = ch.a;\n for (let k = 0; k < 6; k++) {\n const c = cs[k]!, b = c.b;\n const o = b[c.i]!;\n c.d = o * (1 - c.damp) + c.d * c.damp;\n b[c.i] = x * 0.03 + c.d * c.fb;\n c.i = c.i + 1 === b.length ? 0 : c.i + 1;\n y += o;\n }\n for (let k = 0; k < 3; k++) {\n const a = as[k]!, b = a.b;\n const o = b[a.i]!, inp = y;\n b[a.i] = inp + o * 0.5;\n a.i = a.i + 1 === b.length ? 0 : a.i + 1;\n y = o - inp;\n }\n return y;\n}\nexport function reverb(send: Bus, out: Bus, wet: number, size = 0.8): void {\n for (const _ of reverbSteps(send, out, wet, size)) void _;\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', 'meter', '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 /** Beats in a bar: bar numbers and bar counts only, playback does not use it. */\n meter: number;\n /** The score gave a number as `meter` (when it did not, or gave something else, 4 is only assumed). */\n meterSet: boolean;\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 meter = num('meter', 1, 16, 4);\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, meter, meterSet: finite(o.meter), 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, clearVoiceTables, hitDrum, reverbSteps, 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/** The first and the last index where the bus is not 0 (`[total, -1]` when it is all 0). */\nfunction extent(b: Bus): [number, number] {\n let lo = b.L.length, hi = -1;\n for (let i = 0; i < b.L.length; i++) if (b.L[i] !== 0 || b.R[i] !== 0) { lo = i; break; }\n for (let i = b.L.length - 1; i >= lo; i--) if (b.L[i] !== 0 || b.R[i] !== 0) { hi = i; break; }\n return [lo, hi];\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/** The tone filter (two cascaded biquads per channel) over [i, stop): a plain function, so the loop is not inside the generator. Returns where it stopped. */\nfunction toneRun(scratch: Bus, a: Biquad[], b: Biquad[], i: number, stop: number, end: number): number {\n const L = scratch.L, R = scratch.R;\n const a0 = a[0]!, a1 = a[1]!, b0 = b[0]!, b1 = b[1]!;\n for (; i < stop && (i < end || !(a0.settled() && a1.settled() && b0.settled() && b1.settled())); i++) {\n L[i] = a1.run(a0.run(L[i]!));\n R[i] = b1.run(b0.run(R[i]!));\n }\n return i;\n}\n/** Level, pan and the sends of one track over [i, stop): a plain function for the same reason. */\nfunction mixRun(scratch: Bus, out: Bus, send: Bus, i: number, stop: number, level: (sec: number) => number, constant: boolean, g: number, gl: number, gr: number, rv: number, sampleRate: number): void {\n const sL = scratch.L, sR = scratch.R, oL = out.L, oR = out.R, eL = send.L, eR = send.R;\n for (; i < stop; i++) {\n if (!constant) g = level(i / sampleRate);\n const l = sL[i]! * g * gl, r = sR[i]! * g * gr;\n oL[i]! += l; oR[i]! += r;\n eL[i]! += l * rv; eR[i]! += r * rv;\n }\n}\nfunction tanhRun(out: Bus, i: number, stop: number, acc: Float64Array): void {\n const L = out.L, R = out.R;\n let peak = acc[0]!, sum = acc[1]!;\n for (; i < stop; i++) {\n const l = (L[i] = Math.tanh(L[i]! * 0.9)), r = (R[i] = Math.tanh(R[i]! * 0.9));\n peak = Math.max(peak, Math.abs(l), Math.abs(r));\n sum += l * l + r * r;\n }\n acc[0] = peak; acc[1] = sum;\n}\n\n/** The music as a sequence of slices: each `yield` is how much is done (0..1); the return value is the samples. */\nfunction* renderMusicSteps(m: ResolvedMusic, sampleRate: number, length: number, loop: boolean): Generator<number, [Float32Array, Float32Array], void> {\n setSampleRate(sampleRate);\n // work is counted in units (a track, the drums, the reverb, the last pass): a yield says how many are done, as 0..1\n const units = m.tracks.length + (m.drums.length ? 1 : 0) + 2;\n let unit = 0;\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 // played in order (a render asks for seconds that only rise) the segment is found by moving on, not by searching from the start\n if (!loop && pts.every((p, i) => i === 0 || p[0] >= pts[i - 1]![0])) {\n let j = 1;\n return sec => {\n if (sec <= pts[0]![0]) return pts[0]![1];\n while (j < pts.length && !(sec < pts[j]![0])) j++;\n if (j < pts.length) return pts[j - 1]![1] + ((pts[j]![1] - pts[j - 1]![1]) * (sec - pts[j - 1]![0])) / (pts[j]![0] - pts[j - 1]![0]);\n return pts[pts.length - 1]![1];\n };\n }\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 for (let r = 0; r < repeats; r++) {\n const offset = r * loopSec;\n for (let ei = 0; ei < tr.events.length; ei++) {\n const e = tr.events[ei]!;\n yield (unit + ei / tr.events.length) / units;\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 // where the track made sound: before and after it the scratch bus is exactly 0, so nothing there is filtered or mixed\n const [lo, hi] = extent(scratch);\n let end = hi + 1;\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 let i = lo;\n // up to the last sound, then until the filter has run out (what it gives from there on is 0 in a Float32Array)\n for (;;) {\n const stop = Math.min(total, (i | 65535) + 1);\n const j = toneRun(scratch, a, b, i, stop, end);\n if (j < stop || j >= total) { i = j; break; }\n i = j; yield (unit + 0.9) / units;\n }\n end = Math.max(end, i);\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 = lo; i < end; ) {\n const stop = Math.min(end, (i | 65535) + 1);\n mixRun(scratch, out, send, i, stop, level, constant, g, gl, gr, tr.reverb, sampleRate);\n i = stop; yield (unit + 0.95) / units;\n }\n scratch.L.fill(0, lo, end); scratch.R.fill(0, lo, end);\n unit++;\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 yield unit / units;\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 unit++;\n }\n\n for (const f of reverbSteps(send, out, m.reverb, 0.8)) yield (unit + f) / units;\n unit++;\n const acc = new Float64Array(2);\n for (let i = 0; i < total; ) {\n const stop = Math.min(total, (i | 65535) + 1);\n tanhRun(out, i, stop, acc);\n i = stop; yield (unit + (0.5 * i) / total) / units;\n }\n const peak = acc[0]!, sum = acc[1]!;\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 clearVoiceTables();\n return [out.L, out.R];\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 const it = renderMusicSteps(m, sampleRate, length, loop);\n for (;;) { const r = it.next(); if (r.done) return r.value; }\n}\n\n/** The same samples, made in slices: `pace(done)` (0..1) runs between them and may wait, so the page can paint while a long piece is made. */\nexport async function renderMusicAsync(\n m: ResolvedMusic, sampleRate: number, length: number, loop = false, pace?: (done: number) => Promise<void> | void,\n): Promise<[Float32Array, Float32Array]> {\n const it = renderMusicSteps(m, sampleRate, length, loop);\n for (;;) {\n const r = it.next();\n if (r.done) return r.value;\n if (pace) await pace(r.value);\n }\n}\n\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/audio/music/instruments.ts","../src/audio/music/resolve.ts","../src/audio/music/render.ts"],"names":[],"mappings":"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","file":"music-P4JRT73P.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 { if (sr !== SR) clearVoiceTables(); SR = sr; }\n/** The tables the voices share within a render (see `keysTables`): let go of them when a render is over, they are tens of MB for a long piece. */\nexport function clearVoiceTables(): void { KEYS_TABLES.clear(); BELL_TABLES.clear(); }\ninterface BellTables { s35: Float64Array; e5: Float64Array; ek: Float64Array; s276: Float64Array; e4: Float64Array; n: number }\nconst BELL_TABLES = new Map<string, BellTables>();\nfunction bellTables(f: number, k: number, n: number): BellTables {\n const key = f + '/' + k;\n let tb = BELL_TABLES.get(key);\n if (tb && tb.n >= n) return tb;\n const len = Math.max(n, tb ? tb.n * 2 : 0);\n const s35 = new Float64Array(len), e5 = new Float64Array(len), ek = new Float64Array(len), s276 = new Float64Array(len), e4 = new Float64Array(len);\n for (let i = 0; i < len; i++) { const t = i / SR; s35[i] = Math.sin(TAU * f * 3.5 * t); e5[i] = Math.exp(-t * 5); ek[i] = Math.exp(-t * k); s276[i] = Math.sin(TAU * f * 2.76 * t); e4[i] = Math.exp(-t * 4); }\n tb = { s35, e5, ek, s276, e4, n: len };\n BELL_TABLES.set(key, tb);\n return tb;\n}\n\n\ninterface KeysTables { decay: Float64Array; s14: Float64Array; s1: Float64Array; e18: Float64Array; e32: Float64Array; n: number }\nconst KEYS_TABLES = new Map<number, KeysTables>();\n/** Tables of exp(-t*(1.1+f/1500)), sin(TAU*f*14*t), sin(TAU*f*t) for this pitch and exp(-t*18), exp(-t*3.2) for t = i/SR, at least `n` long (grown when a longer note comes). */\nfunction keysTables(f: number, n: number): KeysTables {\n let tb = KEYS_TABLES.get(f);\n if (tb && tb.n >= n) return tb;\n const len = Math.max(n, tb ? tb.n * 2 : 0);\n const decay = new Float64Array(len), s14 = new Float64Array(len), s1 = new Float64Array(len), e18 = new Float64Array(len), e32 = new Float64Array(len);\n for (let i = 0; i < len; i++) {\n const t = i / SR;\n decay[i] = Math.exp(-t * (1.1 + f / 1500)); s14[i] = Math.sin(TAU * f * 14 * t); s1[i] = Math.sin(TAU * f * t); e18[i] = Math.exp(-t * 18); e32[i] = Math.exp(-t * 3.2);\n }\n tb = { decay, s14, s1, e18, e32, n: len };\n KEYS_TABLES.set(f, tb);\n return tb;\n}\n\n\nconst mtof = (m: number): number => 440 * 2 ** ((m - 69) / 12);\n\nclass Biquad {\n b0 = 1; b1 = 0; b2 = 0; a1 = 0; a2 = 0;\n x1 = 0; x2 = 0; y1 = 0; 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 /** All four memories are so small that anything this filter outputs from silence on rounds to 0 in a Float32Array (below half its smallest number). */\n settled(): boolean {\n return Math.abs(this.x1) < 1e-47 && Math.abs(this.x2) < 1e-47 && Math.abs(this.y1) < 1e-47 && Math.abs(this.y2) < 1e-47;\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\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 // the envelope is 0 from `dur + rel` on: what follows is silence, so it is not computed (the notes used to run 1.2 s of zeros)\n const n = Math.min(Math.floor(Math.min(total, 6) * SR), Math.ceil((dur + rel) * SR) + 2), idx = 1.1 + 2.2 * vel, det = 1 + (rnd() - 0.5) * 0.002;\n const lim = Math.min(n, out.L.length - start);\n // the parts of the sound that depend only on the pitch and the sample index are the same for every note of that pitch: tabled once (the same Math.exp / Math.sin values, so the same samples)\n const tb = keysTables(f, lim), dcy = tb.decay, s14 = tb.s14, s1 = tb.s1, e18 = tb.e18, e32 = tb.e32;\n for (let i = 0; i < lim; i++) { // what falls past the end of the bus is not made\n const t = i / SR;\n const decay = dcy[i]!;\n const mod = s14[i]! * idx * 0.12 * e18[i]! + s1[i]! * idx * e32[i]!;\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 { const wl = a * (body * 0.7 + body2 * 0.3), wr = a * (body * 0.3 + body2 * 0.7); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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 cs = [-0.14, -0.07, 0, 0.07, 0.14];\n const st = (k: number): number => (f * 2 ** ((cs[k]! / 12) * 0.6)) / SR, gL = (k: number): number => 1 - (k - 2) / 2.5, gR = (k: number): number => 1 + (k - 2) / 2.5;\n let p0 = rnd(), p1 = rnd(), p2 = rnd(), p3 = rnd(), p4 = rnd();\n const d0 = st(0), d1 = st(1), d2 = st(2), d3 = st(3), d4 = st(4);\n const gl0 = gL(0), gl1 = gL(1), gl2 = gL(2), gl3 = gL(3), gl4 = gL(4), gr0 = gR(0), gr1 = gR(1), gr2 = gR(2), gr3 = gR(3), gr4 = gR(4);\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, lim = Math.min(n, out.L.length - start); i < lim; i++) {\n const t = i / SR;\n let l = 0, r = 0, sv: number;\n p0 += d0; if (p0 >= 1) p0 -= 1; sv = saw(p0, d0); l += sv * gl0 * 0.5; r += sv * gr0 * 0.5;\n p1 += d1; if (p1 >= 1) p1 -= 1; sv = saw(p1, d1); l += sv * gl1 * 0.5; r += sv * gr1 * 0.5;\n p2 += d2; if (p2 >= 1) p2 -= 1; sv = saw(p2, d2); l += sv * gl2 * 0.5; r += sv * gr2 * 0.5;\n p3 += d3; if (p3 >= 1) p3 -= 1; sv = saw(p3, d3); l += sv * gl3 * 0.5; r += sv * gr3 * 0.5;\n p4 += d4; if (p4 >= 1) p4 -= 1; sv = saw(p4, d4); l += sv * gl4 * 0.5; r += sv * gr4 * 0.5;\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 { const wl = lp.run(l) * g, wr = lp2.run(r) * g; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y, wr = y; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y, wr = y; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * 0.9, wr = y * 1.1; out.L[start + i]! += wl; out.R[start + i]! += wr; }\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 const lim = Math.min(n, out.L.length - start);\n const tb = bellTables(f, k, lim), s35 = tb.s35, e5 = tb.e5, ek = tb.ek, s276 = tb.s276, e4 = tb.e4;\n for (let i = 0; i < lim; i++) { // what falls past the end of the bus is not made\n const t = i / SR;\n const mod = s35[i]! * 1.6 * e5[i]!;\n const s = Math.sin(TAU * f * t + mod) * ek[i]! + s276[i]! * 0.25 * e4[i]!;\n const y = s * Math.min(1, t / 0.002) * 0.3 * vel;\n { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, lim = Math.min(n, out.L.length - start); i < lim; i++) { // what falls past the end of the bus is not made\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 { const wl = y * (1 - pan), wr = y * (1 + pan); out.L[start + i]! += wl; out.R[start + i]! += wr; }\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, gl = 1, gr = 1): void => {\n // `f` runs for every sample (it draws noise from the seeded stream); only the samples inside the bus are written\n const lim = Math.min(n, out.L.length - start), L = out.L, R = out.R;\n for (let i = 0; i < n; i++) { const o = f(i / SR); if (i < lim) { L[start + i]! += o * gl; R[start + i]! += o * gr; } }\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; });\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, 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; }, 1, 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, 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; });\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; });\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, 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, 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;\n }, 0.85, 1.15);\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. */\n/** `reverb` in slices: it yields how far it is (0..1) every 16384 samples, so a caller can hand control back to the page. */\nexport function* reverbSteps(send: Bus, out: Bus, wet: number, size = 0.8): Generator<number, void, 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 chL = mk(0), chR = mk(23);\n const block = (i: number, stop: number): void => {\n for (; i < stop; i++) {\n const m = (sL[i]! + sR[i]!) * 0.5;\n L[i]! += runFlat(m, chL) * wet; R[i]! += runFlat(m, chR) * wet;\n }\n };\n for (let i = 0; i < L.length; ) {\n yield i / L.length;\n const stop = Math.min(L.length, (i | 16383) + 1);\n block(i, stop);\n i = stop;\n }\n}\n\nfunction runFlat(x: number, ch: { c: { b: Float32Array; i: number; fb: number; d: number; damp: number }[]; a: { b: Float32Array; i: number }[] }): number {\n let y = 0;\n const cs = ch.c, as = ch.a;\n for (let k = 0; k < 6; k++) {\n const c = cs[k]!, b = c.b;\n const o = b[c.i]!;\n c.d = o * (1 - c.damp) + c.d * c.damp;\n b[c.i] = x * 0.03 + c.d * c.fb;\n c.i = c.i + 1 === b.length ? 0 : c.i + 1;\n y += o;\n }\n for (let k = 0; k < 3; k++) {\n const a = as[k]!, b = a.b;\n const o = b[a.i]!, inp = y;\n b[a.i] = inp + o * 0.5;\n a.i = a.i + 1 === b.length ? 0 : a.i + 1;\n y = o - inp;\n }\n return y;\n}\nexport function reverb(send: Bus, out: Bus, wet: number, size = 0.8): void {\n for (const _ of reverbSteps(send, out, wet, size)) void _;\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', 'meter', '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 /** Beats in a bar: bar numbers and bar counts only, playback does not use it. */\n meter: number;\n /** The score gave a number as `meter` (when it did not, or gave something else, 4 is only assumed). */\n meterSet: boolean;\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 meter = num('meter', 1, 16, 4);\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, meter, meterSet: finite(o.meter), 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, clearVoiceTables, hitDrum, reverbSteps, 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/** The first and the last index where the bus is not 0 (`[total, -1]` when it is all 0). */\nfunction extent(b: Bus): [number, number] {\n let lo = b.L.length, hi = -1;\n for (let i = 0; i < b.L.length; i++) if (b.L[i] !== 0 || b.R[i] !== 0) { lo = i; break; }\n for (let i = b.L.length - 1; i >= lo; i--) if (b.L[i] !== 0 || b.R[i] !== 0) { hi = i; break; }\n return [lo, hi];\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/** The tone filter (two cascaded biquads per channel) over [i, stop): a plain function, so the loop is not inside the generator. Returns where it stopped. */\nfunction toneRun(scratch: Bus, a: Biquad[], b: Biquad[], i: number, stop: number, end: number): number {\n const L = scratch.L, R = scratch.R;\n const a0 = a[0]!, a1 = a[1]!, b0 = b[0]!, b1 = b[1]!;\n for (; i < stop && (i < end || !(a0.settled() && a1.settled() && b0.settled() && b1.settled())); i++) {\n L[i] = a1.run(a0.run(L[i]!));\n R[i] = b1.run(b0.run(R[i]!));\n }\n return i;\n}\n/** Level, pan and the sends of one track over [i, stop): a plain function for the same reason. */\nfunction mixRun(scratch: Bus, out: Bus, send: Bus, i: number, stop: number, level: (sec: number) => number, constant: boolean, g: number, gl: number, gr: number, rv: number, sampleRate: number): void {\n const sL = scratch.L, sR = scratch.R, oL = out.L, oR = out.R, eL = send.L, eR = send.R;\n for (; i < stop; i++) {\n if (!constant) g = level(i / sampleRate);\n const l = sL[i]! * g * gl, r = sR[i]! * g * gr;\n oL[i]! += l; oR[i]! += r;\n eL[i]! += l * rv; eR[i]! += r * rv;\n }\n}\nfunction tanhRun(out: Bus, i: number, stop: number, acc: Float64Array): void {\n const L = out.L, R = out.R;\n let peak = acc[0]!, sum = acc[1]!;\n for (; i < stop; i++) {\n const l = (L[i] = Math.tanh(L[i]! * 0.9)), r = (R[i] = Math.tanh(R[i]! * 0.9));\n peak = Math.max(peak, Math.abs(l), Math.abs(r));\n sum += l * l + r * r;\n }\n acc[0] = peak; acc[1] = sum;\n}\n\n/** The music as a sequence of slices: each `yield` is how much is done (0..1); the return value is the samples. */\nfunction* renderMusicSteps(m: ResolvedMusic, sampleRate: number, length: number, loop: boolean): Generator<number, [Float32Array, Float32Array], void> {\n setSampleRate(sampleRate);\n // work is counted in units (a track, the drums, the reverb, the last pass): a yield says how many are done, as 0..1\n const units = m.tracks.length + (m.drums.length ? 1 : 0) + 2;\n let unit = 0;\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 // played in order (a render asks for seconds that only rise) the segment is found by moving on, not by searching from the start\n if (!loop && pts.every((p, i) => i === 0 || p[0] >= pts[i - 1]![0])) {\n let j = 1;\n return sec => {\n if (sec <= pts[0]![0]) return pts[0]![1];\n while (j < pts.length && !(sec < pts[j]![0])) j++;\n if (j < pts.length) return pts[j - 1]![1] + ((pts[j]![1] - pts[j - 1]![1]) * (sec - pts[j - 1]![0])) / (pts[j]![0] - pts[j - 1]![0]);\n return pts[pts.length - 1]![1];\n };\n }\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 for (let r = 0; r < repeats; r++) {\n const offset = r * loopSec;\n for (let ei = 0; ei < tr.events.length; ei++) {\n const e = tr.events[ei]!;\n yield (unit + ei / tr.events.length) / units;\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 // where the track made sound: before and after it the scratch bus is exactly 0, so nothing there is filtered or mixed\n const [lo, hi] = extent(scratch);\n let end = hi + 1;\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 let i = lo;\n // up to the last sound, then until the filter has run out (what it gives from there on is 0 in a Float32Array)\n for (;;) {\n const stop = Math.min(total, (i | 65535) + 1);\n const j = toneRun(scratch, a, b, i, stop, end);\n if (j < stop || j >= total) { i = j; break; }\n i = j; yield (unit + 0.9) / units;\n }\n end = Math.max(end, i);\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 = lo; i < end; ) {\n const stop = Math.min(end, (i | 65535) + 1);\n mixRun(scratch, out, send, i, stop, level, constant, g, gl, gr, tr.reverb, sampleRate);\n i = stop; yield (unit + 0.95) / units;\n }\n scratch.L.fill(0, lo, end); scratch.R.fill(0, lo, end);\n unit++;\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 yield unit / units;\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 unit++;\n }\n\n for (const f of reverbSteps(send, out, m.reverb, 0.8)) yield (unit + f) / units;\n unit++;\n const acc = new Float64Array(2);\n for (let i = 0; i < total; ) {\n const stop = Math.min(total, (i | 65535) + 1);\n tanhRun(out, i, stop, acc);\n i = stop; yield (unit + (0.5 * i) / total) / units;\n }\n const peak = acc[0]!, sum = acc[1]!;\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 clearVoiceTables();\n return [out.L, out.R];\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 const it = renderMusicSteps(m, sampleRate, length, loop);\n for (;;) { const r = it.next(); if (r.done) return r.value; }\n}\n\n/** The same samples, made in slices: `pace(done)` (0..1) runs between them and may wait, so the page can paint while a long piece is made. */\nexport async function renderMusicAsync(\n m: ResolvedMusic, sampleRate: number, length: number, loop = false, pace?: (done: number) => Promise<void> | void,\n): Promise<[Float32Array, Float32Array]> {\n const it = renderMusicSteps(m, sampleRate, length, loop);\n for (;;) {\n const r = it.next();\n if (r.done) return r.value;\n if (pace) await pace(r.value);\n }\n}\n\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkDOLTCXCL_cjs = require('./chunk-DOLTCXCL.cjs');
|
|
4
4
|
var chunk4LEX3G3M_cjs = require('./chunk-4LEX3G3M.cjs');
|
|
5
5
|
|
|
6
6
|
// src/audio/music/instruments.ts
|
|
@@ -478,7 +478,7 @@ function resolveMusic(music, who, warn = defaultWarn) {
|
|
|
478
478
|
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)" : ""}`);
|
|
479
479
|
else rest[k] = v;
|
|
480
480
|
}
|
|
481
|
-
|
|
481
|
+
chunkDOLTCXCL_cjs.warnUnknownOptions(`${who} music`, rest, OPTION_KEYS);
|
|
482
482
|
const num = (key, lo, hi, fallback) => {
|
|
483
483
|
const v = o[key];
|
|
484
484
|
if (v === void 0) return fallback;
|
|
@@ -523,11 +523,11 @@ function resolveMusic(music, who, warn = defaultWarn) {
|
|
|
523
523
|
return;
|
|
524
524
|
}
|
|
525
525
|
const t = raw;
|
|
526
|
-
|
|
526
|
+
chunkDOLTCXCL_cjs.warnUnknownOptions(where, t, TRACK_KEYS);
|
|
527
527
|
const name = String(t.inst);
|
|
528
528
|
let inst = INSTRUMENTS.includes(name) ? name : null;
|
|
529
529
|
if (!inst) {
|
|
530
|
-
const guess = INSTRUMENT_ALIASES[name.toLowerCase().replace(/\s+/g, "")] ??
|
|
530
|
+
const guess = INSTRUMENT_ALIASES[name.toLowerCase().replace(/\s+/g, "")] ?? chunkDOLTCXCL_cjs.suggestName(name, INSTRUMENTS);
|
|
531
531
|
warn(`pixi-effects: ${where}: unknown instrument "${name}"${guess ? ` \u2014 did you mean "${guess}"?` : ""} (instruments: ${INSTRUMENTS.join(", ")}). The track is skipped.`);
|
|
532
532
|
return;
|
|
533
533
|
}
|
|
@@ -598,7 +598,7 @@ function resolveMusic(music, who, warn = defaultWarn) {
|
|
|
598
598
|
if (key === "from" || key === "to") continue;
|
|
599
599
|
const kind = DRUMS.includes(key) ? key : null;
|
|
600
600
|
if (!kind) {
|
|
601
|
-
const guess = DRUM_ALIASES[key.toLowerCase()] ??
|
|
601
|
+
const guess = DRUM_ALIASES[key.toLowerCase()] ?? chunkDOLTCXCL_cjs.suggestName(key, DRUMS);
|
|
602
602
|
warn(`pixi-effects: ${where}: unknown drum "${key}"${guess ? ` \u2014 did you mean "${guess}"?` : ""} (drums: ${DRUMS.join(", ")}, and from / to). It is skipped.`);
|
|
603
603
|
continue;
|
|
604
604
|
}
|
|
@@ -907,5 +907,5 @@ exports.musicLength = musicLength;
|
|
|
907
907
|
exports.renderMusic = renderMusic;
|
|
908
908
|
exports.renderMusicAsync = renderMusicAsync;
|
|
909
909
|
exports.resolveMusic = resolveMusic;
|
|
910
|
-
//# sourceMappingURL=music-
|
|
911
|
-
//# sourceMappingURL=music-
|
|
910
|
+
//# sourceMappingURL=music-XQEPBIDT.cjs.map
|
|
911
|
+
//# sourceMappingURL=music-XQEPBIDT.cjs.map
|