zx-kit 0.9.2 → 0.10.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/dist/ay.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ /** ZX Spectrum 128K / Melodik AY-3-8912 master clock. */
2
+ export declare const AY_CLOCK = 1773400;
3
+ /**
4
+ * Hardware-accurate logarithmic amplitude table.
5
+ * The real chip uses ≈ √2 steps per level (≈ 3 dB).
6
+ * Index 0 = silence, index 15 = full amplitude.
7
+ */
8
+ export declare const AY_VOL: readonly number[];
9
+ export type AYChannel = 'A' | 'B' | 'C';
10
+ /** One note in an AY sequencer pattern. */
11
+ export interface AYNote {
12
+ /** Frequency in Hz. 0 = rest (silence). */
13
+ freq: number;
14
+ /** Duration in milliseconds. */
15
+ dur: number;
16
+ /** Amplitude 0–15. Default 15. Ignored when envShape is set. */
17
+ vol?: number;
18
+ /** Mix LFSR noise alongside the tone. Default false. */
19
+ noise?: boolean;
20
+ /** Noise period 1–31 (maps to R6). Higher = darker texture. Default 8. */
21
+ noisePeriod?: number;
22
+ /** Envelope shape 0–15 (R13). When set, vol is ignored. */
23
+ envShape?: number;
24
+ /** Envelope cycle duration in ms (one ramp: 0→15 or 15→0). Default = note duration. */
25
+ envCycleDurMs?: number;
26
+ }
27
+ /** Real-time AY chip handle returned by `createAY()`. */
28
+ export interface AYChip {
29
+ /** Set channel tone + volume (vol 0–15). freq ≤ 0 silences the tone generator. */
30
+ tone(ch: AYChannel, freq: number, vol?: number): void;
31
+ /** Enable LFSR noise on a channel. period 1–31 (R6): higher = darker texture. */
32
+ enableNoise(ch: AYChannel, period?: number): void;
33
+ /** Disable noise on a channel. */
34
+ disableNoise(ch: AYChannel): void;
35
+ /**
36
+ * Apply an AY envelope to a channel's amplitude.
37
+ * shape 0–15 maps to the 16 AY-3-8912 envelope shapes (see `AY_ENVELOPE_SHAPES`).
38
+ * cycleDurMs: time in ms for one ramp (15→0 or 0→15).
39
+ * Repeating shapes are pre-scheduled for 32 cycles — call again to extend.
40
+ */
41
+ envelope(ch: AYChannel, shape: number, cycleDurMs: number): void;
42
+ /** Fade out a channel (tone + noise). */
43
+ mute(ch: AYChannel): void;
44
+ /** Fade out all three channels. */
45
+ muteAll(): void;
46
+ /** Stop all oscillators / sources and release Web Audio nodes. */
47
+ stop(): void;
48
+ }
49
+ /**
50
+ * Human-readable names for the 16 AY envelope shapes.
51
+ * Index = R13 value. Useful for documentation and tooling.
52
+ */
53
+ export declare const AY_ENVELOPE_SHAPES: readonly ["\\_ ", "\\_ ", "\\_ ", "\\_ ", "/_ ", "/_ ", "/_ ", "/_ ", "\\\\", "\\_", "\\/\\/", "\\‾", "//", "/‾", "/\\/\\", "/_"];
54
+ /**
55
+ * Creates three persistent AY channels wired to the zx-kit master gain.
56
+ * Each channel has independent tone (square wave), noise (LFSR), and envelope.
57
+ *
58
+ * Must be called inside a user-gesture handler due to browser autoplay policy.
59
+ *
60
+ * @example
61
+ * button.addEventListener('click', () => {
62
+ * const ay = createAY()
63
+ * ay.tone('A', 440, 12)
64
+ * ay.enableNoise('B', 16)
65
+ * ay.envelope('C', 10, 400) // shape 10 = \/\/ triangle
66
+ * ay.tone('C', 220, 0) // tone silent; only envelope-modulated noise
67
+ * })
68
+ */
69
+ export declare function createAY(): AYChip;
70
+ /**
71
+ * Pre-schedules up to three independent AY note arrays on the shared AudioContext.
72
+ * All channels start at the same wall-clock time; shorter channels finish earlier.
73
+ * Fire-and-forget — no handle returned.
74
+ *
75
+ * Each `AYNote` may optionally mix in LFSR noise and/or apply an envelope shape.
76
+ *
77
+ * @example
78
+ * playAY({
79
+ * a: [{ freq: 440, dur: 300 }, { freq: 523, dur: 300, envShape: 12, envCycleDurMs: 150 }],
80
+ * b: [{ freq: 110, dur: 200, noise: true, noisePeriod: 16 }],
81
+ * c: [{ freq: 0, dur: 600, noise: true, noisePeriod: 4, envShape: 8, envCycleDurMs: 100 }],
82
+ * })
83
+ */
84
+ export declare function playAY(pattern: {
85
+ a?: AYNote[];
86
+ b?: AYNote[];
87
+ c?: AYNote[];
88
+ }, startDelay?: number): void;
89
+ //# sourceMappingURL=ay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ay.d.ts","sourceRoot":"","sources":["../src/ay.ts"],"names":[],"mappings":"AAIA,yDAAyD;AACzD,eAAO,MAAM,QAAQ,UAAY,CAAA;AAEjC;;;;GAIG;AACH,eAAO,MAAM,MAAM,EAAE,SAAS,MAAM,EAGnC,CAAA;AAWD,MAAM,MAAM,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAEvC,2CAA2C;AAC3C,MAAM,WAAW,MAAM;IACrB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAA;IACZ,gCAAgC;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,0EAA0E;IAC1E,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uFAAuF;IACvF,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,yDAAyD;AACzD,MAAM,WAAW,MAAM;IACrB,kFAAkF;IAClF,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrD,kFAAkF;IAClF,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjD,kCAAkC;IAClC,YAAY,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACjC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAChE,yCAAyC;IACzC,IAAI,CAAC,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACzB,mCAAmC;IACnC,OAAO,IAAI,IAAI,CAAA;IACf,kEAAkE;IAClE,IAAI,IAAI,IAAI,CAAA;CACb;AAED;;;GAGG;AACH,eAAO,MAAM,kBAAkB,mIAWrB,CAAA;AAwFV;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CA6GjC;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,MAAM,CACpB,OAAO,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EACrD,UAAU,SAAI,GACb,IAAI,CA+EN"}
package/dist/ay.js ADDED
@@ -0,0 +1,300 @@
1
+ import { initAudio, getMasterGain } from './audio.js';
2
+ // ─── Hardware constants ────────────────────────────────────────────────────────
3
+ /** ZX Spectrum 128K / Melodik AY-3-8912 master clock. */
4
+ export const AY_CLOCK = 1_773_400;
5
+ /**
6
+ * Hardware-accurate logarithmic amplitude table.
7
+ * The real chip uses ≈ √2 steps per level (≈ 3 dB).
8
+ * Index 0 = silence, index 15 = full amplitude.
9
+ */
10
+ export const AY_VOL = [
11
+ 0, 0.0089, 0.0118, 0.0156, 0.0211, 0.0289, 0.0403, 0.0549,
12
+ 0.0744, 0.1060, 0.1518, 0.2139, 0.2969, 0.4259, 0.6098, 1.0,
13
+ ];
14
+ // Headroom so three simultaneous channels don't clip the master bus.
15
+ const CH_GAIN = 0.28;
16
+ function ayVol(level) {
17
+ return AY_VOL[Math.max(0, Math.min(15, level))] * CH_GAIN;
18
+ }
19
+ /**
20
+ * Human-readable names for the 16 AY envelope shapes.
21
+ * Index = R13 value. Useful for documentation and tooling.
22
+ */
23
+ export const AY_ENVELOPE_SHAPES = [
24
+ '\\_ ', '\\_ ', '\\_ ', '\\_ ', // 0-3 decay, hold low
25
+ '/_ ', '/_ ', '/_ ', '/_ ', // 4-7 attack, hold low
26
+ '\\\\', // 8 repeat decay (sawtooth down)
27
+ '\\_', // 9 decay, hold low
28
+ '\\/\\/', // 10 alternate down/up (triangle)
29
+ '\\‾', // 11 decay, hold high
30
+ '//', // 12 repeat attack (sawtooth up)
31
+ '/‾', // 13 attack, hold high
32
+ '/\\/\\', // 14 alternate up/down (triangle)
33
+ '/_', // 15 attack, hold low
34
+ ];
35
+ // ─── LFSR noise buffer ─────────────────────────────────────────────────────────
36
+ // 17-bit LFSR: feedback = bit0 XOR bit2 (matches AY-3-8910 datasheet)
37
+ function makeLFSRBuffer(actx) {
38
+ const len = Math.ceil(actx.sampleRate * 1.5); // 1.5 s loop
39
+ const buf = actx.createBuffer(1, len, actx.sampleRate);
40
+ const data = buf.getChannelData(0);
41
+ let lfsr = 0x1FFFF;
42
+ for (let i = 0; i < len; i++) {
43
+ const bit = (lfsr ^ (lfsr >> 2)) & 1;
44
+ lfsr = (lfsr >> 1) | (bit << 16);
45
+ data[i] = (lfsr & 1) ? 1.0 : -1.0;
46
+ }
47
+ return buf;
48
+ }
49
+ /** Convert AY noise period register (R6, 1–31) to Hz cutoff for the LFSR filter. */
50
+ function noiseCutoffHz(period) {
51
+ return AY_CLOCK / (16 * Math.max(1, Math.min(31, period)));
52
+ }
53
+ // ─── Envelope scheduling ──────────────────────────────────────────────────────
54
+ /**
55
+ * Schedules AY envelope automation on an `AudioParam`.
56
+ *
57
+ * R13 bit layout: bit3=CONT bit2=ATT bit1=ALT bit0=HOLD
58
+ *
59
+ * cycleDur: seconds for one ramp (15→0 or 0→15).
60
+ * numCycles: how many cycles to pre-schedule for repeating shapes.
61
+ */
62
+ function scheduleEnvelope(param, shape, cycleDur, startTime, numCycles = 32) {
63
+ const CONT = (shape >> 3) & 1;
64
+ const ATT = (shape >> 2) & 1;
65
+ const ALT = (shape >> 1) & 1;
66
+ const HOLD = shape & 1;
67
+ const lo = 0;
68
+ const hi = ayVol(15);
69
+ // Cancel any automation already scheduled from startTime onward.
70
+ param.cancelScheduledValues(startTime);
71
+ const ramp = (from, to, t) => {
72
+ param.setValueAtTime(from, t);
73
+ param.linearRampToValueAtTime(to, t + cycleDur);
74
+ };
75
+ if (!CONT) {
76
+ // Shapes 0-7: one-shot, hold at 0 after
77
+ ramp(ATT ? lo : hi, ATT ? hi : lo, startTime);
78
+ param.setValueAtTime(lo, startTime + cycleDur);
79
+ return;
80
+ }
81
+ if (HOLD) {
82
+ // Single cycle, then hold at final level
83
+ if (!ATT) {
84
+ ramp(hi, lo, startTime);
85
+ // Shape 11 (\‾): hold HIGH after decay; Shape 9 (\_): hold LOW
86
+ param.setValueAtTime(ALT ? hi : lo, startTime + cycleDur);
87
+ }
88
+ else {
89
+ ramp(lo, hi, startTime);
90
+ // Shape 15 (/_): hold LOW after attack; Shape 13 (/‾): hold HIGH
91
+ param.setValueAtTime(ALT ? lo : hi, startTime + cycleDur);
92
+ }
93
+ return;
94
+ }
95
+ // Repeating shapes 8, 10, 12, 14 — pre-schedule numCycles ramps
96
+ for (let i = 0; i < numCycles; i++) {
97
+ const t = startTime + i * cycleDur;
98
+ // ATT=base direction; ALT=flip each odd cycle
99
+ const goUp = ALT ? (ATT ? i % 2 === 0 : i % 2 === 1) : ATT === 1;
100
+ ramp(goUp ? lo : hi, goUp ? hi : lo, t);
101
+ }
102
+ }
103
+ // ─── Real-time chip ───────────────────────────────────────────────────────────
104
+ /**
105
+ * Creates three persistent AY channels wired to the zx-kit master gain.
106
+ * Each channel has independent tone (square wave), noise (LFSR), and envelope.
107
+ *
108
+ * Must be called inside a user-gesture handler due to browser autoplay policy.
109
+ *
110
+ * @example
111
+ * button.addEventListener('click', () => {
112
+ * const ay = createAY()
113
+ * ay.tone('A', 440, 12)
114
+ * ay.enableNoise('B', 16)
115
+ * ay.envelope('C', 10, 400) // shape 10 = \/\/ triangle
116
+ * ay.tone('C', 220, 0) // tone silent; only envelope-modulated noise
117
+ * })
118
+ */
119
+ export function createAY() {
120
+ initAudio();
121
+ const master = getMasterGain();
122
+ const actx = master.context;
123
+ const noiseBuf = makeLFSRBuffer(actx);
124
+ const makeChannel = () => {
125
+ const osc = actx.createOscillator();
126
+ const toneGain = actx.createGain();
127
+ osc.type = 'square';
128
+ osc.frequency.value = 440;
129
+ toneGain.gain.value = 0;
130
+ osc.connect(toneGain);
131
+ toneGain.connect(master);
132
+ osc.start();
133
+ const noiseFilter = actx.createBiquadFilter();
134
+ noiseFilter.type = 'lowpass';
135
+ noiseFilter.frequency.value = noiseCutoffHz(8);
136
+ const noiseGain = actx.createGain();
137
+ noiseGain.gain.value = 0;
138
+ noiseFilter.connect(noiseGain);
139
+ noiseGain.connect(master);
140
+ return { osc, toneGain, noiseFilter, noiseGain };
141
+ };
142
+ const chs = {
143
+ A: makeChannel(), B: makeChannel(), C: makeChannel(),
144
+ };
145
+ // One shared LFSR source feeds all three channel noise filters.
146
+ const noiseSrc = actx.createBufferSource();
147
+ noiseSrc.buffer = noiseBuf;
148
+ noiseSrc.loop = true;
149
+ noiseSrc.connect(chs.A.noiseFilter);
150
+ noiseSrc.connect(chs.B.noiseFilter);
151
+ noiseSrc.connect(chs.C.noiseFilter);
152
+ noiseSrc.start();
153
+ return {
154
+ tone(ch, freq, vol = 15) {
155
+ const { osc, toneGain } = chs[ch];
156
+ const now = actx.currentTime;
157
+ toneGain.gain.cancelScheduledValues(now);
158
+ if (freq <= 0) {
159
+ toneGain.gain.setTargetAtTime(0, now, 0.003);
160
+ }
161
+ else {
162
+ osc.frequency.setValueAtTime(freq, now);
163
+ toneGain.gain.setTargetAtTime(ayVol(vol), now, 0.003);
164
+ }
165
+ },
166
+ enableNoise(ch, period = 8) {
167
+ const { noiseFilter, noiseGain } = chs[ch];
168
+ const now = actx.currentTime;
169
+ noiseFilter.frequency.setValueAtTime(noiseCutoffHz(period), now);
170
+ noiseGain.gain.setTargetAtTime(ayVol(15), now, 0.003);
171
+ },
172
+ disableNoise(ch) {
173
+ chs[ch].noiseGain.gain.setTargetAtTime(0, actx.currentTime, 0.003);
174
+ },
175
+ envelope(ch, shape, cycleDurMs) {
176
+ scheduleEnvelope(chs[ch].toneGain.gain, shape, cycleDurMs / 1000, actx.currentTime);
177
+ },
178
+ mute(ch) {
179
+ const { toneGain, noiseGain } = chs[ch];
180
+ const now = actx.currentTime;
181
+ toneGain.gain.cancelScheduledValues(now);
182
+ noiseGain.gain.cancelScheduledValues(now);
183
+ toneGain.gain.setTargetAtTime(0, now, 0.005);
184
+ noiseGain.gain.setTargetAtTime(0, now, 0.005);
185
+ },
186
+ muteAll() {
187
+ const now = actx.currentTime;
188
+ for (const { toneGain, noiseGain } of Object.values(chs)) {
189
+ toneGain.gain.cancelScheduledValues(now);
190
+ noiseGain.gain.cancelScheduledValues(now);
191
+ toneGain.gain.setTargetAtTime(0, now, 0.005);
192
+ noiseGain.gain.setTargetAtTime(0, now, 0.005);
193
+ }
194
+ },
195
+ stop() {
196
+ const now = actx.currentTime;
197
+ noiseSrc.stop(now + 0.01);
198
+ noiseSrc.disconnect();
199
+ for (const { osc, toneGain, noiseFilter, noiseGain } of Object.values(chs)) {
200
+ toneGain.gain.setValueAtTime(0, now);
201
+ noiseGain.gain.setValueAtTime(0, now);
202
+ osc.stop(now + 0.01);
203
+ osc.disconnect();
204
+ toneGain.disconnect();
205
+ noiseFilter.disconnect();
206
+ noiseGain.disconnect();
207
+ }
208
+ },
209
+ };
210
+ }
211
+ // ─── Sequencer ────────────────────────────────────────────────────────────────
212
+ /**
213
+ * Pre-schedules up to three independent AY note arrays on the shared AudioContext.
214
+ * All channels start at the same wall-clock time; shorter channels finish earlier.
215
+ * Fire-and-forget — no handle returned.
216
+ *
217
+ * Each `AYNote` may optionally mix in LFSR noise and/or apply an envelope shape.
218
+ *
219
+ * @example
220
+ * playAY({
221
+ * a: [{ freq: 440, dur: 300 }, { freq: 523, dur: 300, envShape: 12, envCycleDurMs: 150 }],
222
+ * b: [{ freq: 110, dur: 200, noise: true, noisePeriod: 16 }],
223
+ * c: [{ freq: 0, dur: 600, noise: true, noisePeriod: 4, envShape: 8, envCycleDurMs: 100 }],
224
+ * })
225
+ */
226
+ export function playAY(pattern, startDelay = 0) {
227
+ initAudio();
228
+ const master = getMasterGain();
229
+ if (!master)
230
+ return;
231
+ const actx = master.context;
232
+ const noiseBuf = makeLFSRBuffer(actx);
233
+ const scheduleChannel = (notes) => {
234
+ if (!notes?.length)
235
+ return;
236
+ let t = actx.currentTime + startDelay / 1000;
237
+ for (const note of notes) {
238
+ const { freq, dur, vol = 15, noise = false, noisePeriod = 8, envShape, envCycleDurMs } = note;
239
+ const durS = dur / 1000;
240
+ if (freq > 0) {
241
+ const osc = actx.createOscillator();
242
+ const toneGain = actx.createGain();
243
+ osc.type = 'square';
244
+ osc.frequency.value = freq;
245
+ osc.connect(toneGain);
246
+ toneGain.connect(master);
247
+ if (envShape !== undefined) {
248
+ const cycleDur = (envCycleDurMs ?? dur) / 1000;
249
+ const numCycles = Math.ceil(durS / cycleDur) + 4;
250
+ scheduleEnvelope(toneGain.gain, envShape, cycleDur, t, numCycles);
251
+ toneGain.gain.setValueAtTime(0, t + durS);
252
+ }
253
+ else {
254
+ const att = 0.005;
255
+ const rel = Math.min(0.015, durS * 0.12);
256
+ toneGain.gain.setValueAtTime(0, t);
257
+ toneGain.gain.linearRampToValueAtTime(ayVol(vol), t + att);
258
+ toneGain.gain.setValueAtTime(ayVol(vol), t + durS - rel);
259
+ toneGain.gain.linearRampToValueAtTime(0, t + durS);
260
+ }
261
+ osc.start(t);
262
+ osc.stop(t + durS + 0.01);
263
+ }
264
+ if (noise) {
265
+ const noiseSrc = actx.createBufferSource();
266
+ const noiseFilter = actx.createBiquadFilter();
267
+ const noiseGain = actx.createGain();
268
+ noiseSrc.buffer = noiseBuf;
269
+ noiseSrc.loop = true;
270
+ noiseFilter.type = 'lowpass';
271
+ noiseFilter.frequency.value = noiseCutoffHz(noisePeriod);
272
+ if (envShape !== undefined) {
273
+ const cycleDur = (envCycleDurMs ?? dur) / 1000;
274
+ const numCycles = Math.ceil(durS / cycleDur) + 4;
275
+ scheduleEnvelope(noiseGain.gain, envShape, cycleDur, t, numCycles);
276
+ noiseGain.gain.setValueAtTime(0, t + durS);
277
+ }
278
+ else {
279
+ const att = 0.005;
280
+ const rel = Math.min(0.015, durS * 0.12);
281
+ const nv = ayVol(vol) * 0.6;
282
+ noiseGain.gain.setValueAtTime(0, t);
283
+ noiseGain.gain.linearRampToValueAtTime(nv, t + att);
284
+ noiseGain.gain.setValueAtTime(nv, t + durS - rel);
285
+ noiseGain.gain.linearRampToValueAtTime(0, t + durS);
286
+ }
287
+ noiseSrc.connect(noiseFilter);
288
+ noiseFilter.connect(noiseGain);
289
+ noiseGain.connect(master);
290
+ noiseSrc.start(t);
291
+ noiseSrc.stop(t + durS + 0.01);
292
+ }
293
+ t += durS;
294
+ }
295
+ };
296
+ scheduleChannel(pattern.a);
297
+ scheduleChannel(pattern.b);
298
+ scheduleChannel(pattern.c);
299
+ }
300
+ //# sourceMappingURL=ay.js.map
package/dist/ay.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ay.js","sourceRoot":"","sources":["../src/ay.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './palette.js';
2
+ export * from './ay.js';
2
3
  export * from './font.js';
3
4
  export * from './renderer.js';
4
5
  export * from './audio.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export * from './palette.js';
2
+ export * from './ay.js';
2
3
  export * from './font.js';
3
4
  export * from './renderer.js';
4
5
  export * from './audio.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA;AAC5B,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,cAAc,CAAA;AAC5B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zx-kit",
3
- "version": "0.9.2",
3
+ "version": "0.10.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/zrebec/zx-kit.git"