@beatbax/engine 0.1.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/.tsbuildinfo +1 -0
- package/dist/audio/bufferedRenderer.d.ts +32 -0
- package/dist/audio/bufferedRenderer.d.ts.map +1 -0
- package/dist/audio/bufferedRenderer.js +309 -0
- package/dist/audio/bufferedRenderer.js.map +1 -0
- package/dist/audio/pcmRenderer.d.ts +25 -0
- package/dist/audio/pcmRenderer.d.ts.map +1 -0
- package/dist/audio/pcmRenderer.js +1288 -0
- package/dist/audio/pcmRenderer.js.map +1 -0
- package/dist/audio/playback.d.ts +57 -0
- package/dist/audio/playback.d.ts.map +1 -0
- package/dist/audio/playback.js +794 -0
- package/dist/audio/playback.js.map +1 -0
- package/dist/chips/gameboy/apu.d.ts +9 -0
- package/dist/chips/gameboy/apu.d.ts.map +1 -0
- package/dist/chips/gameboy/apu.js +27 -0
- package/dist/chips/gameboy/apu.js.map +1 -0
- package/dist/chips/gameboy/noise.d.ts +6 -0
- package/dist/chips/gameboy/noise.d.ts.map +1 -0
- package/dist/chips/gameboy/noise.js +155 -0
- package/dist/chips/gameboy/noise.js.map +1 -0
- package/dist/chips/gameboy/packet.d.ts +3 -0
- package/dist/chips/gameboy/packet.d.ts.map +1 -0
- package/dist/chips/gameboy/packet.js +3 -0
- package/dist/chips/gameboy/packet.js.map +1 -0
- package/dist/chips/gameboy/periodTables.d.ts +16 -0
- package/dist/chips/gameboy/periodTables.d.ts.map +1 -0
- package/dist/chips/gameboy/periodTables.js +29 -0
- package/dist/chips/gameboy/periodTables.js.map +1 -0
- package/dist/chips/gameboy/pulse.d.ts +12 -0
- package/dist/chips/gameboy/pulse.d.ts.map +1 -0
- package/dist/chips/gameboy/pulse.js +275 -0
- package/dist/chips/gameboy/pulse.js.map +1 -0
- package/dist/chips/gameboy/wave.d.ts +8 -0
- package/dist/chips/gameboy/wave.d.ts.map +1 -0
- package/dist/chips/gameboy/wave.js +146 -0
- package/dist/chips/gameboy/wave.js.map +1 -0
- package/dist/effects/index.d.ts +7 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +1028 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/types.d.ts +8 -0
- package/dist/effects/types.d.ts.map +1 -0
- package/dist/effects/types.js +2 -0
- package/dist/effects/types.js.map +1 -0
- package/dist/expand/refExpander.d.ts +14 -0
- package/dist/expand/refExpander.d.ts.map +1 -0
- package/dist/expand/refExpander.js +130 -0
- package/dist/expand/refExpander.js.map +1 -0
- package/dist/export/index.d.ts +5 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +5 -0
- package/dist/export/index.js.map +1 -0
- package/dist/export/jsonExport.d.ts +9 -0
- package/dist/export/jsonExport.d.ts.map +1 -0
- package/dist/export/jsonExport.js +184 -0
- package/dist/export/jsonExport.js.map +1 -0
- package/dist/export/midiExport.d.ts +9 -0
- package/dist/export/midiExport.d.ts.map +1 -0
- package/dist/export/midiExport.js +390 -0
- package/dist/export/midiExport.js.map +1 -0
- package/dist/export/ugeWriter.d.ts +33 -0
- package/dist/export/ugeWriter.d.ts.map +1 -0
- package/dist/export/ugeWriter.js +1997 -0
- package/dist/export/ugeWriter.js.map +1 -0
- package/dist/export/wavWriter.d.ts +24 -0
- package/dist/export/wavWriter.d.ts.map +1 -0
- package/dist/export/wavWriter.js +126 -0
- package/dist/export/wavWriter.js.map +1 -0
- package/dist/import/index.d.ts +5 -0
- package/dist/import/index.d.ts.map +1 -0
- package/dist/import/index.js +8 -0
- package/dist/import/index.js.map +1 -0
- package/dist/import/remoteCache.d.ts +60 -0
- package/dist/import/remoteCache.d.ts.map +1 -0
- package/dist/import/remoteCache.js +194 -0
- package/dist/import/remoteCache.js.map +1 -0
- package/dist/import/uge/uge.reader.d.ts +27 -0
- package/dist/import/uge/uge.reader.d.ts.map +1 -0
- package/dist/import/uge/uge.reader.js +545 -0
- package/dist/import/uge/uge.reader.js.map +1 -0
- package/dist/import/urlUtils.d.ts +50 -0
- package/dist/import/urlUtils.d.ts.map +1 -0
- package/dist/import/urlUtils.js +87 -0
- package/dist/import/urlUtils.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +318 -0
- package/dist/index.js.map +1 -0
- package/dist/instruments/instrumentState.d.ts +15 -0
- package/dist/instruments/instrumentState.d.ts.map +1 -0
- package/dist/instruments/instrumentState.js +24 -0
- package/dist/instruments/instrumentState.js.map +1 -0
- package/dist/parser/ast.d.ts +22 -0
- package/dist/parser/ast.d.ts.map +1 -0
- package/dist/parser/ast.js +5 -0
- package/dist/parser/ast.js.map +1 -0
- package/dist/parser/index.d.ts +14 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +10 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/peggy/generated/parser.d.ts +8 -0
- package/dist/parser/peggy/generated/parser.d.ts.map +1 -0
- package/dist/parser/peggy/generated/parser.js +6269 -0
- package/dist/parser/peggy/generated/parser.js.map +1 -0
- package/dist/parser/peggy/index.d.ts +3 -0
- package/dist/parser/peggy/index.d.ts.map +1 -0
- package/dist/parser/peggy/index.js +555 -0
- package/dist/parser/peggy/index.js.map +1 -0
- package/dist/parser/structured.d.ts +16 -0
- package/dist/parser/structured.d.ts.map +1 -0
- package/dist/parser/structured.js +232 -0
- package/dist/parser/structured.js.map +1 -0
- package/dist/parser/tokenizer.d.ts +12 -0
- package/dist/parser/tokenizer.d.ts.map +1 -0
- package/dist/parser/tokenizer.js +14 -0
- package/dist/parser/tokenizer.js.map +1 -0
- package/dist/patterns/expand.d.ts +32 -0
- package/dist/patterns/expand.d.ts.map +1 -0
- package/dist/patterns/expand.js +184 -0
- package/dist/patterns/expand.js.map +1 -0
- package/dist/patterns/index.d.ts +2 -0
- package/dist/patterns/index.d.ts.map +1 -0
- package/dist/patterns/index.js +2 -0
- package/dist/patterns/index.js.map +1 -0
- package/dist/scheduler/index.d.ts +6 -0
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +9 -0
- package/dist/scheduler/index.js.map +1 -0
- package/dist/scheduler/tickScheduler.d.ts +27 -0
- package/dist/scheduler/tickScheduler.d.ts.map +1 -0
- package/dist/scheduler/tickScheduler.js +74 -0
- package/dist/scheduler/tickScheduler.js.map +1 -0
- package/dist/sequences/expand.d.ts +14 -0
- package/dist/sequences/expand.d.ts.map +1 -0
- package/dist/sequences/expand.js +137 -0
- package/dist/sequences/expand.js.map +1 -0
- package/dist/song/importResolver.browser.d.ts +29 -0
- package/dist/song/importResolver.browser.d.ts.map +1 -0
- package/dist/song/importResolver.browser.js +168 -0
- package/dist/song/importResolver.browser.js.map +1 -0
- package/dist/song/importResolver.d.ts +40 -0
- package/dist/song/importResolver.d.ts.map +1 -0
- package/dist/song/importResolver.js +445 -0
- package/dist/song/importResolver.js.map +1 -0
- package/dist/song/index.browser.d.ts +9 -0
- package/dist/song/index.browser.d.ts.map +1 -0
- package/dist/song/index.browser.js +7 -0
- package/dist/song/index.browser.js.map +1 -0
- package/dist/song/index.d.ts +8 -0
- package/dist/song/index.d.ts.map +1 -0
- package/dist/song/index.js +6 -0
- package/dist/song/index.js.map +1 -0
- package/dist/song/resolver.browser.d.ts +50 -0
- package/dist/song/resolver.browser.d.ts.map +1 -0
- package/dist/song/resolver.browser.js +536 -0
- package/dist/song/resolver.browser.js.map +1 -0
- package/dist/song/resolver.d.ts +20 -0
- package/dist/song/resolver.d.ts.map +1 -0
- package/dist/song/resolver.js +540 -0
- package/dist/song/resolver.js.map +1 -0
- package/dist/song/songModel.d.ts +34 -0
- package/dist/song/songModel.d.ts.map +1 -0
- package/dist/song/songModel.js +2 -0
- package/dist/song/songModel.js.map +1 -0
- package/dist/tests/refExpander.test.d.ts +2 -0
- package/dist/tests/refExpander.test.d.ts.map +1 -0
- package/dist/tests/refExpander.test.js +37 -0
- package/dist/tests/refExpander.test.js.map +1 -0
- package/dist/util/diag.d.ts +16 -0
- package/dist/util/diag.d.ts.map +1 -0
- package/dist/util/diag.js +29 -0
- package/dist/util/diag.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
import { playPulse as playPulseImpl } from '../chips/gameboy/pulse.js';
|
|
2
|
+
import { playWavetable as playWavetableImpl } from '../chips/gameboy/wave.js';
|
|
3
|
+
import { playNoise as playNoiseImpl } from '../chips/gameboy/noise.js';
|
|
4
|
+
export class BufferedRenderer {
|
|
5
|
+
ctx;
|
|
6
|
+
scheduler;
|
|
7
|
+
segmentDur;
|
|
8
|
+
lookahead;
|
|
9
|
+
segments = new Map();
|
|
10
|
+
pendingRenders = new Set();
|
|
11
|
+
scheduledNodes = [];
|
|
12
|
+
maxPreRenderSegments;
|
|
13
|
+
applyEffectsToNodes(ctx, nodes, pan, effects, start, dur) {
|
|
14
|
+
// Apply inline effect array first
|
|
15
|
+
if (Array.isArray(effects)) {
|
|
16
|
+
for (const fx of effects) {
|
|
17
|
+
try {
|
|
18
|
+
const name = fx && fx.type ? fx.type : fx;
|
|
19
|
+
// If resolver attached a normalized duration in seconds, prefer that
|
|
20
|
+
let params = fx && fx.params ? fx.params : (Array.isArray(fx) ? fx : []);
|
|
21
|
+
if (fx && typeof fx.durationSec === 'number') {
|
|
22
|
+
// shallow copy so we don't mutate original parsed params
|
|
23
|
+
const pcopy = Array.isArray(params) ? params.slice() : [];
|
|
24
|
+
pcopy[3] = fx.durationSec;
|
|
25
|
+
params = pcopy;
|
|
26
|
+
}
|
|
27
|
+
const handler = require('../effects/index.js').get(name);
|
|
28
|
+
if (handler) {
|
|
29
|
+
try {
|
|
30
|
+
handler(ctx, nodes, params, start, dur);
|
|
31
|
+
}
|
|
32
|
+
catch (e) { }
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (e) { }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// Apply pan as fallback if provided and not already covered by an effect
|
|
39
|
+
if (pan !== undefined && pan !== null) {
|
|
40
|
+
const handler = require('../effects/index.js').get('pan');
|
|
41
|
+
if (handler) {
|
|
42
|
+
// If pan is object with enum/value, convert to numeric for handler when possible
|
|
43
|
+
if (typeof pan === 'object') {
|
|
44
|
+
if (pan.value !== undefined)
|
|
45
|
+
handler(ctx, nodes, [pan.value], start, dur);
|
|
46
|
+
else if (pan.enum) {
|
|
47
|
+
const s = String(pan.enum).toUpperCase();
|
|
48
|
+
const mapped = s === 'L' ? -1 : (s === 'R' ? 1 : 0);
|
|
49
|
+
handler(ctx, nodes, [mapped], start, dur);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
else if (typeof pan === 'number') {
|
|
53
|
+
handler(ctx, nodes, [pan], start, dur);
|
|
54
|
+
}
|
|
55
|
+
else if (typeof pan === 'string') {
|
|
56
|
+
// L/C/R or numeric string
|
|
57
|
+
const up = pan.toUpperCase();
|
|
58
|
+
if (up === 'L' || up === 'R' || up === 'C') {
|
|
59
|
+
const mapped = up === 'L' ? -1 : (up === 'R' ? 1 : 0);
|
|
60
|
+
handler(ctx, nodes, [mapped], start, dur);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
const n = Number(pan);
|
|
64
|
+
if (!Number.isNaN(n))
|
|
65
|
+
handler(ctx, nodes, [n], start, dur);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
constructor(ctx, scheduler, opts = {}) {
|
|
72
|
+
this.ctx = ctx;
|
|
73
|
+
this.scheduler = scheduler;
|
|
74
|
+
// Allow overriding segment duration via options or environment for debugging/exports
|
|
75
|
+
const envSegRaw = typeof process !== 'undefined' && (process.env && process.env.BEATBAX_SEGMENT_DUR) ? process.env.BEATBAX_SEGMENT_DUR : undefined;
|
|
76
|
+
const envSeg = typeof envSegRaw !== 'undefined' ? Number(envSegRaw) : undefined;
|
|
77
|
+
const envSegNum = (typeof envSeg === 'number' && Number.isFinite(envSeg) && envSeg > 0) ? envSeg : undefined;
|
|
78
|
+
this.segmentDur = (typeof opts.segmentDuration === 'number') ? opts.segmentDuration : (envSegNum ?? 0.5);
|
|
79
|
+
this.lookahead = opts.lookahead || 0.25;
|
|
80
|
+
this.maxPreRenderSegments = opts.maxPreRenderSegments;
|
|
81
|
+
}
|
|
82
|
+
segmentKeyForTime(t) {
|
|
83
|
+
return Math.floor(t / this.segmentDur) * this.segmentDur;
|
|
84
|
+
}
|
|
85
|
+
enqueueEvent(absTime, dur, renderFn, chId) {
|
|
86
|
+
const segStart = this.segmentKeyForTime(absTime);
|
|
87
|
+
const localStart = absTime - segStart;
|
|
88
|
+
const arr = this.segments.get(segStart) || [];
|
|
89
|
+
const ev = { localStart, dur, renderFn };
|
|
90
|
+
if (renderFn.__chId !== undefined)
|
|
91
|
+
ev.chId = renderFn.__chId;
|
|
92
|
+
if (typeof chId === 'number')
|
|
93
|
+
ev.chId = chId;
|
|
94
|
+
arr.push(ev);
|
|
95
|
+
this.segments.set(segStart, arr);
|
|
96
|
+
if (!this.pendingRenders.has(segStart)) {
|
|
97
|
+
if (typeof this.maxPreRenderSegments === 'number') {
|
|
98
|
+
const pendingCount = this.pendingRenders.size;
|
|
99
|
+
if (pendingCount >= this.maxPreRenderSegments) {
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
this.pendingRenders.add(segStart);
|
|
104
|
+
const renderAt = Math.max(0, segStart - this.lookahead);
|
|
105
|
+
this.scheduler.schedule(renderAt, () => this.renderSegment(segStart));
|
|
106
|
+
}
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
async renderSegment(segStart) {
|
|
110
|
+
if (!this.pendingRenders.has(segStart))
|
|
111
|
+
return;
|
|
112
|
+
this.pendingRenders.delete(segStart);
|
|
113
|
+
const events = this.segments.get(segStart) || [];
|
|
114
|
+
if (!events.length)
|
|
115
|
+
return;
|
|
116
|
+
const sampleRate = (this.ctx && this.ctx.sampleRate) ? this.ctx.sampleRate : 44100;
|
|
117
|
+
const renderDur = this.segmentDur + 0.05;
|
|
118
|
+
const length = Math.ceil(renderDur * sampleRate);
|
|
119
|
+
const offline = new globalThis.OfflineAudioContext(1, length, sampleRate);
|
|
120
|
+
for (const ev of events) {
|
|
121
|
+
try {
|
|
122
|
+
ev.renderFn(offline);
|
|
123
|
+
}
|
|
124
|
+
catch (e) { }
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const rendered = await offline.startRendering();
|
|
128
|
+
const src = this.ctx.createBufferSource();
|
|
129
|
+
src.buffer = rendered;
|
|
130
|
+
src.loop = false;
|
|
131
|
+
const gain = this.ctx.createGain();
|
|
132
|
+
src.connect(gain);
|
|
133
|
+
gain.connect(this.ctx.destination);
|
|
134
|
+
try {
|
|
135
|
+
src.start(segStart);
|
|
136
|
+
}
|
|
137
|
+
catch (e) {
|
|
138
|
+
try {
|
|
139
|
+
src.start();
|
|
140
|
+
}
|
|
141
|
+
catch (_) { }
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
src.stop(segStart + renderDur);
|
|
145
|
+
}
|
|
146
|
+
catch (e) { }
|
|
147
|
+
const chId = (events && events.length && events[0].chId) ? events[0].chId : undefined;
|
|
148
|
+
this.scheduledNodes.push({ src, gain, segStart, chId });
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
for (const ev of events) {
|
|
152
|
+
try {
|
|
153
|
+
ev.renderFn(undefined);
|
|
154
|
+
}
|
|
155
|
+
catch (_) { }
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
this.segments.delete(segStart);
|
|
159
|
+
}
|
|
160
|
+
stop(chId) {
|
|
161
|
+
if (typeof chId === 'number') {
|
|
162
|
+
for (const [segStart, events] of Array.from(this.segments.entries())) {
|
|
163
|
+
const remaining = events.filter((ev) => ev.chId !== chId);
|
|
164
|
+
if (remaining.length)
|
|
165
|
+
this.segments.set(segStart, remaining);
|
|
166
|
+
else {
|
|
167
|
+
this.segments.delete(segStart);
|
|
168
|
+
this.pendingRenders.delete(segStart);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
const keep = [];
|
|
172
|
+
for (const n of this.scheduledNodes) {
|
|
173
|
+
if (n.chId === chId) {
|
|
174
|
+
try {
|
|
175
|
+
if (n.src && typeof n.src.stop === 'function')
|
|
176
|
+
n.src.stop();
|
|
177
|
+
}
|
|
178
|
+
catch (_) { }
|
|
179
|
+
try {
|
|
180
|
+
if (n.src && typeof n.src.disconnect === 'function')
|
|
181
|
+
n.src.disconnect();
|
|
182
|
+
}
|
|
183
|
+
catch (_) { }
|
|
184
|
+
try {
|
|
185
|
+
if (n.gain && typeof n.gain.disconnect === 'function')
|
|
186
|
+
n.gain.disconnect();
|
|
187
|
+
}
|
|
188
|
+
catch (_) { }
|
|
189
|
+
}
|
|
190
|
+
else
|
|
191
|
+
keep.push(n);
|
|
192
|
+
}
|
|
193
|
+
this.scheduledNodes = keep;
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.segments.clear();
|
|
197
|
+
this.pendingRenders.clear();
|
|
198
|
+
for (const n of this.scheduledNodes) {
|
|
199
|
+
try {
|
|
200
|
+
if (n.src && typeof n.src.stop === 'function')
|
|
201
|
+
n.src.stop();
|
|
202
|
+
}
|
|
203
|
+
catch (_) { }
|
|
204
|
+
try {
|
|
205
|
+
if (n.src && typeof n.src.disconnect === 'function')
|
|
206
|
+
n.src.disconnect();
|
|
207
|
+
}
|
|
208
|
+
catch (_) { }
|
|
209
|
+
try {
|
|
210
|
+
if (n.gain && typeof n.gain.disconnect === 'function')
|
|
211
|
+
n.gain.disconnect();
|
|
212
|
+
}
|
|
213
|
+
catch (_) { }
|
|
214
|
+
}
|
|
215
|
+
this.scheduledNodes = [];
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
drainScheduledNodes(chId) {
|
|
219
|
+
if (typeof chId === 'number') {
|
|
220
|
+
const matched = this.scheduledNodes.filter(n => n.chId === chId);
|
|
221
|
+
this.scheduledNodes = this.scheduledNodes.filter(n => n.chId !== chId);
|
|
222
|
+
return matched;
|
|
223
|
+
}
|
|
224
|
+
const out = this.scheduledNodes.slice();
|
|
225
|
+
this.scheduledNodes = [];
|
|
226
|
+
return out;
|
|
227
|
+
}
|
|
228
|
+
enqueuePulse(absTime, freq, duty, dur, inst, chId, pan, effects) {
|
|
229
|
+
const enq = this.enqueueEvent(absTime, dur, (offlineCtx) => {
|
|
230
|
+
const local = absTime - (this.segmentKeyForTime(absTime));
|
|
231
|
+
try {
|
|
232
|
+
const nodes = playPulseImpl(offlineCtx, freq, duty, local, dur, inst) || [];
|
|
233
|
+
// apply effects and baked pan inside offline render
|
|
234
|
+
try {
|
|
235
|
+
this.applyEffectsToNodes(offlineCtx, nodes, pan, effects, local, dur);
|
|
236
|
+
}
|
|
237
|
+
catch (e) { }
|
|
238
|
+
}
|
|
239
|
+
catch (e) { }
|
|
240
|
+
}, chId);
|
|
241
|
+
if (!enq) {
|
|
242
|
+
this.scheduler.schedule(absTime, () => {
|
|
243
|
+
try {
|
|
244
|
+
const nodes = playPulseImpl(this.ctx, freq, duty, absTime, dur, inst) || [];
|
|
245
|
+
try {
|
|
246
|
+
this.applyEffectsToNodes(this.ctx, nodes, pan, effects, absTime, dur);
|
|
247
|
+
}
|
|
248
|
+
catch (e) { }
|
|
249
|
+
}
|
|
250
|
+
catch (_) { }
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
return enq;
|
|
254
|
+
}
|
|
255
|
+
enqueueWavetable(absTime, freq, table, dur, inst, chId, pan, effects) {
|
|
256
|
+
const enq = this.enqueueEvent(absTime, dur, (offlineCtx) => {
|
|
257
|
+
const local = absTime - (this.segmentKeyForTime(absTime));
|
|
258
|
+
try {
|
|
259
|
+
const nodes = playWavetableImpl(offlineCtx, freq, table, local, dur, inst) || [];
|
|
260
|
+
try {
|
|
261
|
+
this.applyEffectsToNodes(offlineCtx, nodes, pan, effects, local, dur);
|
|
262
|
+
}
|
|
263
|
+
catch (e) { }
|
|
264
|
+
}
|
|
265
|
+
catch (e) { }
|
|
266
|
+
}, chId);
|
|
267
|
+
if (!enq) {
|
|
268
|
+
this.scheduler.schedule(absTime, () => {
|
|
269
|
+
try {
|
|
270
|
+
const nodes = playWavetableImpl(this.ctx, freq, table, absTime, dur, inst) || [];
|
|
271
|
+
try {
|
|
272
|
+
this.applyEffectsToNodes(this.ctx, nodes, pan, effects, absTime, dur);
|
|
273
|
+
}
|
|
274
|
+
catch (e) { }
|
|
275
|
+
}
|
|
276
|
+
catch (_) { }
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
return enq;
|
|
280
|
+
}
|
|
281
|
+
enqueueNoise(absTime, dur, inst, chId, pan, effects) {
|
|
282
|
+
const enq = this.enqueueEvent(absTime, dur, (offlineCtx) => {
|
|
283
|
+
const local = absTime - (this.segmentKeyForTime(absTime));
|
|
284
|
+
try {
|
|
285
|
+
const nodes = playNoiseImpl(offlineCtx, local, dur, inst) || [];
|
|
286
|
+
try {
|
|
287
|
+
this.applyEffectsToNodes(offlineCtx, nodes, pan, effects, local, dur);
|
|
288
|
+
}
|
|
289
|
+
catch (e) { }
|
|
290
|
+
}
|
|
291
|
+
catch (e) { }
|
|
292
|
+
}, chId);
|
|
293
|
+
if (!enq) {
|
|
294
|
+
this.scheduler.schedule(absTime, () => {
|
|
295
|
+
try {
|
|
296
|
+
const nodes = playNoiseImpl(this.ctx, absTime, dur, inst) || [];
|
|
297
|
+
try {
|
|
298
|
+
this.applyEffectsToNodes(this.ctx, nodes, pan, effects, absTime, dur);
|
|
299
|
+
}
|
|
300
|
+
catch (e) { }
|
|
301
|
+
}
|
|
302
|
+
catch (_) { }
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
return enq;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
export default BufferedRenderer;
|
|
309
|
+
//# sourceMappingURL=bufferedRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bufferedRenderer.js","sourceRoot":"","sources":["../../src/audio/bufferedRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SongModel } from '../song/songModel.js';
|
|
2
|
+
/**
|
|
3
|
+
* Render a song to PCM samples without using WebAudio.
|
|
4
|
+
* This is a simplified renderer for CLI/offline use.
|
|
5
|
+
*/
|
|
6
|
+
export interface RenderOptions {
|
|
7
|
+
sampleRate?: number;
|
|
8
|
+
duration?: number;
|
|
9
|
+
channels?: 1 | 2;
|
|
10
|
+
bpm?: number;
|
|
11
|
+
renderChannels?: number[];
|
|
12
|
+
normalize?: boolean;
|
|
13
|
+
vibDepthScale?: number;
|
|
14
|
+
regPerTrackerBaseFactor?: number;
|
|
15
|
+
regPerTrackerUnit?: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Renders a complete song to a PCM buffer.
|
|
19
|
+
*
|
|
20
|
+
* @param song The song model containing channels and events.
|
|
21
|
+
* @param opts Rendering options (sampleRate, channels, bpm, etc.).
|
|
22
|
+
* @returns a Float32Array containing the interleaved PCM samples.
|
|
23
|
+
*/
|
|
24
|
+
export declare function renderSongToPCM(song: SongModel, opts?: RenderOptions): Float32Array;
|
|
25
|
+
//# sourceMappingURL=pcmRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pcmRenderer.d.ts","sourceRoot":"","sources":["../../src/audio/pcmRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAa,MAAM,sBAAsB,CAAC;AA+E5D;;;GAGG;AAEH,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IAIpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAwCD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAE,aAAkB,GAAG,YAAY,CAsEvF"}
|