@e9g/buffered-audio-nodes 0.2.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.
@@ -0,0 +1,1236 @@
1
+ import { SourceNode, SourceNodeProperties, BufferedSourceStream, SourceMetadata, AudioChunk, TargetNode, TargetNodeProperties, BufferedTargetStream, StreamContext, TransformNode, TransformNodeProperties, BufferedTransformStream, ChunkBuffer, BufferedAudioNodeInput } from 'buffered-audio-nodes-core';
2
+ export * from 'buffered-audio-nodes-core';
3
+ export * from 'buffered-audio-nodes-utils';
4
+ import { z } from 'zod';
5
+
6
+ declare const ffmpegSchema: z.ZodObject<{
7
+ path: z.ZodDefault<z.ZodString>;
8
+ ffmpegPath: z.ZodDefault<z.ZodString>;
9
+ ffprobePath: z.ZodDefault<z.ZodString>;
10
+ }, z.core.$strip>;
11
+ interface ReadFfmpegProperties extends z.infer<typeof ffmpegSchema>, SourceNodeProperties {
12
+ readonly channels?: ReadonlyArray<number>;
13
+ }
14
+ declare class ReadFfmpegStream<P extends ReadFfmpegProperties = ReadFfmpegProperties> extends BufferedSourceStream<P> {
15
+ private ffmpegProcess?;
16
+ private stdout?;
17
+ private frameOffset;
18
+ private remainder?;
19
+ private outputChannels;
20
+ private sourceSampleRate;
21
+ private sourceBitDepth;
22
+ getMetadata(): Promise<SourceMetadata>;
23
+ private ensureInitialized;
24
+ _read(): Promise<AudioChunk | undefined>;
25
+ _flush(): Promise<void>;
26
+ _teardown(): void;
27
+ private probe;
28
+ private readBytes;
29
+ }
30
+ declare class ReadFfmpegNode extends SourceNode<ReadFfmpegProperties> {
31
+ static readonly moduleName = "ReadFfmpeg";
32
+ static readonly moduleDescription = "Read audio from a file using FFmpeg";
33
+ static readonly schema: z.ZodObject<{
34
+ path: z.ZodDefault<z.ZodString>;
35
+ ffmpegPath: z.ZodDefault<z.ZodString>;
36
+ ffprobePath: z.ZodDefault<z.ZodString>;
37
+ }, z.core.$strip>;
38
+ readonly type: readonly ["buffered-audio-node", "source", "read-ffmpeg"];
39
+ protected createStream(): ReadFfmpegStream;
40
+ clone(overrides?: Partial<ReadFfmpegProperties>): ReadFfmpegNode;
41
+ }
42
+ declare function readFfmpeg(path: string, options: {
43
+ channels?: ReadonlyArray<number>;
44
+ ffmpegPath: string;
45
+ ffprobePath: string;
46
+ }): ReadFfmpegNode;
47
+
48
+ declare const wavSchema: z.ZodObject<{
49
+ path: z.ZodDefault<z.ZodString>;
50
+ }, z.core.$strip>;
51
+ interface ReadWavProperties extends z.infer<typeof wavSchema>, SourceNodeProperties {
52
+ readonly channels?: ReadonlyArray<number>;
53
+ }
54
+ declare function readSample(data: Buffer, offset: number, bitsPerSample: number, audioFormat: number): number;
55
+ declare class ReadWavStream<P extends ReadWavProperties = ReadWavProperties> extends BufferedSourceStream<P> {
56
+ private fileHandle?;
57
+ private format?;
58
+ private bytesRead;
59
+ private sourceSampleRate;
60
+ private sourceBitDepth;
61
+ getMetadata(): Promise<SourceMetadata>;
62
+ private ensureInitialized;
63
+ _read(): Promise<AudioChunk | undefined>;
64
+ _flush(): Promise<void>;
65
+ _teardown(): void;
66
+ }
67
+ declare class ReadWavNode extends SourceNode<ReadWavProperties> {
68
+ static readonly moduleName = "ReadWav";
69
+ static readonly moduleDescription = "Read audio from a WAV file";
70
+ static readonly schema: z.ZodObject<{
71
+ path: z.ZodDefault<z.ZodString>;
72
+ }, z.core.$strip>;
73
+ readonly type: readonly ["buffered-audio-node", "source", "read-wav"];
74
+ protected createStream(): ReadWavStream;
75
+ clone(overrides?: Partial<ReadWavProperties>): ReadWavNode;
76
+ }
77
+ declare function readWav(path: string, options?: {
78
+ channels?: ReadonlyArray<number>;
79
+ }): ReadWavNode;
80
+
81
+ declare const schema$m: z.ZodObject<{
82
+ path: z.ZodDefault<z.ZodString>;
83
+ ffmpegPath: z.ZodDefault<z.ZodString>;
84
+ ffprobePath: z.ZodDefault<z.ZodString>;
85
+ }, z.core.$strip>;
86
+ interface ReadProperties extends z.infer<typeof schema$m>, SourceNodeProperties {
87
+ readonly channels?: ReadonlyArray<number>;
88
+ }
89
+ declare class ReadNode extends SourceNode<ReadProperties> {
90
+ static readonly moduleName = "Read";
91
+ static readonly moduleDescription = "Read audio from a file";
92
+ static readonly schema: z.ZodObject<{
93
+ path: z.ZodDefault<z.ZodString>;
94
+ ffmpegPath: z.ZodDefault<z.ZodString>;
95
+ ffprobePath: z.ZodDefault<z.ZodString>;
96
+ }, z.core.$strip>;
97
+ readonly type: readonly ["buffered-audio-node", "source", "read"];
98
+ protected createStream(): ReadWavStream<ReadProperties> | ReadFfmpegStream<ReadProperties>;
99
+ clone(overrides?: Partial<ReadProperties>): ReadNode;
100
+ }
101
+ declare function read(path: string, options?: {
102
+ channels?: ReadonlyArray<number>;
103
+ ffmpegPath?: string;
104
+ ffprobePath?: string;
105
+ }): ReadNode;
106
+
107
+ interface LoudnessStats {
108
+ readonly integrated: number;
109
+ readonly shortTerm: Array<number>;
110
+ readonly momentary: Array<number>;
111
+ readonly truePeak: number;
112
+ readonly range: number;
113
+ }
114
+ declare class LoudnessStatsStream extends BufferedTargetStream {
115
+ private channels;
116
+ private sampleRate;
117
+ private truePeakValue;
118
+ private channelBuffers;
119
+ private totalFrames;
120
+ private _stats?;
121
+ private statsInitialized;
122
+ get stats(): LoudnessStats | undefined;
123
+ private ensureInit;
124
+ _write(chunk: AudioChunk): Promise<void>;
125
+ _close(): Promise<void>;
126
+ }
127
+ declare class LoudnessStatsNode extends TargetNode {
128
+ static readonly moduleName = "Loudness Stats";
129
+ static readonly moduleDescription = "Measure integrated loudness, true peak, loudness range, and short-term/momentary loudness per EBU R128";
130
+ static readonly schema: z.ZodObject<{}, z.core.$strip>;
131
+ static is(value: unknown): value is LoudnessStatsNode;
132
+ readonly type: readonly ["buffered-audio-node", "target", "loudness-stats"];
133
+ private cachedStats?;
134
+ constructor(properties?: TargetNodeProperties);
135
+ get stats(): LoudnessStats | undefined;
136
+ _teardown(): void;
137
+ createStream(): LoudnessStatsStream;
138
+ clone(overrides?: Partial<TargetNodeProperties>): LoudnessStatsNode;
139
+ }
140
+ declare function loudnessStats(options?: {
141
+ id?: string;
142
+ }): LoudnessStatsNode;
143
+
144
+ declare const schema$l: z.ZodObject<{
145
+ outputPath: z.ZodDefault<z.ZodString>;
146
+ fftSize: z.ZodDefault<z.ZodNumber>;
147
+ hopSize: z.ZodDefault<z.ZodNumber>;
148
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
149
+ }, z.core.$strip>;
150
+ type FrequencyScale = "linear" | "log" | "mel" | "erb";
151
+ interface SpectrogramProperties extends z.infer<typeof schema$l>, TargetNodeProperties {
152
+ readonly frequencyScale?: FrequencyScale;
153
+ readonly numBands?: number;
154
+ readonly minFrequency?: number;
155
+ readonly maxFrequency?: number;
156
+ }
157
+ declare class SpectrogramStream extends BufferedTargetStream<SpectrogramProperties> {
158
+ private fileHandle?;
159
+ private channels;
160
+ private linearBins;
161
+ private outputBins;
162
+ private numFrames;
163
+ private fileOffset;
164
+ private windowCoefficients;
165
+ private workspace?;
166
+ private addon;
167
+ private bandMappings?;
168
+ private magnitudes;
169
+ private sampleBuffers;
170
+ private sampleBufferOffset;
171
+ private sampleBufferCapacity;
172
+ private writeBuffer?;
173
+ private writeBufferOffset;
174
+ private writeBufferFileOffset;
175
+ private readonly WRITE_BATCH_FRAMES;
176
+ private initialized;
177
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<void>;
178
+ private initialize;
179
+ _write(chunk: AudioChunk): Promise<void>;
180
+ _close(): Promise<void>;
181
+ private processAccumulatedSamples;
182
+ private writeFrame;
183
+ private flushWriteBuffer;
184
+ }
185
+ declare class SpectrogramNode extends TargetNode<SpectrogramProperties> {
186
+ static readonly moduleName = "Spectrogram";
187
+ static readonly moduleDescription = "Generate spectrogram visualization data";
188
+ static readonly schema: z.ZodObject<{
189
+ outputPath: z.ZodDefault<z.ZodString>;
190
+ fftSize: z.ZodDefault<z.ZodNumber>;
191
+ hopSize: z.ZodDefault<z.ZodNumber>;
192
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
193
+ }, z.core.$strip>;
194
+ static is(value: unknown): value is SpectrogramNode;
195
+ readonly type: readonly ["buffered-audio-node", "target", "spectrogram"];
196
+ constructor(properties: SpectrogramProperties);
197
+ createStream(): SpectrogramStream;
198
+ clone(overrides?: Partial<SpectrogramProperties>): SpectrogramNode;
199
+ }
200
+ declare function spectrogram(outputPath: string, options?: {
201
+ fftSize?: number;
202
+ hopSize?: number;
203
+ frequencyScale?: FrequencyScale;
204
+ numBands?: number;
205
+ minFrequency?: number;
206
+ maxFrequency?: number;
207
+ fftwAddonPath?: string;
208
+ }): SpectrogramNode;
209
+
210
+ declare const schema$k: z.ZodObject<{
211
+ outputPath: z.ZodDefault<z.ZodString>;
212
+ resolution: z.ZodDefault<z.ZodNumber>;
213
+ }, z.core.$strip>;
214
+ interface WaveformProperties extends z.infer<typeof schema$k>, TargetNodeProperties {
215
+ }
216
+ declare class WaveformStream extends BufferedTargetStream<WaveformProperties> {
217
+ private fileHandle?;
218
+ private channels;
219
+ private samplesPerPoint;
220
+ private totalPoints;
221
+ private fileOffset;
222
+ private samplesInCurrentWindow;
223
+ private currentMin;
224
+ private currentMax;
225
+ private writeBuffer;
226
+ private writeBufferOffset;
227
+ private writeBufferFileOffset;
228
+ private readonly WRITE_BATCH_POINTS;
229
+ private initialized;
230
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<void>;
231
+ private initialize;
232
+ private writeHeader;
233
+ _write(chunk: AudioChunk): Promise<void>;
234
+ _close(): Promise<void>;
235
+ private flushPoint;
236
+ private flushWriteBuffer;
237
+ }
238
+ declare class WaveformNode extends TargetNode<WaveformProperties> {
239
+ static readonly moduleName = "Waveform";
240
+ static readonly moduleDescription = "Generate waveform visualization data";
241
+ static readonly schema: z.ZodObject<{
242
+ outputPath: z.ZodDefault<z.ZodString>;
243
+ resolution: z.ZodDefault<z.ZodNumber>;
244
+ }, z.core.$strip>;
245
+ static is(value: unknown): value is WaveformNode;
246
+ readonly type: readonly ["buffered-audio-node", "target", "waveform"];
247
+ constructor(properties: WaveformProperties);
248
+ createStream(): WaveformStream;
249
+ clone(overrides?: Partial<WaveformProperties>): WaveformNode;
250
+ }
251
+ declare function waveform(outputPath: string, options?: {
252
+ resolution?: number;
253
+ }): WaveformNode;
254
+
255
+ type WavBitDepth = "16" | "24" | "32" | "32f";
256
+ interface EncodingOptions {
257
+ readonly format: "wav" | "flac" | "mp3" | "aac";
258
+ readonly bitrate?: string;
259
+ readonly vbr?: number;
260
+ }
261
+ interface WriteProperties extends TargetNodeProperties {
262
+ readonly path: string;
263
+ readonly ffmpegPath?: string;
264
+ readonly bitDepth: WavBitDepth;
265
+ readonly encoding?: EncodingOptions;
266
+ }
267
+ declare class WriteStream extends BufferedTargetStream<WriteProperties> {
268
+ private fileHandle?;
269
+ private ffmpegProcess?;
270
+ private ffmpegStdin?;
271
+ private ffmpegDone?;
272
+ private sampleRate;
273
+ private channels;
274
+ private bytesWritten;
275
+ private useEncoding;
276
+ private headerWritten;
277
+ private initialized;
278
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<void>;
279
+ private initialize;
280
+ _write(chunk: AudioChunk): Promise<void>;
281
+ _close(): Promise<void>;
282
+ private convertChunk;
283
+ private buildFfmpegArgs;
284
+ private writeToStdin;
285
+ }
286
+ declare class WriteNode extends TargetNode<WriteProperties> {
287
+ static readonly moduleName = "Write";
288
+ static readonly moduleDescription = "Write audio to a file";
289
+ static readonly schema: z.ZodObject<{
290
+ path: z.ZodDefault<z.ZodString>;
291
+ ffmpegPath: z.ZodDefault<z.ZodString>;
292
+ bitDepth: z.ZodDefault<z.ZodEnum<{
293
+ 16: "16";
294
+ 24: "24";
295
+ 32: "32";
296
+ "32f": "32f";
297
+ }>>;
298
+ }, z.core.$strip>;
299
+ readonly type: readonly ["buffered-audio-node", "target", "write"];
300
+ createStream(): WriteStream;
301
+ clone(overrides?: Partial<WriteProperties>): WriteNode;
302
+ }
303
+ declare function write(path: string, options?: {
304
+ bitDepth?: WavBitDepth;
305
+ ffmpegPath?: string;
306
+ encoding?: EncodingOptions;
307
+ }): WriteNode;
308
+
309
+ declare const cutRegionSchema: z.ZodObject<{
310
+ start: z.ZodNumber;
311
+ end: z.ZodNumber;
312
+ }, z.core.$strip>;
313
+ declare const schema$j: z.ZodObject<{
314
+ regions: z.ZodDefault<z.ZodArray<z.ZodObject<{
315
+ start: z.ZodNumber;
316
+ end: z.ZodNumber;
317
+ }, z.core.$strip>>>;
318
+ }, z.core.$strip>;
319
+ type CutRegion = z.infer<typeof cutRegionSchema>;
320
+ interface CutProperties extends z.infer<typeof schema$j>, TransformNodeProperties {
321
+ }
322
+ declare class CutStream extends BufferedTransformStream<CutProperties> {
323
+ private sortedRegions;
324
+ private removedFrames;
325
+ constructor(properties: CutProperties);
326
+ _unbuffer(chunk: AudioChunk): AudioChunk | undefined;
327
+ }
328
+ declare class CutNode extends TransformNode<CutProperties> {
329
+ static readonly moduleName = "Cut";
330
+ static readonly moduleDescription = "Remove a region of audio";
331
+ static readonly schema: z.ZodObject<{
332
+ regions: z.ZodDefault<z.ZodArray<z.ZodObject<{
333
+ start: z.ZodNumber;
334
+ end: z.ZodNumber;
335
+ }, z.core.$strip>>>;
336
+ }, z.core.$strip>;
337
+ static is(value: unknown): value is CutNode;
338
+ readonly type: readonly ["buffered-audio-node", "transform", "cut"];
339
+ createStream(): CutStream;
340
+ clone(overrides?: Partial<CutProperties>): CutNode;
341
+ }
342
+ declare function cut(regions: Array<CutRegion>, options?: {
343
+ id?: string;
344
+ }): CutNode;
345
+
346
+ declare const schema$i: z.ZodObject<{
347
+ bitDepth: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<16>, z.ZodLiteral<24>]>>;
348
+ noiseShaping: z.ZodDefault<z.ZodBoolean>;
349
+ }, z.core.$strip>;
350
+ interface DitherProperties extends z.infer<typeof schema$i>, TransformNodeProperties {
351
+ }
352
+ declare class DitherStream extends BufferedTransformStream<DitherProperties> {
353
+ private lastError;
354
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): Promise<void>;
355
+ _unbuffer(chunk: AudioChunk): AudioChunk;
356
+ }
357
+ declare class DitherNode extends TransformNode<DitherProperties> {
358
+ static readonly moduleName = "Dither";
359
+ static readonly moduleDescription = "Add shaped noise to reduce quantization distortion";
360
+ static readonly schema: z.ZodObject<{
361
+ bitDepth: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<16>, z.ZodLiteral<24>]>>;
362
+ noiseShaping: z.ZodDefault<z.ZodBoolean>;
363
+ }, z.core.$strip>;
364
+ static is(value: unknown): value is DitherNode;
365
+ readonly type: readonly ["buffered-audio-node", "transform", "dither"];
366
+ createStream(): DitherStream;
367
+ clone(overrides?: Partial<DitherProperties>): DitherNode;
368
+ }
369
+ declare function dither(bitDepth: 16 | 24, options?: {
370
+ noiseShaping?: boolean;
371
+ id?: string;
372
+ }): DitherNode;
373
+
374
+ declare const schema$h: z.ZodObject<{
375
+ ceiling: z.ZodDefault<z.ZodNumber>;
376
+ }, z.core.$strip>;
377
+ interface NormalizeProperties extends z.infer<typeof schema$h>, TransformNodeProperties {
378
+ }
379
+ declare class NormalizeStream extends BufferedTransformStream<NormalizeProperties> {
380
+ private peak;
381
+ private scale;
382
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): Promise<void>;
383
+ _process(_buffer: ChunkBuffer): void;
384
+ _unbuffer(chunk: AudioChunk): AudioChunk;
385
+ }
386
+ declare class NormalizeNode extends TransformNode<NormalizeProperties> {
387
+ static readonly moduleName = "Normalize";
388
+ static readonly moduleDescription = "Adjust peak or loudness level to a target ceiling";
389
+ static readonly schema: z.ZodObject<{
390
+ ceiling: z.ZodDefault<z.ZodNumber>;
391
+ }, z.core.$strip>;
392
+ static is(value: unknown): value is NormalizeNode;
393
+ readonly type: readonly ["buffered-audio-node", "transform", "normalize"];
394
+ constructor(properties: NormalizeProperties);
395
+ createStream(): NormalizeStream;
396
+ clone(overrides?: Partial<NormalizeProperties>): NormalizeNode;
397
+ }
398
+ declare function normalize(options?: {
399
+ ceiling?: number;
400
+ id?: string;
401
+ }): NormalizeNode;
402
+
403
+ declare const schema$g: z.ZodObject<{
404
+ before: z.ZodDefault<z.ZodNumber>;
405
+ after: z.ZodDefault<z.ZodNumber>;
406
+ }, z.core.$strip>;
407
+ interface PadProperties extends z.infer<typeof schema$g>, TransformNodeProperties {
408
+ }
409
+ declare class PadStream extends BufferedTransformStream<PadProperties> {
410
+ _process(buffer: ChunkBuffer): Promise<void>;
411
+ }
412
+ declare class PadNode extends TransformNode<PadProperties> {
413
+ static readonly moduleName = "Pad";
414
+ static readonly moduleDescription = "Add silence to start or end of audio";
415
+ static readonly schema: z.ZodObject<{
416
+ before: z.ZodDefault<z.ZodNumber>;
417
+ after: z.ZodDefault<z.ZodNumber>;
418
+ }, z.core.$strip>;
419
+ static is(value: unknown): value is PadNode;
420
+ readonly type: readonly ["buffered-audio-node", "transform", "pad"];
421
+ constructor(properties: PadProperties);
422
+ createStream(): PadStream;
423
+ clone(overrides?: Partial<PadProperties>): PadNode;
424
+ }
425
+ declare function pad(options: {
426
+ before?: number;
427
+ after?: number;
428
+ id?: string;
429
+ }): PadNode;
430
+
431
+ declare const schema$f: z.ZodObject<{
432
+ invert: z.ZodDefault<z.ZodBoolean>;
433
+ angle: z.ZodOptional<z.ZodNumber>;
434
+ }, z.core.$strip>;
435
+ interface PhaseProperties extends z.infer<typeof schema$f>, TransformNodeProperties {
436
+ }
437
+ declare class PhaseStream extends BufferedTransformStream<PhaseProperties> {
438
+ private allpassState;
439
+ _unbuffer(chunk: AudioChunk): AudioChunk;
440
+ private applyInvert;
441
+ private applyPhaseRotation;
442
+ }
443
+ declare class PhaseNode extends TransformNode<PhaseProperties> {
444
+ static readonly moduleName = "Phase";
445
+ static readonly moduleDescription = "Invert or rotate signal phase";
446
+ static readonly schema: z.ZodObject<{
447
+ invert: z.ZodDefault<z.ZodBoolean>;
448
+ angle: z.ZodOptional<z.ZodNumber>;
449
+ }, z.core.$strip>;
450
+ static is(value: unknown): value is PhaseNode;
451
+ readonly type: readonly ["buffered-audio-node", "transform", "phase"];
452
+ createStream(): PhaseStream;
453
+ clone(overrides?: Partial<PhaseProperties>): PhaseNode;
454
+ }
455
+ declare function phase(options?: {
456
+ invert?: boolean;
457
+ angle?: number;
458
+ id?: string;
459
+ }): PhaseNode;
460
+ declare function invert(options?: {
461
+ id?: string;
462
+ }): PhaseNode;
463
+
464
+ declare class ReverseStream extends BufferedTransformStream {
465
+ private spareBuffer?;
466
+ private spareChunkSize;
467
+ private spareInitialized;
468
+ private reverseMemoryLimit?;
469
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
470
+ private ensureSpareBuffer;
471
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): Promise<void>;
472
+ _process(buffer: ChunkBuffer): Promise<void>;
473
+ }
474
+ declare class ReverseNode extends TransformNode {
475
+ static readonly moduleName = "Reverse";
476
+ static readonly moduleDescription = "Reverse audio playback direction";
477
+ static readonly schema: z.ZodObject<{}, z.core.$strip>;
478
+ static is(value: unknown): value is ReverseNode;
479
+ readonly type: readonly ["buffered-audio-node", "transform", "reverse"];
480
+ constructor(properties?: TransformNodeProperties);
481
+ createStream(): ReverseStream;
482
+ clone(overrides?: Partial<TransformNodeProperties>): ReverseNode;
483
+ }
484
+ declare function reverse(options?: {
485
+ id?: string;
486
+ }): ReverseNode;
487
+
488
+ declare const schema$e: z.ZodObject<{
489
+ insertPath: z.ZodDefault<z.ZodString>;
490
+ insertAt: z.ZodDefault<z.ZodNumber>;
491
+ }, z.core.$strip>;
492
+ interface SpliceProperties extends z.infer<typeof schema$e>, TransformNodeProperties {
493
+ readonly channels?: ReadonlyArray<number>;
494
+ }
495
+ declare class SpliceStream extends BufferedTransformStream<SpliceProperties> {
496
+ private insertSamples;
497
+ private insertSampleRate;
498
+ private insertLength;
499
+ private sampleRateChecked;
500
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
501
+ _unbuffer(chunk: AudioChunk): AudioChunk;
502
+ }
503
+ declare class SpliceNode extends TransformNode<SpliceProperties> {
504
+ static readonly moduleName = "Splice";
505
+ static readonly moduleDescription = "Replace a region of audio with processed content";
506
+ static readonly schema: z.ZodObject<{
507
+ insertPath: z.ZodDefault<z.ZodString>;
508
+ insertAt: z.ZodDefault<z.ZodNumber>;
509
+ }, z.core.$strip>;
510
+ static is(value: unknown): value is SpliceNode;
511
+ readonly type: readonly ["buffered-audio-node", "transform", "splice"];
512
+ createStream(): SpliceStream;
513
+ clone(overrides?: Partial<SpliceProperties>): SpliceNode;
514
+ }
515
+ declare function splice(insertPath: string, insertAt: number, options?: {
516
+ channels?: ReadonlyArray<number>;
517
+ }): SpliceNode;
518
+
519
+ declare const schema$d: z.ZodObject<{
520
+ threshold: z.ZodDefault<z.ZodNumber>;
521
+ margin: z.ZodDefault<z.ZodNumber>;
522
+ start: z.ZodDefault<z.ZodBoolean>;
523
+ end: z.ZodDefault<z.ZodBoolean>;
524
+ }, z.core.$strip>;
525
+ interface TrimProperties extends z.infer<typeof schema$d>, TransformNodeProperties {
526
+ }
527
+ declare class TrimStream extends BufferedTransformStream<TrimProperties> {
528
+ _process(buffer: ChunkBuffer): Promise<void>;
529
+ }
530
+ declare class TrimNode extends TransformNode<TrimProperties> {
531
+ static readonly moduleName = "Trim";
532
+ static readonly moduleDescription = "Remove silence from start and end";
533
+ static readonly schema: z.ZodObject<{
534
+ threshold: z.ZodDefault<z.ZodNumber>;
535
+ margin: z.ZodDefault<z.ZodNumber>;
536
+ start: z.ZodDefault<z.ZodBoolean>;
537
+ end: z.ZodDefault<z.ZodBoolean>;
538
+ }, z.core.$strip>;
539
+ static is(value: unknown): value is TrimNode;
540
+ readonly type: readonly ["buffered-audio-node", "transform", "trim"];
541
+ constructor(properties: TrimProperties);
542
+ createStream(): TrimStream;
543
+ clone(overrides?: Partial<TrimProperties>): TrimNode;
544
+ }
545
+ declare function trim(options?: {
546
+ threshold?: number;
547
+ margin?: number;
548
+ start?: boolean;
549
+ end?: boolean;
550
+ id?: string;
551
+ }): TrimNode;
552
+
553
+ interface FfmpegProperties extends TransformNodeProperties {
554
+ readonly ffmpegPath: string;
555
+ readonly args?: Array<string> | ((context: StreamContext) => Array<string>);
556
+ }
557
+ declare class FfmpegStream<P extends FfmpegProperties = FfmpegProperties> extends BufferedTransformStream<P> {
558
+ private streamContext?;
559
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
560
+ protected _buildArgs(_context: StreamContext): Array<string>;
561
+ protected _buildOutputArgs(_context: StreamContext): Array<string>;
562
+ protected get ffmpegChannels(): number;
563
+ private _ffmpegChannels;
564
+ _process(buffer: ChunkBuffer): Promise<void>;
565
+ }
566
+ declare class FfmpegNode<P extends FfmpegProperties = FfmpegProperties> extends TransformNode<P> {
567
+ static readonly moduleName: string;
568
+ static readonly moduleDescription: string;
569
+ static readonly schema: z.ZodType;
570
+ static is(value: unknown): value is FfmpegNode;
571
+ readonly type: ReadonlyArray<string>;
572
+ constructor(properties: P);
573
+ createStream(): FfmpegStream<P>;
574
+ clone(overrides?: Partial<P>): FfmpegNode<P>;
575
+ }
576
+ declare function ffmpeg(options: {
577
+ ffmpegPath: string;
578
+ args: Array<string> | ((context: StreamContext) => Array<string>);
579
+ id?: string;
580
+ }): FfmpegNode;
581
+
582
+ interface LoudnessProperties extends FfmpegProperties {
583
+ readonly target: number;
584
+ readonly truePeak: number;
585
+ readonly lra?: number;
586
+ }
587
+ declare class LoudnessStream extends FfmpegStream<LoudnessProperties> {
588
+ private measuredValues?;
589
+ protected _buildArgs(_context: StreamContext): Array<string>;
590
+ _process(buffer: ChunkBuffer): Promise<void>;
591
+ private buildArgsWithMeasurement;
592
+ }
593
+ declare class LoudnessNode extends FfmpegNode<LoudnessProperties> {
594
+ static readonly moduleName = "Loudness";
595
+ static readonly moduleDescription = "Measure integrated, short-term, and momentary loudness";
596
+ static readonly schema: z.ZodObject<{
597
+ ffmpegPath: z.ZodDefault<z.ZodString>;
598
+ target: z.ZodDefault<z.ZodNumber>;
599
+ truePeak: z.ZodDefault<z.ZodNumber>;
600
+ lra: z.ZodDefault<z.ZodNumber>;
601
+ }, z.core.$strip>;
602
+ static is(value: unknown): value is LoudnessNode;
603
+ readonly type: readonly ["buffered-audio-node", "transform", "ffmpeg", "loudness"];
604
+ createStream(): LoudnessStream;
605
+ clone(overrides?: Partial<LoudnessProperties>): LoudnessNode;
606
+ }
607
+ declare function loudness(ffmpegPath: string, options?: {
608
+ target?: number;
609
+ truePeak?: number;
610
+ lra?: number;
611
+ id?: string;
612
+ }): LoudnessNode;
613
+
614
+ interface ResampleProperties extends FfmpegProperties {
615
+ readonly sampleRate: number;
616
+ readonly dither?: "triangular" | "lipshitz" | "none";
617
+ }
618
+ declare class ResampleStream extends FfmpegStream<ResampleProperties> {
619
+ _process(buffer: ChunkBuffer): Promise<void>;
620
+ protected _buildArgs(_context: StreamContext): Array<string>;
621
+ protected _buildOutputArgs(_context: StreamContext): Array<string>;
622
+ }
623
+ declare class ResampleNode extends FfmpegNode<ResampleProperties> {
624
+ static readonly moduleName = "Resample";
625
+ static readonly moduleDescription = "Change sample rate";
626
+ static readonly schema: z.ZodObject<{
627
+ ffmpegPath: z.ZodDefault<z.ZodString>;
628
+ sampleRate: z.ZodDefault<z.ZodNumber>;
629
+ dither: z.ZodDefault<z.ZodEnum<{
630
+ triangular: "triangular";
631
+ lipshitz: "lipshitz";
632
+ none: "none";
633
+ }>>;
634
+ }, z.core.$strip>;
635
+ static is(value: unknown): value is ResampleNode;
636
+ readonly type: readonly ["buffered-audio-node", "transform", "ffmpeg", "resample"];
637
+ createStream(): ResampleStream;
638
+ clone(overrides?: Partial<ResampleProperties>): ResampleNode;
639
+ }
640
+ declare function resample(ffmpegPath: string, sampleRate: number, options?: {
641
+ dither?: "triangular" | "lipshitz" | "none";
642
+ id?: string;
643
+ }): ResampleNode;
644
+
645
+ declare const schema$c: z.ZodObject<{
646
+ sensitivity: z.ZodDefault<z.ZodNumber>;
647
+ reduction: z.ZodDefault<z.ZodNumber>;
648
+ mode: z.ZodDefault<z.ZodEnum<{
649
+ remove: "remove";
650
+ attenuate: "attenuate";
651
+ }>>;
652
+ }, z.core.$strip>;
653
+ interface BreathControlProperties extends z.infer<typeof schema$c>, TransformNodeProperties {
654
+ }
655
+ declare class BreathControlStream extends BufferedTransformStream<BreathControlProperties> {
656
+ _process(buffer: ChunkBuffer): Promise<void>;
657
+ }
658
+ declare class BreathControlNode extends TransformNode<BreathControlProperties> {
659
+ static readonly moduleName = "Breath Control";
660
+ static readonly moduleDescription = "Attenuate or remove breath sounds between phrases";
661
+ static readonly schema: z.ZodObject<{
662
+ sensitivity: z.ZodDefault<z.ZodNumber>;
663
+ reduction: z.ZodDefault<z.ZodNumber>;
664
+ mode: z.ZodDefault<z.ZodEnum<{
665
+ remove: "remove";
666
+ attenuate: "attenuate";
667
+ }>>;
668
+ }, z.core.$strip>;
669
+ static is(value: unknown): value is BreathControlNode;
670
+ readonly type: readonly ["buffered-audio-node", "transform", "breath-control"];
671
+ constructor(properties: BreathControlProperties);
672
+ createStream(): BreathControlStream;
673
+ clone(overrides?: Partial<BreathControlProperties>): BreathControlNode;
674
+ }
675
+ declare function breathControl(options?: {
676
+ sensitivity?: number;
677
+ reduction?: number;
678
+ mode?: "remove" | "attenuate";
679
+ id?: string;
680
+ }): BreathControlNode;
681
+
682
+ declare const schema$b: z.ZodObject<{
683
+ referencePath: z.ZodDefault<z.ZodString>;
684
+ filterLength: z.ZodDefault<z.ZodNumber>;
685
+ stepSize: z.ZodDefault<z.ZodNumber>;
686
+ }, z.core.$strip>;
687
+ interface DeBleedProperties extends z.infer<typeof schema$b>, TransformNodeProperties {
688
+ }
689
+ declare class DeBleedStream extends BufferedTransformStream<DeBleedProperties> {
690
+ private referenceSignal;
691
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
692
+ _process(buffer: ChunkBuffer): Promise<void>;
693
+ }
694
+ declare class DeBleedNode extends TransformNode<DeBleedProperties> {
695
+ static readonly moduleName = "De-Bleed";
696
+ static readonly moduleDescription = "Reduce microphone bleed between channels";
697
+ static readonly schema: z.ZodObject<{
698
+ referencePath: z.ZodDefault<z.ZodString>;
699
+ filterLength: z.ZodDefault<z.ZodNumber>;
700
+ stepSize: z.ZodDefault<z.ZodNumber>;
701
+ }, z.core.$strip>;
702
+ static is(value: unknown): value is DeBleedNode;
703
+ readonly type: readonly ["buffered-audio-node", "transform", "de-bleed"];
704
+ constructor(properties: DeBleedProperties);
705
+ createStream(): DeBleedStream;
706
+ clone(overrides?: Partial<DeBleedProperties>): DeBleedNode;
707
+ }
708
+ declare function deBleed(referencePath: string, options?: {
709
+ filterLength?: number;
710
+ stepSize?: number;
711
+ id?: string;
712
+ }): DeBleedNode;
713
+
714
+ declare const schema$a: z.ZodObject<{
715
+ sensitivity: z.ZodDefault<z.ZodNumber>;
716
+ maxClickDuration: z.ZodDefault<z.ZodNumber>;
717
+ }, z.core.$strip>;
718
+ interface DeClickProperties extends z.infer<typeof schema$a>, TransformNodeProperties {
719
+ }
720
+ declare class DeClickStream extends BufferedTransformStream<DeClickProperties> {
721
+ _process(buffer: ChunkBuffer): Promise<void>;
722
+ }
723
+ /**
724
+ * Detects impulsive noise (clicks, pops) and removes them by momentarily
725
+ * ducking a low-pass filter over the click region. Clicks are high-frequency
726
+ * transients, so the LPF removes the click energy while preserving the
727
+ * underlying speech signal.
728
+ */
729
+ declare class DeClickNode<P extends DeClickProperties = DeClickProperties> extends TransformNode<P> {
730
+ static readonly moduleName: string;
731
+ static readonly moduleDescription = "Remove clicks, pops, and impulse artifacts";
732
+ static readonly schema: z.ZodType;
733
+ static is(value: unknown): value is DeClickNode;
734
+ readonly type: string[];
735
+ constructor(properties: BufferedAudioNodeInput<P>);
736
+ createStream(): DeClickStream;
737
+ clone(overrides?: Partial<DeClickProperties>): DeClickNode;
738
+ }
739
+ declare function deClick(options?: {
740
+ sensitivity?: number;
741
+ maxClickDuration?: number;
742
+ id?: string;
743
+ }): DeClickNode;
744
+
745
+ declare const schema$9: z.ZodObject<{
746
+ sensitivity: z.ZodDefault<z.ZodNumber>;
747
+ maxClickDuration: z.ZodDefault<z.ZodNumber>;
748
+ }, z.core.$strip>;
749
+ interface DeCrackleProperties extends z.infer<typeof schema$9>, DeClickProperties {
750
+ }
751
+ declare class DeCrackleNode extends DeClickNode<DeCrackleProperties> {
752
+ static readonly moduleName: string;
753
+ static readonly schema: z.ZodObject<{
754
+ sensitivity: z.ZodDefault<z.ZodNumber>;
755
+ maxClickDuration: z.ZodDefault<z.ZodNumber>;
756
+ }, z.core.$strip>;
757
+ static is(value: unknown): value is DeCrackleNode;
758
+ readonly type: string[];
759
+ constructor(properties: BufferedAudioNodeInput<DeCrackleProperties>);
760
+ clone(overrides?: Partial<DeCrackleProperties>): DeCrackleNode;
761
+ }
762
+ declare function deCrackle(options?: {
763
+ sensitivity?: number;
764
+ id?: string;
765
+ }): DeCrackleNode;
766
+
767
+ declare const mouthDeClickSchema: z.ZodObject<{
768
+ sensitivity: z.ZodDefault<z.ZodNumber>;
769
+ maxClickDuration: z.ZodDefault<z.ZodNumber>;
770
+ }, z.core.$strip>;
771
+ interface MouthDeClickProperties extends z.infer<typeof mouthDeClickSchema>, DeClickProperties {
772
+ }
773
+ declare class MouthDeClickNode extends DeClickNode<MouthDeClickProperties> {
774
+ static readonly moduleName: string;
775
+ static readonly schema: z.ZodObject<{
776
+ sensitivity: z.ZodDefault<z.ZodNumber>;
777
+ maxClickDuration: z.ZodDefault<z.ZodNumber>;
778
+ }, z.core.$strip>;
779
+ static is(value: unknown): value is MouthDeClickNode;
780
+ readonly type: string[];
781
+ constructor(properties: BufferedAudioNodeInput<MouthDeClickProperties>);
782
+ clone(overrides?: Partial<MouthDeClickProperties>): MouthDeClickNode;
783
+ }
784
+ declare function mouthDeClick(options?: {
785
+ sensitivity?: number;
786
+ id?: string;
787
+ }): MouthDeClickNode;
788
+
789
+ declare const schema$8: z.ZodObject<{
790
+ threshold: z.ZodDefault<z.ZodNumber>;
791
+ method: z.ZodDefault<z.ZodEnum<{
792
+ ar: "ar";
793
+ sparse: "sparse";
794
+ }>>;
795
+ }, z.core.$strip>;
796
+ interface DeClipProperties extends z.infer<typeof schema$8>, TransformNodeProperties {
797
+ }
798
+ /**
799
+ * Detects clipped samples and reconstructs the original waveform using
800
+ * iterative AR interpolation.
801
+ *
802
+ * @see Janssen, A.J.E.M., Veldhuis, R.N.J., Vries, L.B. (1986). "Adaptive interpolation of
803
+ * discrete-time signals that can be modeled as autoregressive processes."
804
+ * IEEE TASSP, 34(2), 317-330. https://doi.org/10.1109/TASSP.1986.1164824
805
+ * @see Zaviska, P., Rajmic, P., Ozerov, A., Rencker, L. (2021). "A Survey and an Extensive
806
+ * Evaluation of Popular Audio Declipping Methods."
807
+ * IEEE JSTSP, 15(1), 5-24. https://doi.org/10.1109/JSTSP.2020.3042071
808
+ */
809
+ declare class DeClipStream extends BufferedTransformStream<DeClipProperties> {
810
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): void | Promise<void>;
811
+ _process(buffer: ChunkBuffer): Promise<void>;
812
+ }
813
+ declare class DeClipNode extends TransformNode<DeClipProperties> {
814
+ static readonly moduleName = "De-Clip";
815
+ static readonly moduleDescription = "Restore clipped audio peaks";
816
+ static readonly schema: z.ZodObject<{
817
+ threshold: z.ZodDefault<z.ZodNumber>;
818
+ method: z.ZodDefault<z.ZodEnum<{
819
+ ar: "ar";
820
+ sparse: "sparse";
821
+ }>>;
822
+ }, z.core.$strip>;
823
+ static is(value: unknown): value is DeClipNode;
824
+ readonly type: readonly ["buffered-audio-node", "transform", "de-clip"];
825
+ createStream(): DeClipStream;
826
+ clone(overrides?: Partial<DeClipProperties>): DeClipNode;
827
+ }
828
+ declare function deClip(options?: {
829
+ threshold?: number;
830
+ method?: "ar" | "sparse";
831
+ id?: string;
832
+ }): DeClipNode;
833
+
834
+ declare const schema$7: z.ZodObject<{
835
+ sensitivity: z.ZodDefault<z.ZodNumber>;
836
+ frequency: z.ZodDefault<z.ZodNumber>;
837
+ }, z.core.$strip>;
838
+ interface DePlosiveProperties extends z.infer<typeof schema$7>, TransformNodeProperties {
839
+ }
840
+ declare class DePlosiveStream extends BufferedTransformStream<DePlosiveProperties> {
841
+ private lpState;
842
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): void | Promise<void>;
843
+ _unbuffer(chunk: AudioChunk): AudioChunk;
844
+ }
845
+ declare class DePlosiveNode extends TransformNode<DePlosiveProperties> {
846
+ static readonly moduleName = "De-Plosive";
847
+ static readonly moduleDescription = "Reduce plosive bursts (p, b, t, d sounds)";
848
+ static readonly schema: z.ZodObject<{
849
+ sensitivity: z.ZodDefault<z.ZodNumber>;
850
+ frequency: z.ZodDefault<z.ZodNumber>;
851
+ }, z.core.$strip>;
852
+ static is(value: unknown): value is DePlosiveNode;
853
+ readonly type: readonly ["buffered-audio-node", "transform", "de-plosive"];
854
+ createStream(): DePlosiveStream;
855
+ clone(overrides?: Partial<DePlosiveProperties>): DePlosiveNode;
856
+ }
857
+ declare function dePlosive(options?: {
858
+ sensitivity?: number;
859
+ frequency?: number;
860
+ id?: string;
861
+ }): DePlosiveNode;
862
+
863
+ declare const schema$6: z.ZodObject<{
864
+ predictionDelay: z.ZodDefault<z.ZodNumber>;
865
+ filterLength: z.ZodDefault<z.ZodNumber>;
866
+ iterations: z.ZodDefault<z.ZodNumber>;
867
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
868
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
869
+ }, z.core.$strip>;
870
+ interface DeReverbProperties extends z.infer<typeof schema$6>, TransformNodeProperties {
871
+ }
872
+ /**
873
+ * Reduces late reverberation from speech using the Weighted Prediction Error (WPE) algorithm.
874
+ * WPE models reverb as a linear prediction problem in the STFT domain — for each frequency bin,
875
+ * it estimates how past frames predict the current frame's reverberant tail, then subtracts that
876
+ * prediction. This is a classical signal processing approach: fully deterministic, tunable via
877
+ * prediction delay and filter length, and requires no pretrained model. The tradeoff is compute
878
+ * cost — WPE solves a linear system per frequency bin per iteration, which scales linearly with
879
+ * audio length but with a large constant factor. Best suited for offline processing or when
880
+ * precise parameter control is needed. For faster real-time dereverberation, consider a
881
+ * neural-network-based alternative.
882
+ *
883
+ * @see Nakatani, T., Yoshioka, T., Kinoshita, K., Miyoshi, M., Juang, B.H. (2010).
884
+ * "Speech Dereverberation Based on Variance-Normalized Delayed Linear Prediction."
885
+ * IEEE TASLP, 18(7), 1717-1731. https://doi.org/10.1109/TASL.2010.2052251
886
+ */
887
+ declare class DeReverbStream extends BufferedTransformStream<DeReverbProperties> {
888
+ private fftBackend?;
889
+ private fftAddonOptions?;
890
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
891
+ _process(buffer: ChunkBuffer): Promise<void>;
892
+ }
893
+ declare class DeReverbNode extends TransformNode<DeReverbProperties> {
894
+ static readonly moduleName = "De-Reverb (WPE)";
895
+ static readonly moduleDescription = "Reduce room reverb using Weighted Prediction Error \u2014 classical DSP, fully tunable, no model required";
896
+ static readonly schema: z.ZodObject<{
897
+ predictionDelay: z.ZodDefault<z.ZodNumber>;
898
+ filterLength: z.ZodDefault<z.ZodNumber>;
899
+ iterations: z.ZodDefault<z.ZodNumber>;
900
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
901
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
902
+ }, z.core.$strip>;
903
+ static is(value: unknown): value is DeReverbNode;
904
+ readonly type: readonly ["buffered-audio-node", "transform", "de-reverb"];
905
+ constructor(properties: DeReverbProperties);
906
+ createStream(): DeReverbStream;
907
+ clone(overrides?: Partial<DeReverbProperties>): DeReverbNode;
908
+ }
909
+ declare function deReverb(options?: {
910
+ sensitivity?: number;
911
+ predictionDelay?: number;
912
+ filterLength?: number;
913
+ iterations?: number;
914
+ vkfftAddonPath?: string;
915
+ fftwAddonPath?: string;
916
+ id?: string;
917
+ }): DeReverbNode;
918
+
919
+ declare const schema$5: z.ZodObject<{
920
+ modelPath: z.ZodDefault<z.ZodString>;
921
+ ffmpegPath: z.ZodDefault<z.ZodString>;
922
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
923
+ highPass: z.ZodDefault<z.ZodNumber>;
924
+ lowPass: z.ZodDefault<z.ZodNumber>;
925
+ }, z.core.$strip>;
926
+ interface DialogueIsolateProperties extends z.infer<typeof schema$5>, TransformNodeProperties {
927
+ }
928
+ declare class DialogueIsolateStream extends BufferedTransformStream<DialogueIsolateProperties> {
929
+ private session;
930
+ private fftInstance;
931
+ constructor(properties: DialogueIsolateProperties);
932
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
933
+ _process(buffer: ChunkBuffer): Promise<void>;
934
+ }
935
+ declare class DialogueIsolateNode extends TransformNode<DialogueIsolateProperties> {
936
+ static readonly moduleName = "Dialogue Isolate";
937
+ static readonly moduleDescription = "Isolate dialogue from background using MDX-Net vocal separation";
938
+ static readonly schema: z.ZodObject<{
939
+ modelPath: z.ZodDefault<z.ZodString>;
940
+ ffmpegPath: z.ZodDefault<z.ZodString>;
941
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
942
+ highPass: z.ZodDefault<z.ZodNumber>;
943
+ lowPass: z.ZodDefault<z.ZodNumber>;
944
+ }, z.core.$strip>;
945
+ static is(value: unknown): value is DialogueIsolateNode;
946
+ readonly type: readonly ["buffered-audio-node", "transform", "dialogue-isolate"];
947
+ constructor(properties: DialogueIsolateProperties);
948
+ createStream(): DialogueIsolateStream;
949
+ clone(overrides?: Partial<DialogueIsolateProperties>): DialogueIsolateNode;
950
+ }
951
+ declare function dialogueIsolate(options: {
952
+ modelPath: string;
953
+ ffmpegPath: string;
954
+ onnxAddonPath?: string;
955
+ highPass?: number;
956
+ lowPass?: number;
957
+ id?: string;
958
+ }): DialogueIsolateNode;
959
+
960
+ declare const schema$4: z.ZodObject<{
961
+ referencePath: z.ZodDefault<z.ZodString>;
962
+ smoothing: z.ZodDefault<z.ZodNumber>;
963
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
964
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
965
+ }, z.core.$strip>;
966
+ interface EqMatchProperties extends z.infer<typeof schema$4>, TransformNodeProperties {
967
+ }
968
+ /**
969
+ * Analyzes a reference file's spectral profile and applies a correction filter
970
+ * to match the target signal's spectrum to the reference.
971
+ *
972
+ * @see Valimaki, V., Reiss, J.D. (2016). "All About Audio Equalization: Solutions and
973
+ * Frontiers." Applied Sciences, 6(5), 129. https://doi.org/10.3390/app6050129
974
+ */
975
+ declare class EqMatchStream extends BufferedTransformStream<EqMatchProperties> {
976
+ private referenceSpectrum?;
977
+ private fftBackend?;
978
+ private fftAddonOptions?;
979
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
980
+ _process(buffer: ChunkBuffer): Promise<void>;
981
+ }
982
+ declare class EqMatchNode extends TransformNode<EqMatchProperties> {
983
+ static readonly moduleName = "EQ Match";
984
+ static readonly moduleDescription = "Match frequency response to a reference profile";
985
+ static readonly schema: z.ZodObject<{
986
+ referencePath: z.ZodDefault<z.ZodString>;
987
+ smoothing: z.ZodDefault<z.ZodNumber>;
988
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
989
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
990
+ }, z.core.$strip>;
991
+ static is(value: unknown): value is EqMatchNode;
992
+ readonly type: readonly ["buffered-audio-node", "transform", "eq-match"];
993
+ constructor(properties: EqMatchProperties);
994
+ createStream(): EqMatchStream;
995
+ clone(overrides?: Partial<EqMatchProperties>): EqMatchNode;
996
+ }
997
+ declare function eqMatch(referencePath: string, options?: {
998
+ smoothing?: number;
999
+ vkfftAddonPath?: string;
1000
+ fftwAddonPath?: string;
1001
+ id?: string;
1002
+ }): EqMatchNode;
1003
+
1004
+ declare const schema$3: z.ZodObject<{
1005
+ target: z.ZodDefault<z.ZodNumber>;
1006
+ window: z.ZodDefault<z.ZodNumber>;
1007
+ speed: z.ZodDefault<z.ZodNumber>;
1008
+ maxGain: z.ZodDefault<z.ZodNumber>;
1009
+ maxCut: z.ZodDefault<z.ZodNumber>;
1010
+ }, z.core.$strip>;
1011
+ interface LevelerProperties extends z.infer<typeof schema$3>, TransformNodeProperties {
1012
+ }
1013
+ declare class LevelerStream extends BufferedTransformStream<LevelerProperties> {
1014
+ private windowSamples;
1015
+ private currentGainDb;
1016
+ private windowSeconds;
1017
+ constructor(properties: LevelerProperties);
1018
+ _buffer(chunk: AudioChunk, buffer: ChunkBuffer): void | Promise<void>;
1019
+ _process(_buffer: ChunkBuffer): void;
1020
+ _unbuffer(chunk: AudioChunk): AudioChunk;
1021
+ }
1022
+ declare class LevelerNode extends TransformNode<LevelerProperties> {
1023
+ static readonly moduleName = "Leveler";
1024
+ static readonly moduleDescription = "Smooth volume variations for consistent loudness";
1025
+ static readonly schema: z.ZodObject<{
1026
+ target: z.ZodDefault<z.ZodNumber>;
1027
+ window: z.ZodDefault<z.ZodNumber>;
1028
+ speed: z.ZodDefault<z.ZodNumber>;
1029
+ maxGain: z.ZodDefault<z.ZodNumber>;
1030
+ maxCut: z.ZodDefault<z.ZodNumber>;
1031
+ }, z.core.$strip>;
1032
+ static is(value: unknown): value is LevelerNode;
1033
+ readonly type: readonly ["buffered-audio-node", "transform", "leveler"];
1034
+ createStream(): LevelerStream;
1035
+ clone(overrides?: Partial<LevelerProperties>): LevelerNode;
1036
+ }
1037
+ declare function leveler(options?: {
1038
+ target?: number;
1039
+ window?: number;
1040
+ speed?: number;
1041
+ maxGain?: number;
1042
+ maxCut?: number;
1043
+ id?: string;
1044
+ }): LevelerNode;
1045
+
1046
+ interface StemGains {
1047
+ readonly vocals: number;
1048
+ readonly drums: number;
1049
+ readonly bass: number;
1050
+ readonly other: number;
1051
+ }
1052
+ declare const schema$2: z.ZodObject<{
1053
+ modelPath: z.ZodDefault<z.ZodString>;
1054
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1055
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
1056
+ highPass: z.ZodDefault<z.ZodNumber>;
1057
+ lowPass: z.ZodDefault<z.ZodNumber>;
1058
+ }, z.core.$strip>;
1059
+ interface MusicRebalanceProperties extends z.infer<typeof schema$2>, TransformNodeProperties {
1060
+ readonly stems: StemGains;
1061
+ }
1062
+ declare class MusicRebalanceStream extends BufferedTransformStream<MusicRebalanceProperties> {
1063
+ private session;
1064
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
1065
+ _process(buffer: ChunkBuffer): Promise<void>;
1066
+ }
1067
+ declare class MusicRebalanceNode extends TransformNode<MusicRebalanceProperties> {
1068
+ static readonly moduleName = "Music Rebalance";
1069
+ static readonly moduleDescription = "Rebalance stem volumes using HTDemucs source separation";
1070
+ static readonly schema: z.ZodObject<{
1071
+ modelPath: z.ZodDefault<z.ZodString>;
1072
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1073
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
1074
+ highPass: z.ZodDefault<z.ZodNumber>;
1075
+ lowPass: z.ZodDefault<z.ZodNumber>;
1076
+ }, z.core.$strip>;
1077
+ static is(value: unknown): value is MusicRebalanceNode;
1078
+ readonly type: readonly ["buffered-audio-node", "transform", "music-rebalance"];
1079
+ constructor(properties: MusicRebalanceProperties);
1080
+ createStream(): MusicRebalanceStream;
1081
+ clone(overrides?: Partial<MusicRebalanceProperties>): MusicRebalanceNode;
1082
+ }
1083
+ declare function musicRebalance(modelPath: string, stems: Partial<StemGains>, options?: {
1084
+ ffmpegPath?: string;
1085
+ onnxAddonPath?: string;
1086
+ id?: string;
1087
+ }): MusicRebalanceNode;
1088
+
1089
+ interface PitchShiftProperties extends FfmpegProperties {
1090
+ readonly semitones: number;
1091
+ readonly cents?: number;
1092
+ }
1093
+ declare class PitchShiftStream extends FfmpegStream<PitchShiftProperties> {
1094
+ protected _buildArgs(_context: StreamContext): Array<string>;
1095
+ }
1096
+ declare class PitchShiftNode extends FfmpegNode<PitchShiftProperties> {
1097
+ static readonly moduleName = "Pitch Shift";
1098
+ static readonly moduleDescription = "Change pitch without affecting duration";
1099
+ static readonly schema: z.ZodObject<{
1100
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1101
+ semitones: z.ZodDefault<z.ZodNumber>;
1102
+ cents: z.ZodDefault<z.ZodNumber>;
1103
+ }, z.core.$strip>;
1104
+ static is(value: unknown): value is PitchShiftNode;
1105
+ readonly type: readonly ["buffered-audio-node", "transform", "ffmpeg", "pitch-shift"];
1106
+ createStream(): PitchShiftStream;
1107
+ clone(overrides?: Partial<PitchShiftProperties>): PitchShiftNode;
1108
+ }
1109
+ declare function pitchShift(ffmpegPath: string, semitones: number, options?: {
1110
+ cents?: number;
1111
+ id?: string;
1112
+ }): PitchShiftNode;
1113
+
1114
+ interface SpectralRegion {
1115
+ readonly startTime: number;
1116
+ readonly endTime: number;
1117
+ readonly startFreq: number;
1118
+ readonly endFreq: number;
1119
+ }
1120
+
1121
+ declare const schema$1: z.ZodObject<{
1122
+ method: z.ZodDefault<z.ZodEnum<{
1123
+ ar: "ar";
1124
+ nmf: "nmf";
1125
+ }>>;
1126
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
1127
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
1128
+ }, z.core.$strip>;
1129
+ interface SpectralRepairProperties extends z.infer<typeof schema$1>, TransformNodeProperties {
1130
+ readonly regions: Array<SpectralRegion>;
1131
+ }
1132
+ /**
1133
+ * Reconstructs damaged or missing regions in the spectrogram using
1134
+ * time-frequency domain AR interpolation.
1135
+ *
1136
+ * @see Mokry, O., Balusik, P., Rajmic, P. (2024). "Janssen 2.0: Audio Inpainting in the
1137
+ * Time-frequency Domain." arXiv:2409.06392. https://arxiv.org/abs/2409.06392
1138
+ */
1139
+ declare class SpectralRepairStream extends BufferedTransformStream<SpectralRepairProperties> {
1140
+ private fftBackend?;
1141
+ private fftAddonOptions?;
1142
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
1143
+ _process(buffer: ChunkBuffer): Promise<void>;
1144
+ }
1145
+ declare class SpectralRepairNode extends TransformNode<SpectralRepairProperties> {
1146
+ static readonly moduleName = "Spectral Repair";
1147
+ static readonly moduleDescription = "Repair spectral artifacts by interpolating from surrounding content";
1148
+ static readonly schema: z.ZodObject<{
1149
+ method: z.ZodDefault<z.ZodEnum<{
1150
+ ar: "ar";
1151
+ nmf: "nmf";
1152
+ }>>;
1153
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
1154
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
1155
+ }, z.core.$strip>;
1156
+ static is(value: unknown): value is SpectralRepairNode;
1157
+ readonly type: readonly ["buffered-audio-node", "transform", "spectral-repair"];
1158
+ constructor(properties: SpectralRepairProperties);
1159
+ createStream(): SpectralRepairStream;
1160
+ clone(overrides?: Partial<SpectralRepairProperties>): SpectralRepairNode;
1161
+ }
1162
+ declare function spectralRepair(regions: Array<SpectralRegion>, options?: {
1163
+ method?: "ar" | "nmf";
1164
+ vkfftAddonPath?: string;
1165
+ fftwAddonPath?: string;
1166
+ id?: string;
1167
+ }): SpectralRepairNode;
1168
+
1169
+ interface TimeStretchProperties extends FfmpegProperties {
1170
+ readonly rate: number;
1171
+ }
1172
+ declare class TimeStretchStream extends FfmpegStream<TimeStretchProperties> {
1173
+ protected _buildArgs(_context: StreamContext): Array<string>;
1174
+ }
1175
+ declare class TimeStretchNode extends FfmpegNode<TimeStretchProperties> {
1176
+ static readonly moduleName = "Time Stretch";
1177
+ static readonly moduleDescription = "Change duration without affecting pitch";
1178
+ static readonly schema: z.ZodObject<{
1179
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1180
+ rate: z.ZodDefault<z.ZodNumber>;
1181
+ }, z.core.$strip>;
1182
+ static is(value: unknown): value is TimeStretchNode;
1183
+ readonly type: readonly ["buffered-audio-node", "transform", "ffmpeg", "time-stretch"];
1184
+ createStream(): TimeStretchStream;
1185
+ clone(overrides?: Partial<TimeStretchProperties>): TimeStretchNode;
1186
+ }
1187
+ declare function timeStretch(ffmpegPath: string, rate: number, options?: {
1188
+ id?: string;
1189
+ }): TimeStretchNode;
1190
+
1191
+ declare const schema: z.ZodObject<{
1192
+ modelPath1: z.ZodDefault<z.ZodString>;
1193
+ modelPath2: z.ZodDefault<z.ZodString>;
1194
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1195
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
1196
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
1197
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
1198
+ }, z.core.$strip>;
1199
+ interface VoiceDenoiseProperties extends z.infer<typeof schema>, TransformNodeProperties {
1200
+ }
1201
+ declare class VoiceDenoiseStream extends BufferedTransformStream<VoiceDenoiseProperties> {
1202
+ private session1;
1203
+ private session2;
1204
+ private fftBackend?;
1205
+ private fftAddonOptions?;
1206
+ _setup(input: ReadableStream<AudioChunk>, context: StreamContext): Promise<ReadableStream<AudioChunk>>;
1207
+ _process(buffer: ChunkBuffer): Promise<void>;
1208
+ }
1209
+ declare class VoiceDenoiseNode extends TransformNode<VoiceDenoiseProperties> {
1210
+ static readonly moduleName = "Voice Denoise";
1211
+ static readonly moduleDescription = "Remove background noise from speech using DTLN neural network";
1212
+ static readonly schema: z.ZodObject<{
1213
+ modelPath1: z.ZodDefault<z.ZodString>;
1214
+ modelPath2: z.ZodDefault<z.ZodString>;
1215
+ ffmpegPath: z.ZodDefault<z.ZodString>;
1216
+ onnxAddonPath: z.ZodDefault<z.ZodString>;
1217
+ vkfftAddonPath: z.ZodDefault<z.ZodString>;
1218
+ fftwAddonPath: z.ZodDefault<z.ZodString>;
1219
+ }, z.core.$strip>;
1220
+ static is(value: unknown): value is VoiceDenoiseNode;
1221
+ readonly type: readonly ["buffered-audio-node", "transform", "voice-denoise"];
1222
+ constructor(properties: VoiceDenoiseProperties);
1223
+ createStream(): VoiceDenoiseStream;
1224
+ clone(overrides?: Partial<VoiceDenoiseProperties>): VoiceDenoiseNode;
1225
+ }
1226
+ declare function voiceDenoise(options: {
1227
+ modelPath1: string;
1228
+ modelPath2: string;
1229
+ ffmpegPath: string;
1230
+ onnxAddonPath?: string;
1231
+ vkfftAddonPath?: string;
1232
+ fftwAddonPath?: string;
1233
+ id?: string;
1234
+ }): VoiceDenoiseNode;
1235
+
1236
+ export { BreathControlNode, type BreathControlProperties, BreathControlStream, CutNode, type CutProperties, type CutRegion, CutStream, DeBleedNode, type DeBleedProperties, DeBleedStream, DeClickNode, type DeClickProperties, DeClickStream, DeClipNode, type DeClipProperties, DeClipStream, DeCrackleNode, type DeCrackleProperties, DePlosiveNode, type DePlosiveProperties, DePlosiveStream, DeReverbNode, type DeReverbProperties, DeReverbStream, DialogueIsolateNode, type DialogueIsolateProperties, DialogueIsolateStream, DitherNode, type DitherProperties, DitherStream, type EncodingOptions, EqMatchNode, type EqMatchProperties, EqMatchStream, FfmpegNode, type FfmpegProperties, FfmpegStream, type FrequencyScale, LevelerNode, type LevelerProperties, LevelerStream, LoudnessNode, type LoudnessProperties, type LoudnessStats, LoudnessStatsNode, LoudnessStatsStream, LoudnessStream, MouthDeClickNode, type MouthDeClickProperties, MusicRebalanceNode, type MusicRebalanceProperties, MusicRebalanceStream, NormalizeNode, type NormalizeProperties, NormalizeStream, PadNode, type PadProperties, PadStream, PhaseNode, type PhaseProperties, PhaseStream, PitchShiftNode, type PitchShiftProperties, ReadFfmpegNode, type ReadFfmpegProperties, ReadFfmpegStream, ReadNode, type ReadProperties, ReadWavNode, type ReadWavProperties, ReadWavStream, ResampleNode, type ResampleProperties, ReverseNode, ReverseStream, type SpectralRegion, SpectralRepairNode, type SpectralRepairProperties, SpectralRepairStream, SpectrogramNode, type SpectrogramProperties, SpectrogramStream, SpliceNode, type SpliceProperties, SpliceStream, type StemGains, TimeStretchNode, type TimeStretchProperties, TrimNode, type TrimProperties, TrimStream, VoiceDenoiseNode, type VoiceDenoiseProperties, VoiceDenoiseStream, type WavBitDepth, WaveformNode, type WaveformProperties, WaveformStream, WriteNode, type WriteProperties, WriteStream, breathControl, cut, deBleed, deClick, deClip, deCrackle, dePlosive, deReverb, dialogueIsolate, dither, eqMatch, ffmpeg, ffmpegSchema, invert, leveler, loudness, loudnessStats, mouthDeClick, musicRebalance, normalize, pad, phase, pitchShift, read, readFfmpeg, readSample, readWav, resample, reverse, spectralRepair, spectrogram, splice, timeStretch, trim, voiceDenoise, wavSchema, waveform, write };