@nice2dev/ui-audio 0.1.0 → 1.0.3
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/CHANGELOG.md +217 -1
- package/dist/__benchmarks__/audio-latency.bench.d.ts +2 -0
- package/dist/__benchmarks__/audio-latency.bench.d.ts.map +1 -0
- package/dist/constants/index.d.ts +6 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/karaokeScoringConfig.d.ts.map +1 -1
- package/dist/core/NiceAudioErrorBoundary.d.ts +28 -0
- package/dist/core/NiceAudioErrorBoundary.d.ts.map +1 -0
- package/dist/editor/NiceSampleBrowser.d.ts +79 -0
- package/dist/editor/NiceSampleBrowser.d.ts.map +1 -0
- package/dist/editor/Waveform.d.ts +53 -1
- package/dist/editor/Waveform.d.ts.map +1 -1
- package/dist/editor/hooks/useProjectCRUD.d.ts.map +1 -1
- package/dist/editor/nav/SaveLoadControls.d.ts.map +1 -1
- package/dist/editor/useEditorRecording.d.ts.map +1 -1
- package/dist/engine/NiceAudioEffects.d.ts +186 -0
- package/dist/engine/NiceAudioEffects.d.ts.map +1 -0
- package/dist/engine/NiceAudioEffectsRack.d.ts +17 -0
- package/dist/engine/NiceAudioEffectsRack.d.ts.map +1 -0
- package/dist/engine/NiceAudioWorklet.d.ts +184 -0
- package/dist/engine/NiceAudioWorklet.d.ts.map +1 -0
- package/dist/engine/NiceMultitrackExport.d.ts +165 -0
- package/dist/engine/NiceMultitrackExport.d.ts.map +1 -0
- package/dist/engine/audioContext.d.ts.map +1 -1
- package/dist/engine/audioKeyboard.d.ts.map +1 -1
- package/dist/engine/audioPlaybackEngine.d.ts.map +1 -1
- package/dist/index.cjs +373 -34
- package/dist/index.d.ts +95 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +9988 -5652
- package/dist/karaoke/AudioPitchAnalyzer.d.ts.map +1 -1
- package/dist/karaoke/KaraokeSummaryOverlay.d.ts +22 -0
- package/dist/karaoke/KaraokeSummaryOverlay.d.ts.map +1 -0
- package/dist/karaoke/rendering/fontCatalog.d.ts.map +1 -1
- package/dist/karaoke/rendering/glossyBarRenderer.d.ts.map +1 -1
- package/dist/karaoke/rendering/karaokeLyrics.d.ts.map +1 -1
- package/dist/karaoke/rendering/karaokeNoteParsing.d.ts.map +1 -1
- package/dist/karaoke/rendering/karaokeSettings.d.ts.map +1 -1
- package/dist/karaoke/rendering/karaokeTimelineRenderer.d.ts.map +1 -1
- package/dist/karaoke/rendering/karaokeTimelineTypes.d.ts.map +1 -1
- package/dist/lighting/NiceDMXTimeline.d.ts +226 -0
- package/dist/lighting/NiceDMXTimeline.d.ts.map +1 -0
- package/dist/models/index.d.ts +16 -0
- package/dist/models/index.d.ts.map +1 -0
- package/dist/models/modelsAiVideo.d.ts.map +1 -1
- package/dist/player/GenericPlayer.d.ts +34 -1
- package/dist/player/GenericPlayer.d.ts.map +1 -1
- package/dist/playlist/GenericPlaylist.d.ts.map +1 -1
- package/dist/playlist/PlaylistBrowser.d.ts.map +1 -1
- package/dist/playlist/PlaylistImportWizard.d.ts +42 -0
- package/dist/playlist/PlaylistImportWizard.d.ts.map +1 -0
- package/dist/playlist/PlaylistList.d.ts.map +1 -1
- package/dist/radio/NiceRadioPlayer.d.ts +141 -0
- package/dist/radio/NiceRadioPlayer.d.ts.map +1 -0
- package/dist/streaming/NiceStreamingVisualizer.d.ts +86 -0
- package/dist/streaming/NiceStreamingVisualizer.d.ts.map +1 -0
- package/dist/streaming/NiceVoiceChatOverlay.d.ts +97 -0
- package/dist/streaming/NiceVoiceChatOverlay.d.ts.map +1 -0
- package/dist/streaming/index.d.ts +11 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/liveStreamManager.d.ts +194 -0
- package/dist/streaming/liveStreamManager.d.ts.map +1 -0
- package/dist/streaming/useLiveStream.d.ts +19 -0
- package/dist/streaming/useLiveStream.d.ts.map +1 -0
- package/dist/streaming/webrtcAudio.d.ts +111 -0
- package/dist/streaming/webrtcAudio.d.ts.map +1 -0
- package/dist/ui-audio.css +1 -1
- package/dist/utils/BaseStreamClient.d.ts.map +1 -1
- package/dist/utils/audioDragDrop.d.ts +72 -0
- package/dist/utils/audioDragDrop.d.ts.map +1 -0
- package/dist/utils/crepeStreaming.d.ts.map +1 -1
- package/dist/utils/index.d.ts +40 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/latencyEstimate.d.ts +1 -1
- package/dist/utils/latencyEstimate.d.ts.map +1 -1
- package/dist/utils/midiCCMapping.d.ts +93 -0
- package/dist/utils/midiCCMapping.d.ts.map +1 -0
- package/dist/utils/musicPlayerUtils.d.ts.map +1 -1
- package/dist/utils/pianoRollUtils.d.ts +58 -0
- package/dist/utils/pianoRollUtils.d.ts.map +1 -0
- package/dist/utils/sanitize.d.ts +24 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/shortcutManager.d.ts +81 -0
- package/dist/utils/shortcutManager.d.ts.map +1 -0
- package/dist/utils/undoRedoUtils.d.ts +45 -0
- package/dist/utils/undoRedoUtils.d.ts.map +1 -1
- package/dist/workers/audioWorkletProcessor.d.ts +92 -0
- package/dist/workers/audioWorkletProcessor.d.ts.map +1 -0
- package/dist/workers/useAudioWorklet.d.ts +82 -0
- package/dist/workers/useAudioWorklet.d.ts.map +1 -0
- package/dist/workers/useWorker.d.ts +1 -0
- package/dist/workers/useWorker.d.ts.map +1 -1
- package/package.json +64 -19
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { EffectType, EffectParams, EffectInstance, NiceAudioEffectsChain } from './NiceAudioEffects';
|
|
3
|
+
export interface NiceAudioEffectsRackProps {
|
|
4
|
+
audioContext?: AudioContext;
|
|
5
|
+
chain?: NiceAudioEffectsChain;
|
|
6
|
+
effects?: EffectInstance[];
|
|
7
|
+
onChange?: (effects: EffectParams[]) => void;
|
|
8
|
+
onChainUpdate?: (chain: NiceAudioEffectsChain) => void;
|
|
9
|
+
maxEffects?: number;
|
|
10
|
+
availableEffects?: EffectType[];
|
|
11
|
+
showPresets?: boolean;
|
|
12
|
+
compact?: boolean;
|
|
13
|
+
className?: string;
|
|
14
|
+
}
|
|
15
|
+
export declare const NiceAudioEffectsRack: React.FC<NiceAudioEffectsRackProps>;
|
|
16
|
+
export default NiceAudioEffectsRack;
|
|
17
|
+
//# sourceMappingURL=NiceAudioEffectsRack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NiceAudioEffectsRack.d.ts","sourceRoot":"","sources":["../../src/engine/NiceAudioEffectsRack.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAiD,MAAM,OAAO,CAAC;AACtE,OAAO,KAAK,EACV,UAAU,EACV,YAAY,EACZ,cAAc,EAWf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAYL,qBAAqB,EACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,4BAA4B,CAAC;AAGpC,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,qBAAqB,CAAC;IAC9B,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;IAC7C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,UAAU,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA0bD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAuKpE,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
export interface AudioWorkletProcessorOptions {
|
|
2
|
+
numberOfInputs?: number;
|
|
3
|
+
numberOfOutputs?: number;
|
|
4
|
+
outputChannelCount?: number[];
|
|
5
|
+
parameterData?: Record<string, number>;
|
|
6
|
+
processorOptions?: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface AudioWorkletMessage {
|
|
9
|
+
type: string;
|
|
10
|
+
data?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface MeterData {
|
|
13
|
+
peak: number;
|
|
14
|
+
rms: number;
|
|
15
|
+
clip: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface RecorderChunk {
|
|
18
|
+
channelData: Float32Array[];
|
|
19
|
+
timestamp: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Base processor with gain control
|
|
23
|
+
*/
|
|
24
|
+
export declare const GAIN_PROCESSOR_CODE = "\nclass GainProcessor extends AudioWorkletProcessor {\n static get parameterDescriptors() {\n return [\n { name: 'gain', defaultValue: 1, minValue: 0, maxValue: 2, automationRate: 'a-rate' }\n ];\n }\n\n process(inputs, outputs, parameters) {\n const input = inputs[0];\n const output = outputs[0];\n const gain = parameters.gain;\n \n if (!input || !input[0]) return true;\n \n for (let channel = 0; channel < output.length; channel++) {\n const inputChannel = input[channel] || input[0];\n const outputChannel = output[channel];\n \n if (gain.length === 1) {\n // Static gain\n const g = gain[0];\n for (let i = 0; i < outputChannel.length; i++) {\n outputChannel[i] = inputChannel[i] * g;\n }\n } else {\n // Per-sample gain (automation)\n for (let i = 0; i < outputChannel.length; i++) {\n outputChannel[i] = inputChannel[i] * gain[i];\n }\n }\n }\n \n return true;\n }\n}\nregisterProcessor('nice-gain-processor', GainProcessor);\n";
|
|
25
|
+
/**
|
|
26
|
+
* Level meter processor
|
|
27
|
+
*/
|
|
28
|
+
export declare const METER_PROCESSOR_CODE = "\nclass MeterProcessor extends AudioWorkletProcessor {\n constructor() {\n super();\n this.sampleCount = 0;\n this.peakHold = 0;\n this.decayRate = 0.9995;\n this.reportInterval = 1024; // ~21ms at 48kHz\n }\n\n process(inputs, outputs) {\n const input = inputs[0];\n const output = outputs[0];\n \n if (!input || !input[0]) return true;\n \n // Pass through\n for (let ch = 0; ch < output.length; ch++) {\n const inputChannel = input[ch] || input[0];\n output[ch].set(inputChannel);\n }\n \n // Calculate levels for first channel (or sum)\n let peak = 0;\n let sumSquares = 0;\n const data = input[0];\n \n for (let i = 0; i < data.length; i++) {\n const abs = Math.abs(data[i]);\n if (abs > peak) peak = abs;\n sumSquares += data[i] * data[i];\n }\n \n const rms = Math.sqrt(sumSquares / data.length);\n \n // Peak hold with decay\n if (peak > this.peakHold) {\n this.peakHold = peak;\n } else {\n this.peakHold *= this.decayRate;\n }\n \n this.sampleCount += data.length;\n \n if (this.sampleCount >= this.reportInterval) {\n this.port.postMessage({\n type: 'meter',\n data: {\n peak: this.peakHold,\n rms: rms,\n clip: peak >= 1.0\n }\n });\n this.sampleCount = 0;\n }\n \n return true;\n }\n}\nregisterProcessor('nice-meter-processor', MeterProcessor);\n";
|
|
29
|
+
/**
|
|
30
|
+
* Recorder processor - captures audio to ring buffer
|
|
31
|
+
*/
|
|
32
|
+
export declare const RECORDER_PROCESSOR_CODE = "\nclass RecorderProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super();\n this.recording = false;\n this.bufferSize = options.processorOptions?.bufferSize || 4096;\n this.channels = options.processorOptions?.channels || 2;\n this.buffer = [];\n \n for (let i = 0; i < this.channels; i++) {\n this.buffer.push(new Float32Array(this.bufferSize));\n }\n \n this.writeIndex = 0;\n \n this.port.onmessage = (event) => {\n if (event.data.type === 'start') {\n this.recording = true;\n this.writeIndex = 0;\n } else if (event.data.type === 'stop') {\n this.recording = false;\n this.flush();\n }\n };\n }\n\n flush() {\n if (this.writeIndex === 0) return;\n \n const channelData = [];\n for (let ch = 0; ch < this.channels; ch++) {\n channelData.push(this.buffer[ch].slice(0, this.writeIndex));\n }\n \n this.port.postMessage({\n type: 'chunk',\n data: {\n channelData,\n timestamp: currentTime\n }\n }, channelData.map(d => d.buffer));\n \n this.writeIndex = 0;\n }\n\n process(inputs, outputs) {\n const input = inputs[0];\n const output = outputs[0];\n \n if (!input || !input[0]) return true;\n \n // Pass through\n for (let ch = 0; ch < output.length; ch++) {\n const inputChannel = input[ch] || input[0];\n output[ch].set(inputChannel);\n }\n \n if (!this.recording) return true;\n \n // Record\n const frameSize = input[0].length;\n \n for (let ch = 0; ch < Math.min(this.channels, input.length); ch++) {\n for (let i = 0; i < frameSize; i++) {\n this.buffer[ch][this.writeIndex + i] = input[ch][i];\n }\n }\n \n this.writeIndex += frameSize;\n \n if (this.writeIndex >= this.bufferSize) {\n this.flush();\n }\n \n return true;\n }\n}\nregisterProcessor('nice-recorder-processor', RecorderProcessor);\n";
|
|
33
|
+
/**
|
|
34
|
+
* Pitch analyzer processor
|
|
35
|
+
*/
|
|
36
|
+
export declare const PITCH_ANALYZER_CODE = "\nclass PitchAnalyzerProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super();\n this.bufferSize = options.processorOptions?.bufferSize || 2048;\n this.buffer = new Float32Array(this.bufferSize);\n this.writeIndex = 0;\n this.minFreq = options.processorOptions?.minFreq || 60;\n this.maxFreq = options.processorOptions?.maxFreq || 1000;\n }\n\n // Simple autocorrelation pitch detection\n detectPitch(buffer, sampleRate) {\n const minPeriod = Math.floor(sampleRate / this.maxFreq);\n const maxPeriod = Math.floor(sampleRate / this.minFreq);\n \n let bestCorr = 0;\n let bestPeriod = 0;\n \n for (let period = minPeriod; period <= Math.min(maxPeriod, buffer.length / 2); period++) {\n let corr = 0;\n for (let i = 0; i < buffer.length - period; i++) {\n corr += buffer[i] * buffer[i + period];\n }\n \n if (corr > bestCorr) {\n bestCorr = corr;\n bestPeriod = period;\n }\n }\n \n if (bestPeriod === 0) return 0;\n \n return sampleRate / bestPeriod;\n }\n\n process(inputs, outputs) {\n const input = inputs[0];\n const output = outputs[0];\n \n if (!input || !input[0]) return true;\n \n // Pass through\n for (let ch = 0; ch < output.length; ch++) {\n const inputChannel = input[ch] || input[0];\n output[ch].set(inputChannel);\n }\n \n // Accumulate samples\n const data = input[0];\n for (let i = 0; i < data.length && this.writeIndex < this.bufferSize; i++) {\n this.buffer[this.writeIndex++] = data[i];\n }\n \n if (this.writeIndex >= this.bufferSize) {\n const freq = this.detectPitch(this.buffer, sampleRate);\n \n this.port.postMessage({\n type: 'pitch',\n data: {\n frequency: freq,\n note: freq > 0 ? this.freqToNote(freq) : null,\n cents: freq > 0 ? this.freqToCents(freq) : 0\n }\n });\n \n this.writeIndex = 0;\n }\n \n return true;\n }\n\n freqToNote(freq) {\n const notes = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];\n const midi = Math.round(12 * Math.log2(freq / 440) + 69);\n const note = notes[midi % 12];\n const octave = Math.floor(midi / 12) - 1;\n return note + octave;\n }\n\n freqToCents(freq) {\n const midi = 12 * Math.log2(freq / 440) + 69;\n return Math.round((midi - Math.round(midi)) * 100);\n }\n}\nregisterProcessor('nice-pitch-analyzer', PitchAnalyzerProcessor);\n";
|
|
37
|
+
/**
|
|
38
|
+
* All processors combined
|
|
39
|
+
*/
|
|
40
|
+
export declare const ALL_PROCESSORS_CODE: string;
|
|
41
|
+
/**
|
|
42
|
+
* Create a blob URL for worklet code
|
|
43
|
+
*/
|
|
44
|
+
export declare function createWorkletBlobURL(code: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Register all Nice Audio processors
|
|
47
|
+
*/
|
|
48
|
+
export declare function registerNiceAudioWorklets(audioContext: AudioContext): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* Register a single processor
|
|
51
|
+
*/
|
|
52
|
+
export declare function registerWorkletProcessor(audioContext: AudioContext, code: string): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* Gain processor node with parameter control
|
|
55
|
+
*/
|
|
56
|
+
export declare class NiceGainWorkletNode extends AudioWorkletNode {
|
|
57
|
+
constructor(audioContext: AudioContext);
|
|
58
|
+
get gain(): AudioParam;
|
|
59
|
+
setGain(value: number): void;
|
|
60
|
+
fadeIn(duration: number): void;
|
|
61
|
+
fadeOut(duration: number): void;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Level meter node
|
|
65
|
+
*/
|
|
66
|
+
export declare class NiceMeterWorkletNode extends AudioWorkletNode {
|
|
67
|
+
private _onMeter;
|
|
68
|
+
constructor(audioContext: AudioContext);
|
|
69
|
+
set onMeter(callback: ((data: MeterData) => void) | null);
|
|
70
|
+
get onMeter(): ((data: MeterData) => void) | null;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Recorder node
|
|
74
|
+
*/
|
|
75
|
+
export declare class NiceRecorderWorkletNode extends AudioWorkletNode {
|
|
76
|
+
private _onChunk;
|
|
77
|
+
private _recording;
|
|
78
|
+
constructor(audioContext: AudioContext, options?: {
|
|
79
|
+
bufferSize?: number;
|
|
80
|
+
channels?: number;
|
|
81
|
+
});
|
|
82
|
+
get recording(): boolean;
|
|
83
|
+
set onChunk(callback: ((chunk: RecorderChunk) => void) | null);
|
|
84
|
+
start(): void;
|
|
85
|
+
stop(): void;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Pitch analyzer node
|
|
89
|
+
*/
|
|
90
|
+
export interface PitchData {
|
|
91
|
+
frequency: number;
|
|
92
|
+
note: string | null;
|
|
93
|
+
cents: number;
|
|
94
|
+
}
|
|
95
|
+
export declare class NicePitchAnalyzerNode extends AudioWorkletNode {
|
|
96
|
+
private _onPitch;
|
|
97
|
+
constructor(audioContext: AudioContext, options?: {
|
|
98
|
+
bufferSize?: number;
|
|
99
|
+
minFreq?: number;
|
|
100
|
+
maxFreq?: number;
|
|
101
|
+
});
|
|
102
|
+
set onPitch(callback: ((data: PitchData) => void) | null);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Hook for registering and using AudioWorklet
|
|
106
|
+
*/
|
|
107
|
+
export declare function useAudioWorklet(audioContext: AudioContext | undefined, processorName: string, processorCode: string, options?: AudioWorkletProcessorOptions): {
|
|
108
|
+
node: AudioWorkletNode;
|
|
109
|
+
ready: boolean;
|
|
110
|
+
error: Error;
|
|
111
|
+
};
|
|
112
|
+
/**
|
|
113
|
+
* Level meter hook
|
|
114
|
+
*/
|
|
115
|
+
export declare function useMeter(audioContext: AudioContext | undefined): {
|
|
116
|
+
node: NiceMeterWorkletNode;
|
|
117
|
+
meterData: MeterData;
|
|
118
|
+
ready: boolean;
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Recorder hook
|
|
122
|
+
*/
|
|
123
|
+
export declare function useWorkletRecorder(audioContext: AudioContext | undefined, options?: {
|
|
124
|
+
bufferSize?: number;
|
|
125
|
+
channels?: number;
|
|
126
|
+
}): {
|
|
127
|
+
node: NiceRecorderWorkletNode;
|
|
128
|
+
ready: boolean;
|
|
129
|
+
recording: boolean;
|
|
130
|
+
chunks: RecorderChunk[];
|
|
131
|
+
start: () => void;
|
|
132
|
+
stop: () => void;
|
|
133
|
+
getAudioBuffer: () => AudioBuffer | null;
|
|
134
|
+
};
|
|
135
|
+
/**
|
|
136
|
+
* Pitch detection hook
|
|
137
|
+
*/
|
|
138
|
+
export declare function usePitchDetection(audioContext: AudioContext | undefined, options?: {
|
|
139
|
+
bufferSize?: number;
|
|
140
|
+
minFreq?: number;
|
|
141
|
+
maxFreq?: number;
|
|
142
|
+
}): {
|
|
143
|
+
node: NicePitchAnalyzerNode;
|
|
144
|
+
pitchData: PitchData;
|
|
145
|
+
ready: boolean;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* Helper to migrate from ScriptProcessorNode to AudioWorklet
|
|
149
|
+
*
|
|
150
|
+
* This provides a compatibility layer that mimics onaudioprocess
|
|
151
|
+
*/
|
|
152
|
+
export declare const COMPAT_PROCESSOR_CODE = "\nclass CompatProcessor extends AudioWorkletProcessor {\n constructor(options) {\n super();\n this.bufferSize = options.processorOptions?.bufferSize || 256;\n }\n\n process(inputs, outputs) {\n const input = inputs[0];\n const output = outputs[0];\n \n if (!input || !input[0]) return true;\n \n // Copy input to output (pass through)\n for (let ch = 0; ch < output.length; ch++) {\n const inputChannel = input[ch] || input[0];\n output[ch].set(inputChannel);\n }\n \n // Send to main thread for processing\n this.port.postMessage({\n type: 'process',\n inputBuffer: input.map(ch => ch.slice()),\n outputBuffer: output.map(ch => ch.slice())\n });\n \n return true;\n }\n}\nregisterProcessor('nice-compat-processor', CompatProcessor);\n";
|
|
153
|
+
export interface AudioProcessingEvent {
|
|
154
|
+
inputBuffer: Float32Array[];
|
|
155
|
+
outputBuffer: Float32Array[];
|
|
156
|
+
playbackTime: number;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Compatibility node that mimics ScriptProcessorNode API
|
|
160
|
+
*/
|
|
161
|
+
export declare class NiceCompatWorkletNode extends AudioWorkletNode {
|
|
162
|
+
private _onaudioprocess;
|
|
163
|
+
constructor(audioContext: AudioContext, bufferSize?: number);
|
|
164
|
+
set onaudioprocess(callback: ((event: AudioProcessingEvent) => void) | null);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Create compatibility worklet node from ScriptProcessorNode callback
|
|
168
|
+
*/
|
|
169
|
+
export declare function createCompatWorkletFromScriptProcessor(audioContext: AudioContext, bufferSize: number, onaudioprocess: (event: AudioProcessingEvent) => void): Promise<NiceCompatWorkletNode>;
|
|
170
|
+
declare const _default: {
|
|
171
|
+
registerNiceAudioWorklets: typeof registerNiceAudioWorklets;
|
|
172
|
+
registerWorkletProcessor: typeof registerWorkletProcessor;
|
|
173
|
+
createWorkletBlobURL: typeof createWorkletBlobURL;
|
|
174
|
+
NiceGainWorkletNode: typeof NiceGainWorkletNode;
|
|
175
|
+
NiceMeterWorkletNode: typeof NiceMeterWorkletNode;
|
|
176
|
+
NiceRecorderWorkletNode: typeof NiceRecorderWorkletNode;
|
|
177
|
+
NicePitchAnalyzerNode: typeof NicePitchAnalyzerNode;
|
|
178
|
+
useAudioWorklet: typeof useAudioWorklet;
|
|
179
|
+
useMeter: typeof useMeter;
|
|
180
|
+
useWorkletRecorder: typeof useWorkletRecorder;
|
|
181
|
+
usePitchDetection: typeof usePitchDetection;
|
|
182
|
+
};
|
|
183
|
+
export default _default;
|
|
184
|
+
//# sourceMappingURL=NiceAudioWorklet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NiceAudioWorklet.d.ts","sourceRoot":"","sources":["../../src/engine/NiceAudioWorklet.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NiceMultitrackExport — Multitrack audio export system
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Export to WAV, MP3, FLAC formats
|
|
6
|
+
* - Per-track volume, pan, and effects control
|
|
7
|
+
* - Bounce to stereo or multi-channel
|
|
8
|
+
* - Progress tracking with cancellation
|
|
9
|
+
* - Worker-based encoding for non-blocking operation
|
|
10
|
+
*/
|
|
11
|
+
export type ExportFormat = 'wav' | 'mp3' | 'flac' | 'ogg';
|
|
12
|
+
export type BitDepth = 16 | 24 | 32;
|
|
13
|
+
export type SampleRate = 44100 | 48000 | 96000;
|
|
14
|
+
export interface TrackExportSettings {
|
|
15
|
+
trackId: string;
|
|
16
|
+
name: string;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
volume: number;
|
|
19
|
+
pan: number;
|
|
20
|
+
mute: boolean;
|
|
21
|
+
solo: boolean;
|
|
22
|
+
effects: AudioEffectNode[];
|
|
23
|
+
}
|
|
24
|
+
export interface AudioEffectNode {
|
|
25
|
+
type: 'gain' | 'panner' | 'compressor' | 'reverb' | 'delay' | 'eq' | 'filter';
|
|
26
|
+
params: Record<string, any>;
|
|
27
|
+
enabled: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface ExportOptions {
|
|
30
|
+
format: ExportFormat;
|
|
31
|
+
bitDepth: BitDepth;
|
|
32
|
+
sampleRate: SampleRate;
|
|
33
|
+
channels: 1 | 2;
|
|
34
|
+
normalize: boolean;
|
|
35
|
+
dither: boolean;
|
|
36
|
+
fadeIn?: number;
|
|
37
|
+
fadeOut?: number;
|
|
38
|
+
startTime?: number;
|
|
39
|
+
endTime?: number;
|
|
40
|
+
mp3Bitrate?: 128 | 192 | 256 | 320;
|
|
41
|
+
mp3Quality?: number;
|
|
42
|
+
flacCompressionLevel?: number;
|
|
43
|
+
metadata?: ExportMetadata;
|
|
44
|
+
}
|
|
45
|
+
export interface ExportMetadata {
|
|
46
|
+
title?: string;
|
|
47
|
+
artist?: string;
|
|
48
|
+
album?: string;
|
|
49
|
+
year?: number;
|
|
50
|
+
track?: number;
|
|
51
|
+
genre?: string;
|
|
52
|
+
comment?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ExportProgress {
|
|
55
|
+
phase: 'preparing' | 'rendering' | 'encoding' | 'writing' | 'complete' | 'error' | 'cancelled';
|
|
56
|
+
progress: number;
|
|
57
|
+
currentTrack?: string;
|
|
58
|
+
message?: string;
|
|
59
|
+
error?: Error;
|
|
60
|
+
}
|
|
61
|
+
export interface ExportResult {
|
|
62
|
+
success: boolean;
|
|
63
|
+
blob?: Blob;
|
|
64
|
+
duration: number;
|
|
65
|
+
fileSize: number;
|
|
66
|
+
format: ExportFormat;
|
|
67
|
+
error?: Error;
|
|
68
|
+
}
|
|
69
|
+
export interface MultitrackExportConfig {
|
|
70
|
+
tracks: TrackExportSettings[];
|
|
71
|
+
masterVolume: number;
|
|
72
|
+
masterEffects: AudioEffectNode[];
|
|
73
|
+
options: ExportOptions;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Calculate the maximum peak amplitude in an audio buffer
|
|
77
|
+
*/
|
|
78
|
+
export declare function calculatePeak(buffer: Float32Array): number;
|
|
79
|
+
/**
|
|
80
|
+
* Normalize an audio buffer to a target peak level
|
|
81
|
+
*/
|
|
82
|
+
export declare function normalizeBuffer(buffer: Float32Array, targetPeak?: number): Float32Array;
|
|
83
|
+
/**
|
|
84
|
+
* Apply a fade in/out to an audio buffer
|
|
85
|
+
*/
|
|
86
|
+
export declare function applyFade(buffer: Float32Array, sampleRate: number, fadeInMs: number, fadeOutMs: number): Float32Array;
|
|
87
|
+
/**
|
|
88
|
+
* Apply dithering to reduce quantization noise
|
|
89
|
+
*/
|
|
90
|
+
export declare function applyDither(buffer: Float32Array, bitDepth: BitDepth): Float32Array;
|
|
91
|
+
/**
|
|
92
|
+
* Mix multiple audio buffers together with volume/pan
|
|
93
|
+
*/
|
|
94
|
+
export declare function mixBuffers(buffers: {
|
|
95
|
+
buffer: Float32Array;
|
|
96
|
+
volume: number;
|
|
97
|
+
pan: number;
|
|
98
|
+
}[], length: number, channels: 1 | 2): Float32Array[];
|
|
99
|
+
/**
|
|
100
|
+
* Convert Float32Array to Int16Array for WAV export
|
|
101
|
+
*/
|
|
102
|
+
export declare function float32ToInt16(buffer: Float32Array): Int16Array;
|
|
103
|
+
/**
|
|
104
|
+
* Convert Float32Array to Int24 (stored in Int32Array)
|
|
105
|
+
*/
|
|
106
|
+
export declare function float32ToInt24(buffer: Float32Array): Int32Array;
|
|
107
|
+
/**
|
|
108
|
+
* Encode audio data to WAV format
|
|
109
|
+
*/
|
|
110
|
+
export declare function encodeWav(channels: Float32Array[], sampleRate: SampleRate, bitDepth: BitDepth): ArrayBuffer;
|
|
111
|
+
export declare class NiceMultitrackExporter {
|
|
112
|
+
private config;
|
|
113
|
+
private audioContext;
|
|
114
|
+
private abortController;
|
|
115
|
+
private onProgress;
|
|
116
|
+
constructor(config: MultitrackExportConfig);
|
|
117
|
+
/**
|
|
118
|
+
* Set progress callback
|
|
119
|
+
*/
|
|
120
|
+
setProgressCallback(callback: (progress: ExportProgress) => void): void;
|
|
121
|
+
/**
|
|
122
|
+
* Report progress to callback
|
|
123
|
+
*/
|
|
124
|
+
private reportProgress;
|
|
125
|
+
/**
|
|
126
|
+
* Cancel the current export
|
|
127
|
+
*/
|
|
128
|
+
cancel(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Encode audio via OfflineAudioContext + MediaRecorder for MP3/OGG/FLAC
|
|
131
|
+
*/
|
|
132
|
+
private encodeViaMediaRecorder;
|
|
133
|
+
/**
|
|
134
|
+
* Apply per-track effects chain using OfflineAudioContext
|
|
135
|
+
*/
|
|
136
|
+
private applyTrackEffects;
|
|
137
|
+
/**
|
|
138
|
+
* Create a Web Audio node from an AudioEffectNode descriptor
|
|
139
|
+
*/
|
|
140
|
+
private createEffectNode;
|
|
141
|
+
/**
|
|
142
|
+
* Export all tracks to a single mixed file
|
|
143
|
+
*/
|
|
144
|
+
exportMixed(audioBuffers: Map<string, AudioBuffer>): Promise<ExportResult>;
|
|
145
|
+
/**
|
|
146
|
+
* Export each track as a separate file
|
|
147
|
+
*/
|
|
148
|
+
exportSeparate(audioBuffers: Map<string, AudioBuffer>): Promise<Map<string, ExportResult>>;
|
|
149
|
+
}
|
|
150
|
+
export interface UseMultitrackExportOptions {
|
|
151
|
+
onProgress?: (progress: ExportProgress) => void;
|
|
152
|
+
onComplete?: (result: ExportResult) => void;
|
|
153
|
+
onError?: (error: Error) => void;
|
|
154
|
+
}
|
|
155
|
+
export interface UseMultitrackExportReturn {
|
|
156
|
+
isExporting: boolean;
|
|
157
|
+
progress: ExportProgress | null;
|
|
158
|
+
exportMixed: (config: MultitrackExportConfig, audioBuffers: Map<string, AudioBuffer>) => Promise<ExportResult>;
|
|
159
|
+
exportSeparate: (config: MultitrackExportConfig, audioBuffers: Map<string, AudioBuffer>) => Promise<Map<string, ExportResult>>;
|
|
160
|
+
cancel: () => void;
|
|
161
|
+
downloadBlob: (blob: Blob, filename: string) => void;
|
|
162
|
+
}
|
|
163
|
+
export declare function useMultitrackExport(options?: UseMultitrackExportOptions): UseMultitrackExportReturn;
|
|
164
|
+
export default NiceMultitrackExporter;
|
|
165
|
+
//# sourceMappingURL=NiceMultitrackExport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NiceMultitrackExport.d.ts","sourceRoot":"","sources":["../../src/engine/NiceMultitrackExport.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioContext.d.ts","sourceRoot":"","sources":["../../src/engine/audioContext.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audioContext.d.ts","sourceRoot":"","sources":["../../src/engine/audioContext.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,IAAI,YAAY,CAS9C;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKxD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioKeyboard.d.ts","sourceRoot":"","sources":["../../src/engine/audioKeyboard.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAM1D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAIhD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAchF,CAAC;AAEF,eAAO,MAAM,cAAc;;;GAQ1B,CAAC;AAEF,eAAO,MAAM,WAAW,UAA0D,CAAC;AAGnF,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"audioKeyboard.d.ts","sourceRoot":"","sources":["../../src/engine/audioKeyboard.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAA;CAM1D,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAIhD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAchF,CAAC;AAEF,eAAO,MAAM,cAAc;;;GAQ1B,CAAC;AAEF,eAAO,MAAM,WAAW,UAA0D,CAAC;AAGnF,eAAO,MAAM,eAAe,SAAU,MAAM,SAAS,MAAM,SAE1D,CAAC;AAGF,eAAO,MAAM,gBAAgB,SAAU,MAAM,WAE5C,CAAC;AAEF,eAAO,MAAM,iBAAiB,eAM7B,CAAC;AAGF,eAAO,MAAM,SAAS,SACZ,MAAM,cACA,MAAM,iBACH,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,aACrD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,WACvE,MAAM,KACf,WAAW,GAAG,IA6ChB,CAAC;AAEF,eAAO,MAAM,YAAY,SAAU,MAAM,iBAAiB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,SAS/G,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audioPlaybackEngine.d.ts","sourceRoot":"","sources":["../../src/engine/audioPlaybackEngine.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"audioPlaybackEngine.d.ts","sourceRoot":"","sources":["../../src/engine/audioPlaybackEngine.ts"],"names":[],"mappings":"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"}
|