zx-kit 0.39.0 → 0.41.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/attrscreen.d.ts +22 -1
- package/dist/attrscreen.d.ts.map +1 -1
- package/dist/attrscreen.js +34 -1
- package/dist/attrscreen.js.map +1 -1
- package/dist/audio.d.ts +26 -0
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +64 -2
- package/dist/audio.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -185,7 +185,7 @@ Zero runtime dependencies, `sideEffects: false`, fully tree-shakeable.
|
|
|
185
185
|
| `monoscreen` | Opt-in monochrome playfield + colour HUD (clash-proof) | [rendering](docs/rendering.md#monoscreents--monochrome-playfield) |
|
|
186
186
|
| `tilescroll` | Pixel-smooth sub-tile tilemap scrolling | [rendering](docs/rendering.md#tilescrollts--pixel-smooth-scrolling) |
|
|
187
187
|
| `lighting` | Dithered cave darkness, one blit per frame | [rendering](docs/rendering.md#lightingts--dithered-cave-darkness) |
|
|
188
|
-
| `audio` | 1-bit beeper: square-wave notes, patterns, stereo pan, volume + built-in auto-hide volume bar | [audio](docs/audio.md#audiots--beeper-audio) |
|
|
188
|
+
| `audio` | 1-bit beeper: square-wave notes, patterns, instant cut, stereo pan, volume + built-in auto-hide volume bar | [audio](docs/audio.md#audiots--beeper-audio) |
|
|
189
189
|
| `ay` | AY-3-8912: 3-channel tone, LFSR noise, 16 envelopes, per-channel stereo pan + volume | [audio](docs/audio.md#ayts--ay-3-8912-melodik-audio) |
|
|
190
190
|
| `aydump` | Real ZX-scene tunes: PSG register-dump player, sample-accurate AudioWorklet chip emulator | [audio](docs/audio.md#aydump--real-zx-scene-tunes-psg-register-dumps--experimental-037) |
|
|
191
191
|
| `music` | AY music by note name (`A5`, `C#4`) + looping | [audio](docs/audio.md#musicts--note-name-ay-music) |
|
|
@@ -225,8 +225,8 @@ zx-kit/
|
|
|
225
225
|
│ ├── monoscreen.ts # createMonoScreen, drawMonoBitmap, flushMonoScreen (anti-clash)
|
|
226
226
|
│ ├── lighting.ts # createDarknessLayer, renderDarkness (dithered darkness)
|
|
227
227
|
│ ├── audio.ts # beeper: initAudio, resumeAudio, beep (stereo pan), playPattern,
|
|
228
|
-
│ │ # getAudioContext, getMasterGain, getMasterVolume,
|
|
229
|
-
│ │ # increaseVolume, decreaseVolume, Note,
|
|
228
|
+
│ │ # stopBeep, getAudioContext, getMasterGain, getMasterVolume,
|
|
229
|
+
│ │ # setMasterVolume, increaseVolume, decreaseVolume, Note,
|
|
230
230
|
│ │ # setVolumeBarStyle, drawVolumeBar
|
|
231
231
|
│ ├── ay.ts # AY-3-8912: createAY, playAY, AYChannel, AYNote, AYChip,
|
|
232
232
|
│ │ # AYHandle, AYStereoMode (pan / setStereoMode / volume / fade),
|
package/dist/attrscreen.d.ts
CHANGED
|
@@ -58,6 +58,10 @@ export interface AttrScreen {
|
|
|
58
58
|
readonly cellInk: Uint32Array;
|
|
59
59
|
/** Packed RGBA paper colour per cell, `cols*rows`. */
|
|
60
60
|
readonly cellPaper: Uint32Array;
|
|
61
|
+
/** Per-cell **GLOW** flag — `1` = emissive light source (opt-in, like the FLASH
|
|
62
|
+
* attribute bit). Set by `stampMono(..., glow=true)`; `0` otherwise. The normal
|
|
63
|
+
* clash flush ignores it; {@link drawAttrGlowSources} feeds it to `glow.ts`. */
|
|
64
|
+
readonly cellGlow: Uint8Array;
|
|
61
65
|
/** Resolved RGBA frame buffer (`width*height*4`), filled by {@link flushAttrScreen}. */
|
|
62
66
|
readonly rgba: Uint8ClampedArray;
|
|
63
67
|
/** Reusable `ImageData` backing {@link rgba} (`null` when headless). */
|
|
@@ -83,8 +87,25 @@ export declare function clearAttrScreen(scr: AttrScreen, paper: SpectrumColor, i
|
|
|
83
87
|
* the pixel plane and re-attributes every cell that receives a lit pixel, per
|
|
84
88
|
* `policy` (default `'both'`). Lit-pixel-only: existing pixels are never cleared,
|
|
85
89
|
* so other sprites/background in a touched cell bleed to the new colour.
|
|
90
|
+
*
|
|
91
|
+
* **`glow`** (default `false`, opt-in): also flags every cell this stamp touches as
|
|
92
|
+
* an emissive GLOW source ({@link AttrScreen.cellGlow}), for `glow.ts`'s bloom via
|
|
93
|
+
* {@link drawAttrGlowSources}. Leaving it `false` is byte-for-byte the old behaviour.
|
|
94
|
+
*/
|
|
95
|
+
export declare function stampMono(scr: AttrScreen, bitmap: Bitmap, x: number, y: number, ink: SpectrumColor, paper: SpectrumColor, policy?: AttrPolicy, glow?: boolean): void;
|
|
96
|
+
/**
|
|
97
|
+
* Draws every {@link AttrScreen.cellGlow}-flagged cell as a solid 8×8 block in its
|
|
98
|
+
* ink colour into the emissive context `g`. Use it as the `drawSources` callback of
|
|
99
|
+
* `glow.ts`'s `renderGlow`, so an attribute screen's glow cells feed the bloom.
|
|
100
|
+
* Cell-level, exactly like the FLASH bit — the whole flagged cell is the light
|
|
101
|
+
* source. Draws nothing when no cell is flagged; needs no canvas of its own.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* renderGlow(glowLayer, ctx, (g) => drawAttrGlowSources(scr, g))
|
|
106
|
+
* ```
|
|
86
107
|
*/
|
|
87
|
-
export declare function
|
|
108
|
+
export declare function drawAttrGlowSources(scr: AttrScreen, g: CanvasRenderingContext2D): void;
|
|
88
109
|
/**
|
|
89
110
|
* Resolves the two planes into RGBA (each pixel takes its cell's ink or paper)
|
|
90
111
|
* and uploads the result with one `putImageData` + `drawImage`. The image is
|
package/dist/attrscreen.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attrscreen.d.ts","sourceRoot":"","sources":["../src/attrscreen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAA;AAE3D,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;IAC/B,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAChC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAC1C;AAqBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAK,EAAE,IAAI,SAAK,GAAG,UAAU,
|
|
1
|
+
{"version":3,"file":"attrscreen.d.ts","sourceRoot":"","sources":["../src/attrscreen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAQ,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAE3C;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,UAAU,GAAG,YAAY,CAAA;AAE3D,+EAA+E;AAC/E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8EAA8E;IAC9E,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAA;IAC/B;;qFAEiF;IACjF,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAA;IAC7B,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;IAChC,wEAAwE;IACxE,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAA;IAChC,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAC1C;AAqBD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,SAAK,EAAE,IAAI,SAAK,GAAG,UAAU,CAkCjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,GAAE,aAAqB,GAAG,IAAI,CAKvG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CACvB,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,MAAM,EACd,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,aAAa,EACpB,MAAM,GAAE,UAAmB,EAC3B,IAAI,UAAQ,GACX,IAAI,CAgCN;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,wBAAwB,GAAG,IAAI,CAWtF;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,wBAAwB,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAoBpF"}
|
package/dist/attrscreen.js
CHANGED
|
@@ -89,6 +89,7 @@ export function createAttrScreen(cols = 32, rows = 24) {
|
|
|
89
89
|
pixels: new Uint8Array(width * height),
|
|
90
90
|
cellInk: new Uint32Array(cols * rows),
|
|
91
91
|
cellPaper: new Uint32Array(cols * rows),
|
|
92
|
+
cellGlow: new Uint8Array(cols * rows),
|
|
92
93
|
rgba,
|
|
93
94
|
image,
|
|
94
95
|
canvas,
|
|
@@ -103,6 +104,7 @@ export function clearAttrScreen(scr, paper, ink = paper) {
|
|
|
103
104
|
scr.pixels.fill(0);
|
|
104
105
|
scr.cellPaper.fill(hexToU32(paper));
|
|
105
106
|
scr.cellInk.fill(hexToU32(ink));
|
|
107
|
+
scr.cellGlow.fill(0); // glow is per-frame opt-in — nothing glows until a stamp sets it
|
|
106
108
|
}
|
|
107
109
|
/**
|
|
108
110
|
* Stamps a monochrome {@link Bitmap} at screen pixel `(x, y)` (rounded; may be
|
|
@@ -110,8 +112,12 @@ export function clearAttrScreen(scr, paper, ink = paper) {
|
|
|
110
112
|
* the pixel plane and re-attributes every cell that receives a lit pixel, per
|
|
111
113
|
* `policy` (default `'both'`). Lit-pixel-only: existing pixels are never cleared,
|
|
112
114
|
* so other sprites/background in a touched cell bleed to the new colour.
|
|
115
|
+
*
|
|
116
|
+
* **`glow`** (default `false`, opt-in): also flags every cell this stamp touches as
|
|
117
|
+
* an emissive GLOW source ({@link AttrScreen.cellGlow}), for `glow.ts`'s bloom via
|
|
118
|
+
* {@link drawAttrGlowSources}. Leaving it `false` is byte-for-byte the old behaviour.
|
|
113
119
|
*/
|
|
114
|
-
export function stampMono(scr, bitmap, x, y, ink, paper, policy = 'both') {
|
|
120
|
+
export function stampMono(scr, bitmap, x, y, ink, paper, policy = 'both', glow = false) {
|
|
115
121
|
const inkU32 = hexToU32(ink);
|
|
116
122
|
const paperU32 = hexToU32(paper);
|
|
117
123
|
const setInk = policy !== 'paper-only';
|
|
@@ -144,10 +150,37 @@ export function stampMono(scr, bitmap, x, y, ink, paper, policy = 'both') {
|
|
|
144
150
|
scr.cellInk[cell] = inkU32;
|
|
145
151
|
if (setPaper)
|
|
146
152
|
scr.cellPaper[cell] = paperU32;
|
|
153
|
+
if (glow)
|
|
154
|
+
scr.cellGlow[cell] = 1;
|
|
147
155
|
}
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Draws every {@link AttrScreen.cellGlow}-flagged cell as a solid 8×8 block in its
|
|
161
|
+
* ink colour into the emissive context `g`. Use it as the `drawSources` callback of
|
|
162
|
+
* `glow.ts`'s `renderGlow`, so an attribute screen's glow cells feed the bloom.
|
|
163
|
+
* Cell-level, exactly like the FLASH bit — the whole flagged cell is the light
|
|
164
|
+
* source. Draws nothing when no cell is flagged; needs no canvas of its own.
|
|
165
|
+
*
|
|
166
|
+
* @example
|
|
167
|
+
* ```ts
|
|
168
|
+
* renderGlow(glowLayer, ctx, (g) => drawAttrGlowSources(scr, g))
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export function drawAttrGlowSources(scr, g) {
|
|
172
|
+
const { cellGlow, cellInk, cols, rows } = scr;
|
|
173
|
+
for (let row = 0; row < rows; row++) {
|
|
174
|
+
for (let col = 0; col < cols; col++) {
|
|
175
|
+
const cell = row * cols + col;
|
|
176
|
+
if (!cellGlow[cell])
|
|
177
|
+
continue;
|
|
178
|
+
const u = cellInk[cell]; // packed little-endian RGBA (a<<24 | b<<16 | g<<8 | r)
|
|
179
|
+
g.fillStyle = `rgba(${u & 0xff},${(u >> 8) & 0xff},${(u >> 16) & 0xff},${((u >>> 24) & 0xff) / 255})`;
|
|
180
|
+
g.fillRect(col * CELL, row * CELL, CELL, CELL);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
151
184
|
/**
|
|
152
185
|
* Resolves the two planes into RGBA (each pixel takes its cell's ink or paper)
|
|
153
186
|
* and uploads the result with one `putImageData` + `drawImage`. The image is
|
package/dist/attrscreen.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attrscreen.js","sourceRoot":"","sources":["../src/attrscreen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,OAAO,EAAE,IAAI,EAAsB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"attrscreen.js","sourceRoot":"","sources":["../src/attrscreen.ts"],"names":[],"mappings":"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"}
|
package/dist/audio.d.ts
CHANGED
|
@@ -180,4 +180,30 @@ export declare function playPattern(notes: Note[], startDelay?: number): void;
|
|
|
180
180
|
* beep(880, 80, audio.currentTime + 0.15) // second note 150ms later
|
|
181
181
|
*/
|
|
182
182
|
export declare function beep(freq: number, durationMs: number, startTime: number, pan?: number): void;
|
|
183
|
+
/**
|
|
184
|
+
* Silences the beeper **immediately** — the tone sounding right now and every note
|
|
185
|
+
* already queued behind it. The Spectrum had one speaker bit: a new sound replaced
|
|
186
|
+
* whatever was playing, it never mixed. This is that behaviour, on demand.
|
|
187
|
+
*
|
|
188
|
+
* `playPattern` schedules its whole melody onto the audio timeline up front, so a
|
|
189
|
+
* jingle keeps playing even after the game has moved on. Call this when the game
|
|
190
|
+
* decides the old sound no longer matters — a keypress cutting the intro fanfare,
|
|
191
|
+
* a scene change, an accessibility "quiet now".
|
|
192
|
+
*
|
|
193
|
+
* A tone that is already sounding is released over 5 ms rather than cut dead;
|
|
194
|
+
* chopping a square wave mid-cycle produces an audible click. Notes still queued
|
|
195
|
+
* in the future never sound at all. Safe to call when nothing is playing, and
|
|
196
|
+
* before {@link initAudio} (no-op).
|
|
197
|
+
*
|
|
198
|
+
* Beeper only — AY music runs on its own voices and is untouched. Stop that with
|
|
199
|
+
* `ay.stop()` from `ay.js`.
|
|
200
|
+
*
|
|
201
|
+
* @example
|
|
202
|
+
* // Intro jingle stops the moment the player takes their first step
|
|
203
|
+
* playPattern(STARTUP_JINGLE)
|
|
204
|
+
* // …later, in the input handler:
|
|
205
|
+
* stopBeep()
|
|
206
|
+
* playPattern(FOOTSTEP)
|
|
207
|
+
*/
|
|
208
|
+
export declare function stopBeep(): void;
|
|
183
209
|
//# sourceMappingURL=audio.d.ts.map
|
package/dist/audio.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAyCjD;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,MAAM,SAAM,GAAG,IAAI,CAM5C;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,QAAQ,GAAG,IAAI,CAE/C;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGpD;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAwBD,wDAAwD;AACxD,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,CAAC,CAAC,EAAE,MAAM,CAAA;IACV,mEAAmE;IACnE,CAAC,CAAC,EAAE,MAAM,CAAA;CACX;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,qBAA0B,GAAG,IAAI,CAKxE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,wBAAwB,GAAG,IAAI,CAuBvE;AAED,6EAA6E;AAC7E,MAAM,WAAW,IAAI;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,SAAI,GAAG,IAAI,CAS/D;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,SAAI,GAAG,IAAI,CA6BvF;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,QAAQ,IAAI,IAAI,CAkB/B"}
|
package/dist/audio.js
CHANGED
|
@@ -26,6 +26,16 @@ const VOLUME_STEP = 0.1;
|
|
|
26
26
|
let _volumeChangedAt = 0;
|
|
27
27
|
/** How long {@link drawVolumeBar} keeps the bar visible after a change (ms). */
|
|
28
28
|
const VOLUME_BAR_MS = 1500;
|
|
29
|
+
/**
|
|
30
|
+
* Attack/release ramp in seconds. Long enough to kill the click of a square wave
|
|
31
|
+
* cut at an arbitrary phase, short enough that the ear reads it as instant.
|
|
32
|
+
*/
|
|
33
|
+
const RAMP_S = 0.005;
|
|
34
|
+
/**
|
|
35
|
+
* Every beeper voice currently sounding or queued ahead. Entries remove themselves
|
|
36
|
+
* when their tone ends, so the set stays bounded without any housekeeping call.
|
|
37
|
+
*/
|
|
38
|
+
const voices = new Set();
|
|
29
39
|
function clampVolume(v) {
|
|
30
40
|
return Math.max(0, Math.min(1, v));
|
|
31
41
|
}
|
|
@@ -257,8 +267,8 @@ export function beep(freq, durationMs, startTime, pan = 0) {
|
|
|
257
267
|
osc.type = 'square';
|
|
258
268
|
osc.frequency.value = freq;
|
|
259
269
|
gain.gain.setValueAtTime(0, startTime);
|
|
260
|
-
gain.gain.linearRampToValueAtTime(0.8, startTime +
|
|
261
|
-
gain.gain.setValueAtTime(0.8, startTime + durationMs / 1000 -
|
|
270
|
+
gain.gain.linearRampToValueAtTime(0.8, startTime + RAMP_S);
|
|
271
|
+
gain.gain.setValueAtTime(0.8, startTime + durationMs / 1000 - RAMP_S);
|
|
262
272
|
gain.gain.linearRampToValueAtTime(0, startTime + durationMs / 1000);
|
|
263
273
|
osc.connect(gain);
|
|
264
274
|
// pan = 0 (centre) keeps the original graph (gain → master); a non-zero pan
|
|
@@ -272,7 +282,59 @@ export function beep(freq, durationMs, startTime, pan = 0) {
|
|
|
272
282
|
else {
|
|
273
283
|
gain.connect(masterGain);
|
|
274
284
|
}
|
|
285
|
+
// Registered so stopBeep() can reach it; the voice unregisters itself on end.
|
|
286
|
+
const voice = { osc, gain, startTime };
|
|
287
|
+
voices.add(voice);
|
|
288
|
+
osc.onended = () => {
|
|
289
|
+
voices.delete(voice);
|
|
290
|
+
};
|
|
275
291
|
osc.start(startTime);
|
|
276
292
|
osc.stop(startTime + durationMs / 1000 + 0.01);
|
|
277
293
|
}
|
|
294
|
+
/**
|
|
295
|
+
* Silences the beeper **immediately** — the tone sounding right now and every note
|
|
296
|
+
* already queued behind it. The Spectrum had one speaker bit: a new sound replaced
|
|
297
|
+
* whatever was playing, it never mixed. This is that behaviour, on demand.
|
|
298
|
+
*
|
|
299
|
+
* `playPattern` schedules its whole melody onto the audio timeline up front, so a
|
|
300
|
+
* jingle keeps playing even after the game has moved on. Call this when the game
|
|
301
|
+
* decides the old sound no longer matters — a keypress cutting the intro fanfare,
|
|
302
|
+
* a scene change, an accessibility "quiet now".
|
|
303
|
+
*
|
|
304
|
+
* A tone that is already sounding is released over 5 ms rather than cut dead;
|
|
305
|
+
* chopping a square wave mid-cycle produces an audible click. Notes still queued
|
|
306
|
+
* in the future never sound at all. Safe to call when nothing is playing, and
|
|
307
|
+
* before {@link initAudio} (no-op).
|
|
308
|
+
*
|
|
309
|
+
* Beeper only — AY music runs on its own voices and is untouched. Stop that with
|
|
310
|
+
* `ay.stop()` from `ay.js`.
|
|
311
|
+
*
|
|
312
|
+
* @example
|
|
313
|
+
* // Intro jingle stops the moment the player takes their first step
|
|
314
|
+
* playPattern(STARTUP_JINGLE)
|
|
315
|
+
* // …later, in the input handler:
|
|
316
|
+
* stopBeep()
|
|
317
|
+
* playPattern(FOOTSTEP)
|
|
318
|
+
*/
|
|
319
|
+
export function stopBeep() {
|
|
320
|
+
if (!ctx)
|
|
321
|
+
return;
|
|
322
|
+
const now = ctx.currentTime;
|
|
323
|
+
for (const voice of voices) {
|
|
324
|
+
const { osc, gain } = voice;
|
|
325
|
+
gain.gain.cancelScheduledValues(now);
|
|
326
|
+
if (voice.startTime > now) {
|
|
327
|
+
// Queued but never sounded — drop it outright, there is no click to guard against.
|
|
328
|
+
gain.gain.setValueAtTime(0, now);
|
|
329
|
+
osc.stop(now);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
// Mid-tone — reuse the same 5 ms release the envelope would have ended on.
|
|
333
|
+
gain.gain.setValueAtTime(gain.gain.value, now);
|
|
334
|
+
gain.gain.linearRampToValueAtTime(0, now + RAMP_S);
|
|
335
|
+
osc.stop(now + RAMP_S);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
voices.clear();
|
|
339
|
+
}
|
|
278
340
|
//# sourceMappingURL=audio.js.map
|
package/dist/audio.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
|