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 +89 -0
- package/dist/ay.d.ts.map +1 -0
- package/dist/ay.js +300 -0
- package/dist/ay.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
package/dist/ay.d.ts.map
ADDED
|
@@ -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
package/dist/index.d.ts.map
CHANGED
|
@@ -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
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"}
|