@libraz/libsonare 1.7.2 → 1.8.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/NOTICE +178 -0
- package/README.md +26 -203
- package/dist/_chain_config.d.ts +14 -0
- package/dist/_chain_config.d.ts.map +1 -0
- package/dist/_effects_common.d.ts +6 -0
- package/dist/_effects_common.d.ts.map +1 -0
- package/dist/_feature_validation.d.ts +8 -0
- package/dist/_feature_validation.d.ts.map +1 -0
- package/dist/_fft_options.d.ts +24 -0
- package/dist/_fft_options.d.ts.map +1 -0
- package/dist/align_take.d.ts +50 -0
- package/dist/align_take.d.ts.map +1 -0
- package/dist/analysis.d.ts +29 -5840
- package/dist/analysis.d.ts.map +1 -0
- package/dist/analysis.js +873 -722
- package/dist/analysis.js.map +1 -1
- package/dist/analysis_helpers.d.ts +9 -0
- package/dist/analysis_helpers.d.ts.map +1 -0
- package/dist/audio.d.ts +163 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/clip_page_streamer.d.ts +133 -0
- package/dist/clip_page_streamer.d.ts.map +1 -0
- package/dist/codes.d.ts +44 -0
- package/dist/codes.d.ts.map +1 -0
- package/dist/effects_mastering.d.ts +23 -0
- package/dist/effects_mastering.d.ts.map +1 -0
- package/dist/effects_note_ops.d.ts +477 -0
- package/dist/effects_note_ops.d.ts.map +1 -0
- package/dist/effects_percussive.d.ts +185 -0
- package/dist/effects_percussive.d.ts.map +1 -0
- package/dist/effects_separation.d.ts +65 -0
- package/dist/effects_separation.d.ts.map +1 -0
- package/dist/effects_spectral.d.ts +28 -0
- package/dist/effects_spectral.d.ts.map +1 -0
- package/dist/effects_timepitch.d.ts +129 -0
- package/dist/effects_timepitch.d.ts.map +1 -0
- package/dist/effects_voice_change.d.ts +53 -0
- package/dist/effects_voice_change.d.ts.map +1 -0
- package/dist/errors.d.ts +51 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/feature_core.d.ts +341 -0
- package/dist/feature_core.d.ts.map +1 -0
- package/dist/feature_decompose.d.ts +278 -0
- package/dist/feature_decompose.d.ts.map +1 -0
- package/dist/feature_inverse.d.ts +128 -0
- package/dist/feature_inverse.d.ts.map +1 -0
- package/dist/feature_loudness.d.ts +66 -0
- package/dist/feature_loudness.d.ts.map +1 -0
- package/dist/feature_music.d.ts +307 -0
- package/dist/feature_music.d.ts.map +1 -0
- package/dist/feature_pitch.d.ts +108 -0
- package/dist/feature_pitch.d.ts.map +1 -0
- package/dist/feature_resample.d.ts +16 -0
- package/dist/feature_resample.d.ts.map +1 -0
- package/dist/feature_spectral.d.ts +137 -0
- package/dist/feature_spectral.d.ts.map +1 -0
- package/dist/feature_spectrogram.d.ts +198 -0
- package/dist/feature_spectrogram.d.ts.map +1 -0
- package/dist/features.d.ts +10 -0
- package/dist/features.d.ts.map +1 -0
- package/dist/hrtf/default.shrf +0 -0
- package/dist/index.d.ts +74 -7431
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3758 -1362
- package/dist/index.js.map +1 -1
- package/dist/instrument_types.d.ts +517 -0
- package/dist/instrument_types.d.ts.map +1 -0
- package/dist/live_audio.d.ts +35 -0
- package/dist/live_audio.d.ts.map +1 -0
- package/dist/mastering_chain.d.ts +213 -0
- package/dist/mastering_chain.d.ts.map +1 -0
- package/dist/mastering_core.d.ts +457 -0
- package/dist/mastering_core.d.ts.map +1 -0
- package/dist/mastering_dynamics.d.ts +80 -0
- package/dist/mastering_dynamics.d.ts.map +1 -0
- package/dist/metering.d.ts +287 -0
- package/dist/metering.d.ts.map +1 -0
- package/dist/mixer.d.ts +464 -0
- package/dist/mixer.d.ts.map +1 -0
- package/dist/mixing_assistant.d.ts +62 -0
- package/dist/mixing_assistant.d.ts.map +1 -0
- package/dist/mixing_oneshot.d.ts +40 -0
- package/dist/mixing_oneshot.d.ts.map +1 -0
- package/dist/module_state.d.ts +15 -0
- package/dist/module_state.d.ts.map +1 -0
- package/dist/opfs_clip_pages.d.ts +28 -0
- package/dist/opfs_clip_pages.d.ts.map +1 -0
- package/dist/playback_renderer.d.ts +128 -0
- package/dist/playback_renderer.d.ts.map +1 -0
- package/dist/polyphony.d.ts +202 -0
- package/dist/polyphony.d.ts.map +1 -0
- package/dist/project.d.ts +8 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project_class.d.ts +562 -0
- package/dist/project_class.d.ts.map +1 -0
- package/dist/project_internal.d.ts +194 -0
- package/dist/project_internal.d.ts.map +1 -0
- package/dist/project_synth.d.ts +74 -0
- package/dist/project_synth.d.ts.map +1 -0
- package/dist/project_types.d.ts +652 -0
- package/dist/project_types.d.ts.map +1 -0
- package/dist/public_types.d.ts +185 -0
- package/dist/public_types.d.ts.map +1 -0
- package/dist/public_types_acoustic.d.ts +215 -0
- package/dist/public_types_acoustic.d.ts.map +1 -0
- package/dist/public_types_mastering.d.ts +510 -0
- package/dist/public_types_mastering.d.ts.map +1 -0
- package/dist/public_types_mixing.d.ts +436 -0
- package/dist/public_types_mixing.d.ts.map +1 -0
- package/dist/public_types_music.d.ts +619 -0
- package/dist/public_types_music.d.ts.map +1 -0
- package/dist/public_types_playback.d.ts +164 -0
- package/dist/public_types_playback.d.ts.map +1 -0
- package/dist/public_types_realtime.d.ts +174 -0
- package/dist/public_types_realtime.d.ts.map +1 -0
- package/dist/public_types_repair.d.ts +424 -0
- package/dist/public_types_repair.d.ts.map +1 -0
- package/dist/public_types_spectral.d.ts +697 -0
- package/dist/public_types_spectral.d.ts.map +1 -0
- package/dist/quick_analysis.d.ts +445 -0
- package/dist/quick_analysis.d.ts.map +1 -0
- package/dist/realtime_engine.d.ts +850 -0
- package/dist/realtime_engine.d.ts.map +1 -0
- package/dist/realtime_voice_changer.d.ts +158 -0
- package/dist/realtime_voice_changer.d.ts.map +1 -0
- package/dist/repair_dereverb.d.ts +187 -0
- package/dist/repair_dereverb.d.ts.map +1 -0
- package/dist/repair_impulsive.d.ts +186 -0
- package/dist/repair_impulsive.d.ts.map +1 -0
- package/dist/repair_noise.d.ts +239 -0
- package/dist/repair_noise.d.ts.map +1 -0
- package/dist/repair_trim.d.ts +123 -0
- package/dist/repair_trim.d.ts.map +1 -0
- package/dist/sample_bank.d.ts +84 -0
- package/dist/sample_bank.d.ts.map +1 -0
- package/dist/scale.d.ts +10 -0
- package/dist/scale.d.ts.map +1 -0
- package/dist/schemas/mixer-scene.schema.json +393 -0
- package/dist/schemas/playback-renderer-config.schema.json +392 -0
- package/dist/sonare-analysis.d.ts +8 -0
- package/dist/sonare-analysis.js +2 -2
- package/dist/sonare-analysis.wasm +0 -0
- package/dist/sonare.d.ts +3909 -0
- package/dist/sonare.js +2 -2
- package/dist/sonare.wasm +0 -0
- package/dist/stream_analyzer.d.ts +163 -0
- package/dist/stream_analyzer.d.ts.map +1 -0
- package/dist/stream_types.d.ts +214 -0
- package/dist/stream_types.d.ts.map +1 -0
- package/dist/streaming_mixing.d.ts +6 -0
- package/dist/streaming_mixing.d.ts.map +1 -0
- package/dist/streaming_processors.d.ts +335 -0
- package/dist/streaming_processors.d.ts.map +1 -0
- package/dist/transcribe.d.ts +77 -0
- package/dist/transcribe.d.ts.map +1 -0
- package/dist/validation.d.ts +140 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/web_midi.d.ts +77 -0
- package/dist/web_midi.d.ts.map +1 -0
- package/dist/worker.d.ts +5 -48
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +94 -41
- package/dist/worker.js.map +1 -1
- package/dist/worker_client.d.ts +96 -0
- package/dist/worker_client.d.ts.map +1 -0
- package/dist/worker_protocol.d.ts +43 -0
- package/dist/worker_protocol.d.ts.map +1 -0
- package/dist/worklet/audio_types.d.ts +21 -0
- package/dist/worklet/audio_types.d.ts.map +1 -0
- package/dist/worklet/engine-automation.d.ts +29 -0
- package/dist/worklet/engine-automation.d.ts.map +1 -0
- package/dist/worklet/engine-capture-facade.d.ts +35 -0
- package/dist/worklet/engine-capture-facade.d.ts.map +1 -0
- package/dist/worklet/engine-clips.d.ts +23 -0
- package/dist/worklet/engine-clips.d.ts.map +1 -0
- package/dist/worklet/engine-markers.d.ts +40 -0
- package/dist/worklet/engine-markers.d.ts.map +1 -0
- package/dist/worklet/engine-mixer-facade.d.ts +128 -0
- package/dist/worklet/engine-mixer-facade.d.ts.map +1 -0
- package/dist/worklet/engine-node.d.ts +81 -0
- package/dist/worklet/engine-node.d.ts.map +1 -0
- package/dist/worklet/engine-offline.d.ts +81 -0
- package/dist/worklet/engine-offline.d.ts.map +1 -0
- package/dist/worklet/engine-options.d.ts +12 -0
- package/dist/worklet/engine-options.d.ts.map +1 -0
- package/dist/worklet/engine-parameter-facade.d.ts +106 -0
- package/dist/worklet/engine-parameter-facade.d.ts.map +1 -0
- package/dist/worklet/engine-processor.d.ts +68 -0
- package/dist/worklet/engine-processor.d.ts.map +1 -0
- package/dist/worklet/engine-register.d.ts +2 -0
- package/dist/worklet/engine-register.d.ts.map +1 -0
- package/dist/worklet/engine-strips.d.ts +73 -0
- package/dist/worklet/engine-strips.d.ts.map +1 -0
- package/dist/worklet/engine-sync.d.ts +37 -0
- package/dist/worklet/engine-sync.d.ts.map +1 -0
- package/dist/worklet/engine-tempo-facade.d.ts +48 -0
- package/dist/worklet/engine-tempo-facade.d.ts.map +1 -0
- package/dist/worklet/engine.d.ts +397 -0
- package/dist/worklet/engine.d.ts.map +1 -0
- package/dist/worklet/guards.d.ts +47 -0
- package/dist/worklet/guards.d.ts.map +1 -0
- package/dist/worklet/messages.d.ts +710 -0
- package/dist/worklet/messages.d.ts.map +1 -0
- package/dist/worklet/mixer-processor.d.ts +46 -0
- package/dist/worklet/mixer-processor.d.ts.map +1 -0
- package/dist/worklet/playback-processor.d.ts +62 -0
- package/dist/worklet/playback-processor.d.ts.map +1 -0
- package/dist/worklet/protocol.d.ts +323 -0
- package/dist/worklet/protocol.d.ts.map +1 -0
- package/dist/worklet/voice-changer-processor.d.ts +41 -0
- package/dist/worklet/voice-changer-processor.d.ts.map +1 -0
- package/dist/worklet.d.ts +16 -2515
- package/dist/worklet.d.ts.map +1 -0
- package/dist/worklet.js +2763 -501
- package/dist/worklet.js.map +1 -1
- package/package.json +23 -12
- package/src/_effects_common.ts +17 -0
- package/src/_feature_validation.ts +34 -0
- package/src/_fft_options.ts +39 -0
- package/src/align_take.ts +64 -0
- package/src/analysis.ts +56 -3
- package/src/analysis_helpers.ts +7 -0
- package/src/audio.ts +106 -3
- package/src/codes.ts +39 -2
- package/src/effects_mastering.ts +97 -22
- package/src/effects_note_ops.ts +635 -0
- package/src/effects_percussive.ts +217 -0
- package/src/effects_separation.ts +150 -0
- package/src/effects_spectral.ts +60 -0
- package/src/effects_timepitch.ts +377 -0
- package/src/errors.ts +23 -1
- package/src/feature_core.ts +127 -2
- package/src/feature_decompose.ts +633 -0
- package/src/feature_inverse.ts +454 -0
- package/src/feature_loudness.ts +125 -0
- package/src/feature_music.ts +107 -14
- package/src/feature_pitch.ts +96 -1
- package/src/feature_spectral.ts +16 -611
- package/src/feature_spectrogram.ts +63 -450
- package/src/features.ts +36 -22
- package/src/index.ts +282 -30
- package/src/instrument_types.ts +645 -0
- package/src/live_audio.ts +27 -1
- package/src/mastering_chain.ts +184 -0
- package/src/mastering_core.ts +346 -32
- package/src/mastering_dynamics.ts +22 -11
- package/src/metering.ts +67 -24
- package/src/mixer.ts +212 -3
- package/src/mixing_assistant.ts +138 -0
- package/src/mixing_oneshot.ts +10 -5
- package/src/module_state.ts +24 -2
- package/src/playback_renderer.ts +252 -0
- package/src/polyphony.ts +279 -0
- package/src/project.ts +61 -24
- package/src/project_class.ts +450 -27
- package/src/project_internal.ts +149 -42
- package/src/project_synth.ts +67 -1
- package/src/project_types.ts +268 -270
- package/src/public_types.ts +122 -3
- package/src/public_types_acoustic.ts +112 -3
- package/src/public_types_mastering.ts +254 -73
- package/src/public_types_mixing.ts +363 -1
- package/src/public_types_music.ts +312 -2
- package/src/public_types_playback.ts +195 -0
- package/src/public_types_realtime.ts +39 -7
- package/src/public_types_repair.ts +446 -0
- package/src/public_types_spectral.ts +487 -1
- package/src/quick_analysis.ts +203 -26
- package/src/realtime_engine.ts +711 -28
- package/src/realtime_voice_changer.ts +55 -1
- package/src/repair_dereverb.ts +299 -0
- package/src/repair_impulsive.ts +395 -0
- package/src/repair_noise.ts +425 -0
- package/src/repair_trim.ts +226 -0
- package/src/sample_bank.ts +113 -0
- package/src/sonare.js.d.ts +1122 -30
- package/src/stream_analyzer.ts +36 -4
- package/src/stream_types.ts +37 -0
- package/src/streaming_mixing.ts +1 -1
- package/src/streaming_processors.ts +194 -10
- package/src/transcribe.ts +89 -0
- package/src/validation.ts +285 -11
- package/src/web_midi.ts +1 -6
- package/src/worker.ts +18 -2
- package/src/worklet/audio_types.ts +37 -0
- package/src/worklet/engine-mixer-facade.ts +444 -10
- package/src/worklet/engine-node.ts +78 -26
- package/src/worklet/engine-offline.ts +14 -8
- package/src/worklet/engine-parameter-facade.ts +21 -0
- package/src/worklet/engine-processor.ts +272 -83
- package/src/worklet/engine-register.ts +32 -18
- package/src/worklet/engine-strips.ts +280 -9
- package/src/worklet/engine-sync.ts +14 -6
- package/src/worklet/engine.ts +365 -31
- package/src/worklet/guards.ts +140 -44
- package/src/worklet/messages.ts +227 -2
- package/src/worklet/mixer-processor.ts +109 -47
- package/src/worklet/playback-processor.ts +300 -0
- package/src/worklet/protocol.ts +53 -3
- package/src/worklet/voice-changer-processor.ts +17 -11
- package/src/worklet.ts +17 -0
- package/src/effects_transform.ts +0 -718
- package/src/mastering_repair.ts +0 -273
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { AnalysisResult, ChordAnalysisResult, ChordDetectionOptions, KeyCandidate, KeyDetectionOptions } from './public_types';
|
|
2
|
+
import type { WasmAnalysisResult, WasmChordAnalysisResult, WasmKeyCandidateResult } from './sonare.js';
|
|
3
|
+
export declare function convertKeyCandidate(wasm: WasmKeyCandidateResult): KeyCandidate;
|
|
4
|
+
export declare function keyModeValues(modes: KeyDetectionOptions['modes'] | undefined): number[];
|
|
5
|
+
export declare function keyProfileValue(profile: KeyDetectionOptions['profile'] | undefined): number;
|
|
6
|
+
export declare function convertChordAnalysisResult(wasm: WasmChordAnalysisResult): ChordAnalysisResult;
|
|
7
|
+
export declare function chordChromaMethodValue(method: ChordDetectionOptions['chromaMethod']): number;
|
|
8
|
+
export declare function convertAnalysisResult(wasm: WasmAnalysisResult): AnalysisResult;
|
|
9
|
+
//# sourceMappingURL=analysis_helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analysis_helpers.d.ts","sourceRoot":"","sources":["../src/analysis_helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EAErB,YAAY,EACZ,mBAAmB,EAIpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAqBrB,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,sBAAsB,GAAG,YAAY,CAW9E;AAiCD,wBAAgB,aAAa,CAAC,KAAK,EAAE,mBAAmB,CAAC,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,EAAE,CAmBvF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,GAAG,SAAS,GAAG,MAAM,CAK3F;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,uBAAuB,GAAG,mBAAmB,CAe7F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,MAAM,CAQ5F;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,kBAAkB,GAAG,cAAc,CAuD9E"}
|
package/dist/audio.d.ts
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import type { VoiceChangeOptions } from './effects_mastering';
|
|
2
|
+
import type { ClippingReport, DynamicRangeReport, MeteringDetectClippingOptions, MeteringDynamicRangeOptions, SpectrumOptions, SpectrumReport } from './metering';
|
|
3
|
+
import type { AnalysisResult, ChordAnalysisResult, ChordDetectionOptions, ChromaResult, HpssResult, Key, KeyCandidate, KeyDetectionOptions, LufsResult, MasteringChainConfig, MasteringChainResult, MasteringOptions, MasteringPreset, MasteringProcessorParams, MasteringResult, MelSpectrogramResult, MfccResult, Mode, NoteStretchOptions, PitchClass, PitchResult, SoloProcessor, StftResult } from './public_types';
|
|
4
|
+
import type { MusicAnalyzeOptions } from './quick_analysis';
|
|
5
|
+
import type { ProgressCallback, WasmNnlsChromaResult } from './sonare.js';
|
|
6
|
+
import type { ValidateOptions } from './validation';
|
|
7
|
+
type BrowserDecodeContext = Pick<BaseAudioContext, 'decodeAudioData' | 'sampleRate'>;
|
|
8
|
+
export interface BrowserAudioDecodeOptions {
|
|
9
|
+
/**
|
|
10
|
+
* AudioContext/OfflineAudioContext used for browser codec fallback. Its
|
|
11
|
+
* `sampleRate` becomes the returned Audio sample rate.
|
|
12
|
+
*/
|
|
13
|
+
audioContext?: BrowserDecodeContext;
|
|
14
|
+
/**
|
|
15
|
+
* Factory used when `audioContext` is omitted. `targetSampleRate` is passed
|
|
16
|
+
* through so browsers that honor AudioContextOptions decode directly at that
|
|
17
|
+
* rate.
|
|
18
|
+
*/
|
|
19
|
+
createAudioContext?: (options?: AudioContextOptions) => BrowserDecodeContext;
|
|
20
|
+
/**
|
|
21
|
+
* Requested fallback decode rate when this helper creates the context. If the
|
|
22
|
+
* browser ignores it or a context is supplied, no extra resampling is applied.
|
|
23
|
+
*/
|
|
24
|
+
targetSampleRate?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Wrapper around audio data that exposes analysis and feature functions as
|
|
28
|
+
* instance methods.
|
|
29
|
+
*
|
|
30
|
+
* Not every module-level function has a method here — `analyzeBpm`,
|
|
31
|
+
* `analyzeRhythm`, `analyzeDynamics`, `analyzeTimbre`, `analyzeImpulseResponse`
|
|
32
|
+
* and `detectAcoustic` are reachable as free functions only, and the Node
|
|
33
|
+
* facade exposes them as methods as well. Where a method does exist on both, it
|
|
34
|
+
* takes the same arguments.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { init, Audio } from '@libraz/libsonare';
|
|
39
|
+
*
|
|
40
|
+
* await init();
|
|
41
|
+
*
|
|
42
|
+
* const audio = Audio.fromBuffer(samples, 44100);
|
|
43
|
+
* console.log('BPM:', audio.detectBpm());
|
|
44
|
+
* console.log('Key:', audio.detectKey().name);
|
|
45
|
+
*
|
|
46
|
+
* const mel = audio.melSpectrogram();
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare class Audio {
|
|
50
|
+
private _samples;
|
|
51
|
+
private _sampleRate;
|
|
52
|
+
private constructor();
|
|
53
|
+
/**
|
|
54
|
+
* Create an Audio instance from raw sample data.
|
|
55
|
+
*
|
|
56
|
+
* @param samples - Mono float samples.
|
|
57
|
+
* @param sampleRate - Sample rate in Hz (default `48000`, matching the
|
|
58
|
+
* Node/Python surfaces).
|
|
59
|
+
*/
|
|
60
|
+
static fromBuffer(samples: Float32Array, sampleRate?: number): Audio;
|
|
61
|
+
/**
|
|
62
|
+
* Create an Audio instance by decoding audio bytes in memory.
|
|
63
|
+
*
|
|
64
|
+
* @param bytes - Encoded audio bytes such as WAV or MP3.
|
|
65
|
+
*/
|
|
66
|
+
static fromMemory(bytes: Uint8Array): Audio;
|
|
67
|
+
/**
|
|
68
|
+
* Decode audio bytes with the native WASM decoder first, then fall back to the
|
|
69
|
+
* browser codec stack (`AudioContext.decodeAudioData`) for formats such as
|
|
70
|
+
* AAC, OGG, and FLAC when available. Browser-decoded multi-channel audio is
|
|
71
|
+
* mixed down to mono to match the `Audio` wrapper contract.
|
|
72
|
+
*/
|
|
73
|
+
static fromMemoryWithBrowserFallback(bytes: Uint8Array, options?: BrowserAudioDecodeOptions): Promise<Audio>;
|
|
74
|
+
/**
|
|
75
|
+
* A copy of the raw audio samples. Mirrors Node's `getData()` contract: the
|
|
76
|
+
* returned array is independent of the Audio's internal buffer, so mutating
|
|
77
|
+
* it (or transferring it to a Worker) does not affect subsequent facade
|
|
78
|
+
* calls, which all read the internal snapshot directly.
|
|
79
|
+
*/
|
|
80
|
+
get data(): Float32Array;
|
|
81
|
+
/** Number of samples. */
|
|
82
|
+
get length(): number;
|
|
83
|
+
/** Sample rate in Hz. */
|
|
84
|
+
get sampleRate(): number;
|
|
85
|
+
/** Duration in seconds. */
|
|
86
|
+
get duration(): number;
|
|
87
|
+
detectBpm(): number;
|
|
88
|
+
detectKey(options?: KeyDetectionOptions): Key;
|
|
89
|
+
detectKeyCandidates(options?: KeyDetectionOptions): KeyCandidate[];
|
|
90
|
+
detectOnsets(): Float32Array;
|
|
91
|
+
detectBeats(): Float32Array;
|
|
92
|
+
detectDownbeats(): Float32Array;
|
|
93
|
+
detectChords(options?: ChordDetectionOptions): ChordAnalysisResult;
|
|
94
|
+
chordFunctionalAnalysis(keyRoot: PitchClass, keyMode: Mode, options?: ChordDetectionOptions): string[];
|
|
95
|
+
/**
|
|
96
|
+
* Full music analysis of the held buffer.
|
|
97
|
+
*
|
|
98
|
+
* Takes the same option bag as the module-level {@link analyze} and as the
|
|
99
|
+
* Node facade's `Audio.analyze`; this method used to drop it, so the same
|
|
100
|
+
* call was tunable on one binding and fixed at the defaults on the other.
|
|
101
|
+
*/
|
|
102
|
+
analyze(options?: MusicAnalyzeOptions): AnalysisResult;
|
|
103
|
+
analyzeWithProgress(onProgress: ProgressCallback): AnalysisResult;
|
|
104
|
+
hpss(kernelHarmonic?: number, kernelPercussive?: number): HpssResult;
|
|
105
|
+
harmonic(): Float32Array;
|
|
106
|
+
percussive(): Float32Array;
|
|
107
|
+
timeStretch(rate: number): Float32Array;
|
|
108
|
+
pitchShift(semitones: number): Float32Array;
|
|
109
|
+
pitchCorrectToMidi(currentMidi?: number, targetMidi?: number): Float32Array;
|
|
110
|
+
noteStretch(options?: NoteStretchOptions): Float32Array;
|
|
111
|
+
noteMove(options?: import('./public_types.js').NoteMoveOptions): Float32Array;
|
|
112
|
+
voiceChange(options?: VoiceChangeOptions): Float32Array;
|
|
113
|
+
normalize(targetDb?: number): Float32Array;
|
|
114
|
+
mastering(options?: MasteringOptions): MasteringResult;
|
|
115
|
+
masteringChain(config?: MasteringChainConfig, onProgress?: ProgressCallback): MasteringChainResult;
|
|
116
|
+
masterAudio(presetName?: MasteringPreset, overrides?: MasteringChainConfig | null, onProgress?: ProgressCallback): MasteringChainResult;
|
|
117
|
+
masteringProcess(processorName: SoloProcessor, params?: MasteringProcessorParams): MasteringResult;
|
|
118
|
+
trim(thresholdDb?: number): Float32Array;
|
|
119
|
+
stft(nFft?: number, hopLength?: number): StftResult;
|
|
120
|
+
stftDb(nFft?: number, hopLength?: number): {
|
|
121
|
+
nBins: number;
|
|
122
|
+
nFrames: number;
|
|
123
|
+
db: Float32Array;
|
|
124
|
+
};
|
|
125
|
+
melSpectrogram(nFft?: number, hopLength?: number, nMels?: number, fmin?: number, fmax?: number, htk?: boolean): MelSpectrogramResult;
|
|
126
|
+
mfcc(nFft?: number, hopLength?: number, nMels?: number, nMfcc?: number, fmin?: number, fmax?: number, htk?: boolean): MfccResult;
|
|
127
|
+
chroma(nFft?: number, hopLength?: number): ChromaResult;
|
|
128
|
+
nnlsChroma(): WasmNnlsChromaResult;
|
|
129
|
+
onsetEnvelope(nFft?: number, hopLength?: number, nMels?: number): Float32Array;
|
|
130
|
+
lufs(): LufsResult;
|
|
131
|
+
momentaryLufs(): Float32Array;
|
|
132
|
+
shortTermLufs(): Float32Array;
|
|
133
|
+
spectralCentroid(nFft?: number, hopLength?: number): Float32Array;
|
|
134
|
+
spectralBandwidth(nFft?: number, hopLength?: number): Float32Array;
|
|
135
|
+
spectralRolloff(nFft?: number, hopLength?: number, rollPercent?: number): Float32Array;
|
|
136
|
+
spectralFlatness(nFft?: number, hopLength?: number): Float32Array;
|
|
137
|
+
zeroCrossingRate(frameLength?: number, hopLength?: number): Float32Array;
|
|
138
|
+
rmsEnergy(frameLength?: number, hopLength?: number): Float32Array;
|
|
139
|
+
pitchYin(frameLength?: number, hopLength?: number, fmin?: number, fmax?: number, threshold?: number, fillNa?: boolean): PitchResult;
|
|
140
|
+
pitchPyin(frameLength?: number, hopLength?: number, fmin?: number, fmax?: number, threshold?: number, fillNa?: boolean): PitchResult;
|
|
141
|
+
resample(targetSr: number): Float32Array;
|
|
142
|
+
peakDb(): number;
|
|
143
|
+
rmsDb(): number;
|
|
144
|
+
dcOffset(): number;
|
|
145
|
+
crestFactorDb(): number;
|
|
146
|
+
silenceRatio(thresholdDb?: number, frameLength?: number, hopLength?: number): number;
|
|
147
|
+
/**
|
|
148
|
+
* Inter-sample (true) peak in dBFS. `oversampleFactor` must be a power of two
|
|
149
|
+
* in [1, 16]; pass 0 to use the library default (4).
|
|
150
|
+
*/
|
|
151
|
+
truePeakDb(oversampleFactor?: number): number;
|
|
152
|
+
detectClipping(options?: MeteringDetectClippingOptions): ClippingReport;
|
|
153
|
+
dynamicRange(options?: MeteringDynamicRangeOptions): DynamicRangeReport;
|
|
154
|
+
spectrum(options?: SpectrumOptions & ValidateOptions): SpectrumReport;
|
|
155
|
+
/**
|
|
156
|
+
* True single-frame magnitude / power / dB spectrum starting at `frameOffset`.
|
|
157
|
+
* See {@link meteringSpectrumFrame} for the frame-validation contract.
|
|
158
|
+
*/
|
|
159
|
+
spectrumFrame(frameOffset?: number, options?: SpectrumOptions & ValidateOptions): SpectrumReport;
|
|
160
|
+
ebur128LoudnessRange(): number;
|
|
161
|
+
}
|
|
162
|
+
export {};
|
|
163
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { type OpfsClipPageProviderBinding, type OpfsClipPageProviderOptions } from './opfs_clip_pages';
|
|
2
|
+
import type { ClipPageProvider, RealtimeEngine } from './realtime_engine';
|
|
3
|
+
/**
|
|
4
|
+
* Minimal engine surface the streamer drives. {@link RealtimeEngine} satisfies
|
|
5
|
+
* this structurally; tests can supply a lightweight stand-in.
|
|
6
|
+
*/
|
|
7
|
+
export interface ClipPageStreamerEngine {
|
|
8
|
+
/** Drain one pending audio-thread page-miss request, or `null` when empty. */
|
|
9
|
+
popClipPageRequest(): ClipPageStreamerRequest | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* A page miss reported by either a direct engine (`sample`) or the worklet
|
|
13
|
+
* bridge (`pageIndex`). Exactly one position form is required.
|
|
14
|
+
*/
|
|
15
|
+
export interface ClipPageStreamerRequest {
|
|
16
|
+
clipId: number;
|
|
17
|
+
sample?: number;
|
|
18
|
+
pageIndex?: number;
|
|
19
|
+
}
|
|
20
|
+
/** A paged clip the streamer keeps fed from its backing store. */
|
|
21
|
+
export interface ClipPageStreamSource {
|
|
22
|
+
/** Clip schedule id passed to `setClips` (matches {@link ClipPageRequest.clipId}). */
|
|
23
|
+
clipId: number;
|
|
24
|
+
/** OPFS-backed page provider binding for this clip. */
|
|
25
|
+
binding: OpfsClipPageProviderBinding;
|
|
26
|
+
/** Page size in frames (must equal the provider's `pageFrames`). */
|
|
27
|
+
pageFrames: number;
|
|
28
|
+
/** Total sample count of the clip source. */
|
|
29
|
+
numSamples: number;
|
|
30
|
+
}
|
|
31
|
+
export interface ClipPageStreamerOptions {
|
|
32
|
+
/**
|
|
33
|
+
* Pages to prefetch ahead of the page a miss was reported for. Larger values
|
|
34
|
+
* hide fetch latency at the cost of more resident memory. Default 2.
|
|
35
|
+
*/
|
|
36
|
+
readAheadPages?: number;
|
|
37
|
+
/**
|
|
38
|
+
* Pages to retain behind the playback frontier before eviction, so a small
|
|
39
|
+
* backward seek does not immediately miss. Default 1.
|
|
40
|
+
*/
|
|
41
|
+
retainBehindPages?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Upper bound on requests drained per {@link ClipPageStreamer.pump} call, so a
|
|
44
|
+
* burst of misses cannot spin unbounded. Default 256.
|
|
45
|
+
*/
|
|
46
|
+
maxRequestsPerPump?: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Keeps OPFS-paged clips fed within a bounded sliding window around the live
|
|
50
|
+
* playback position, so a multitrack arrangement never holds its full PCM in
|
|
51
|
+
* WASM memory.
|
|
52
|
+
*
|
|
53
|
+
* The audio thread reports a page miss whenever the {@link ClipPlayer} reads a
|
|
54
|
+
* sample whose page is not resident. {@link pump} drains those requests, fetches
|
|
55
|
+
* the missing page plus a read-ahead window from each clip's backing store, and
|
|
56
|
+
* evicts pages that fall outside the window via the provider's `clear`. The
|
|
57
|
+
* resident set per clip is therefore bounded to
|
|
58
|
+
* `retainBehindPages + readAheadPages + 1` pages regardless of clip length.
|
|
59
|
+
*
|
|
60
|
+
* Call {@link pump} on a cadence that keeps up with playback — typically once
|
|
61
|
+
* per animation frame or per worklet control tick on the main/control thread
|
|
62
|
+
* (never the audio thread; fetches are asynchronous).
|
|
63
|
+
*/
|
|
64
|
+
export declare class ClipPageStreamer {
|
|
65
|
+
private readonly engine;
|
|
66
|
+
private readonly readAheadPages;
|
|
67
|
+
private readonly retainBehindPages;
|
|
68
|
+
private readonly maxRequestsPerPump;
|
|
69
|
+
private readonly sources;
|
|
70
|
+
private closed;
|
|
71
|
+
constructor(engine: ClipPageStreamerEngine, options?: ClipPageStreamerOptions);
|
|
72
|
+
/**
|
|
73
|
+
* Register a paged clip. Pages already supplied to the provider before
|
|
74
|
+
* registration (for example a primed first page) should be passed in
|
|
75
|
+
* `initialResidentPages` so they participate in eviction.
|
|
76
|
+
*/
|
|
77
|
+
addSource(source: ClipPageStreamSource, initialResidentPages?: Iterable<number>): void;
|
|
78
|
+
/** Stop tracking a clip. Does not close its binding (the caller owns that). */
|
|
79
|
+
removeSource(clipId: number): void;
|
|
80
|
+
/**
|
|
81
|
+
* Explicitly start a new playback generation after a host seek/loop. Resident
|
|
82
|
+
* pages are evicted and any older in-flight fetch is cleared when it settles.
|
|
83
|
+
* The next miss establishes the new bounded window.
|
|
84
|
+
*/
|
|
85
|
+
resetSource(clipId: number): void;
|
|
86
|
+
/**
|
|
87
|
+
* Drain pending page-miss requests, fetch the missing pages plus their
|
|
88
|
+
* read-ahead window, and evict out-of-window pages. Resolves once this round's
|
|
89
|
+
* fetches settle. Concurrent fetches are serialized inside each binding.
|
|
90
|
+
*/
|
|
91
|
+
pump(): Promise<void>;
|
|
92
|
+
/** Close every registered clip's binding and stop tracking. */
|
|
93
|
+
close(): void;
|
|
94
|
+
private serviceFrontier;
|
|
95
|
+
private resetState;
|
|
96
|
+
private clearPage;
|
|
97
|
+
}
|
|
98
|
+
export interface OpfsClipStreamOptions extends OpfsClipPageProviderOptions {
|
|
99
|
+
/** Clip schedule id used in `setClips` (matches the page-miss request clipId). */
|
|
100
|
+
clipId: number;
|
|
101
|
+
/**
|
|
102
|
+
* Leading pages fetched synchronously before returning, so playback can start
|
|
103
|
+
* without an immediate miss. Default 1.
|
|
104
|
+
*/
|
|
105
|
+
primePages?: number;
|
|
106
|
+
}
|
|
107
|
+
export interface OpfsClipStream {
|
|
108
|
+
binding: OpfsClipPageProviderBinding;
|
|
109
|
+
/** Pass as `addClip`'s buffer argument to schedule the streaming clip. */
|
|
110
|
+
provider: ClipPageProvider;
|
|
111
|
+
}
|
|
112
|
+
/** Structural seam implemented by the AudioWorklet-backed `SonareEngine`. */
|
|
113
|
+
export interface WorkletOpfsClipStreamHost {
|
|
114
|
+
attachOpfsClipStream(options: OpfsClipStreamOptions): Promise<OpfsClipStream>;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* One-call wiring of an OPFS-backed streaming clip: creates the page provider,
|
|
118
|
+
* primes the leading pages, and registers it with `streamer` so later misses are
|
|
119
|
+
* serviced within the bounded window. Returns the binding (for `close`) and the
|
|
120
|
+
* provider to schedule via `addClip(trackId, provider, startPpq, { id: clipId })`.
|
|
121
|
+
*
|
|
122
|
+
* @param streamer Shared streamer pumped on the control thread.
|
|
123
|
+
* @param engine Engine the provider is created on (the same one `streamer` drives).
|
|
124
|
+
* @param options Provider options plus `clipId` and optional `primePages`.
|
|
125
|
+
*/
|
|
126
|
+
export declare function attachOpfsClipStream(streamer: ClipPageStreamer, engine: RealtimeEngine, options: OpfsClipStreamOptions): Promise<OpfsClipStream>;
|
|
127
|
+
/**
|
|
128
|
+
* Worklet overload: delegates to `SonareEngine.attachOpfsClipStream`, which
|
|
129
|
+
* creates the remote provider and drives this same sliding-window policy from
|
|
130
|
+
* worklet page-miss messages.
|
|
131
|
+
*/
|
|
132
|
+
export declare function attachOpfsClipStream(engine: WorkletOpfsClipStreamHost, options: OpfsClipStreamOptions): Promise<OpfsClipStream>;
|
|
133
|
+
//# sourceMappingURL=clip_page_streamer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clip_page_streamer.d.ts","sourceRoot":"","sources":["../src/clip_page_streamer.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EACjC,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,gBAAgB,EAAmB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE3F;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,8EAA8E;IAC9E,kBAAkB,IAAI,uBAAuB,GAAG,IAAI,CAAC;CACtD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,OAAO,EAAE,2BAA2B,CAAC;IACrC,oEAAoE;IACpE,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAaD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,sBAAsB,EAAE,OAAO,GAAE,uBAA4B;IAOjF;;;;OAIG;IACH,SAAS,CAAC,MAAM,EAAE,oBAAoB,EAAE,oBAAoB,GAAE,QAAQ,CAAC,MAAM,CAAM,GAAG,IAAI;IAkB1F,+EAA+E;IAC/E,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQlC;;;;OAIG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAOjC;;;;OAIG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC3B,+DAA+D;IAC/D,KAAK,IAAI,IAAI;IAYb,OAAO,CAAC,eAAe;IAsDvB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,SAAS;CASlB;AAED,MAAM,WAAW,qBAAsB,SAAQ,2BAA2B;IACxE,kFAAkF;IAClF,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,2BAA2B,CAAC;IACrC,0EAA0E;IAC1E,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,6EAA6E;AAC7E,MAAM,WAAW,yBAAyB;IACxC,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CAC/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC;AAC3B;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,yBAAyB,EACjC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAAC"}
|
package/dist/codes.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { ProjectAutomationCurve } from './project_types';
|
|
2
|
+
import type { AutomationCurve, MeterTap, PanLawInput, PanMode, SendTiming, SidechainSourceKind } from './public_types';
|
|
3
|
+
/** Resolve a numeric ordinal in an inclusive range without coercion. */
|
|
4
|
+
export declare function resolveOrdinalInRange(value: unknown, min: number, max: number, enumName: string): number;
|
|
5
|
+
/** Resolve a public enum spelling or ordinal without permitting unknown values. */
|
|
6
|
+
export declare function resolveEnumOrdinal(value: unknown, values: Readonly<Record<string, number>>, enumName: string): number;
|
|
7
|
+
/**
|
|
8
|
+
* Automation curve spellings and their `SonareAutomationCurve` ordinals.
|
|
9
|
+
*
|
|
10
|
+
* Single source of truth for the vocabulary: {@link AutomationCurve} and
|
|
11
|
+
* {@link ProjectAutomationCurve} are derived from these keys, so a spelling
|
|
12
|
+
* cannot be documented without resolving, or resolve without being documented.
|
|
13
|
+
*/
|
|
14
|
+
export declare const AUTOMATION_CURVE_VALUES: {
|
|
15
|
+
readonly linear: 0;
|
|
16
|
+
readonly exponential: 1;
|
|
17
|
+
readonly hold: 2;
|
|
18
|
+
readonly 's-curve': 3;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* The Project facade additionally accepts the legacy `'scurve'` spelling for
|
|
22
|
+
* compatibility with project data written before `'s-curve'` was canonical.
|
|
23
|
+
* The Node package declares the same pair of tables, so a breakpoint accepted
|
|
24
|
+
* by one facade resolves to the same ordinal on the other.
|
|
25
|
+
*/
|
|
26
|
+
export declare const PROJECT_AUTOMATION_CURVE_VALUES: {
|
|
27
|
+
readonly scurve: 3;
|
|
28
|
+
readonly linear: 0;
|
|
29
|
+
readonly exponential: 1;
|
|
30
|
+
readonly hold: 2;
|
|
31
|
+
readonly 's-curve': 3;
|
|
32
|
+
};
|
|
33
|
+
export declare function automationCurveCode(curve: AutomationCurve): number;
|
|
34
|
+
/** Resolve a Project automation breakpoint curve, legacy spellings included. */
|
|
35
|
+
export declare function projectAutomationCurveCode(curve: ProjectAutomationCurve | undefined): number;
|
|
36
|
+
export declare function panLawCode(panLaw: PanLawInput): number;
|
|
37
|
+
export declare function panModeCode(panMode: PanMode | number): number;
|
|
38
|
+
export declare function meterTapCode(tap: MeterTap | number): number;
|
|
39
|
+
export declare function sendTimingCode(timing: SendTiming | number): number;
|
|
40
|
+
/** Resolve a sidechain source kind to its `SonareSidechainSourceKind` ordinal. */
|
|
41
|
+
export declare function sidechainSourceKindCode(kind: SidechainSourceKind | number): number;
|
|
42
|
+
/** Resolve a per-track PFL/AFL monitor mode to its C-ABI ordinal. */
|
|
43
|
+
export declare function trackMonitorModeCode(mode: unknown): number;
|
|
44
|
+
//# sourceMappingURL=codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../src/codes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EACV,eAAe,EACf,QAAQ,EACR,WAAW,EACX,OAAO,EACP,UAAU,EACV,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAExB,wEAAwE;AACxE,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GACf,MAAM,CAKR;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxC,QAAQ,EAAE,MAAM,GACf,MAAM,CAqBR;AAED;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;;CAK1B,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,+BAA+B;;;;;;CAGlC,CAAC;AA6BX,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAElE;AAED,gFAAgF;AAChF,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,sBAAsB,GAAG,SAAS,GAAG,MAAM,CAE5F;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAGtD;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAI7D;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM,CAMlE;AAED,kFAAkF;AAClF,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM,GAAG,MAAM,CAElF;AAED,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAE1D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { assignNoteTargets, decomposeNotePitch, extractNotes, mergeNotes, noteMove, noteStretch, noteTargetsFromSmf, renderNotes, splitNote, } from './effects_note_ops';
|
|
2
|
+
export { extractPercussiveEvents, renderPercussiveEvents } from './effects_percussive';
|
|
3
|
+
export { harmonic, hpss, percussive } from './effects_separation';
|
|
4
|
+
export { spectralEdit } from './effects_spectral';
|
|
5
|
+
export { pitchCorrectTimevarying, pitchCorrectToMidi, pitchCorrectToMidiTimevarying, pitchShift, timeStretch, } from './effects_timepitch';
|
|
6
|
+
export type { VoiceChangeOptions, VoiceChangeRealtimeOptions, VoiceChangeRealtimeRequest, VoiceChangeRequest, } from './effects_voice_change';
|
|
7
|
+
export { voiceChange, voiceChangeRealtime } from './effects_voice_change';
|
|
8
|
+
export { masterAudio, masterAudioStereo, masterAudioStereoWithProgress, masterAudioWithProgress, masteringChain, masteringChainStereo, masteringChainStereoWithProgress, masteringChainWithProgress, masteringPlatformNames, masteringPresetNames, masteringPresetParams, normalize, normalizeStereo, } from './mastering_chain';
|
|
9
|
+
export type { MasteringAbMatchLoudnessRequest, MasteringAmpPresetCatalogEntry, MasteringAssistantParamsRequest, MasteringAssistantStereoParamsRequest, MasteringChannelPolicy, MasteringInsertParamChoice, MasteringInsertParamInfo, MasteringInsertSlot, MasteringInsertTiming, MasteringPairAnalyzeRequest, MasteringPairProcessRequest, MasteringProcessorCatalogEntry, MasteringProcessorCategory, MasteringProcessRequest, MasteringProcessStereoRequest, MasteringRealtimeCost, MasteringSamplesParamsRequest, MasteringStereoAnalyzeRequest, MasteringStereoParamsRequest, MasteringStreamingPreviewRequest, MasteringStreamingPreviewStereoRequest, } from './mastering_core';
|
|
10
|
+
export { mastering, masteringAbMatchLoudness, masteringAmpPresetCatalog, masteringAssistantSuggest, masteringAssistantSuggestChain, masteringAssistantSuggestChainStereo, masteringAssistantSuggestStereo, masteringAudioProfile, masteringAudioProfileStereo, masteringInsertNames, masteringInsertParamInfo, masteringInsertParamNames, masteringInsertTiming, masteringPairAnalysisNames, masteringPairAnalyze, masteringPairProcess, masteringPairProcessorNames, masteringProcess, masteringProcessorCatalog, masteringProcessorNames, masteringProcessStereo, masteringStereoAnalysisNames, masteringStereoAnalyze, masteringStreamingPreview, masteringStreamingPreviewStereo, } from './mastering_core';
|
|
11
|
+
export type { CompressorDetector, CompressorOptions, DynamicsProcessorResult, GateOptions, MasteringDynamicsCompressorRequest, MasteringDynamicsGateRequest, MasteringDynamicsTransientShaperRequest, TransientShaperOptions, } from './mastering_dynamics';
|
|
12
|
+
export { masteringDynamicsCompressor, masteringDynamicsGate, masteringDynamicsTransientShaper, } from './mastering_dynamics';
|
|
13
|
+
export type { MixStereoRequest } from './mixing_oneshot';
|
|
14
|
+
export { mixingScenePresetJson, mixingScenePresetNames, mixStereo } from './mixing_oneshot';
|
|
15
|
+
export type { DereverbClassicalOptions, MasteringRepairDereverbClassicalLinkedRequest, MasteringRepairDereverbClassicalRequest, MasteringRepairDereverbClassicalStereoRequest, MasteringRepairDereverbConfigForRoomRequest, MasteringRepairDetectReverbRequest, } from './repair_dereverb';
|
|
16
|
+
export { masteringRepairDereverbClassical, masteringRepairDereverbClassicalLinked, masteringRepairDereverbClassicalStereo, masteringRepairDereverbConfigForRoom, masteringRepairDetectReverb, } from './repair_dereverb';
|
|
17
|
+
export type { DeclickOptions, DeclipOptions, DecrackleMode, DecrackleOptions, MasteringRepairDeclickRequest, MasteringRepairDeclickStereoRequest, MasteringRepairDeclipRequest, MasteringRepairDeclipStereoRequest, MasteringRepairDecrackleRequest, MasteringRepairDecrackleStereoRequest, MasteringRepairDetectClicksRequest, MasteringRepairDetectClippingRequest, MasteringRepairDetectCrackleRequest, } from './repair_impulsive';
|
|
18
|
+
export { masteringRepairDeclick, masteringRepairDeclickStereo, masteringRepairDeclip, masteringRepairDeclipStereo, masteringRepairDecrackle, masteringRepairDecrackleStereo, masteringRepairDetectClicks, masteringRepairDetectClipping, masteringRepairDetectCrackle, } from './repair_impulsive';
|
|
19
|
+
export type { DehumMode, DehumOptions, DenoiseClassicalMode, DenoiseClassicalNoiseEstimator, DenoiseClassicalOptions, MasteringRepairDehumRequest, MasteringRepairDehumStereoRequest, MasteringRepairDenoiseClassicalLinkedRequest, MasteringRepairDenoiseClassicalRequest, MasteringRepairDenoiseClassicalStereoRequest, MasteringRepairDetectHumRequest, MasteringRepairDetectNoiseFloorRequest, MasteringRepairNoiseBandBinsRequest, } from './repair_noise';
|
|
20
|
+
export { masteringRepairDehum, masteringRepairDehumStereo, masteringRepairDenoiseClassical, masteringRepairDenoiseClassicalLinked, masteringRepairDenoiseClassicalStereo, masteringRepairDetectHum, masteringRepairDetectNoiseFloor, masteringRepairNoiseBandBins, } from './repair_noise';
|
|
21
|
+
export type { MasteringRepairDetectTrimRangeRequest, MasteringRepairDetectTrimRangeStereoRequest, MasteringRepairTrimSilenceRequest, MasteringRepairTrimSilenceStereoRequest, TrimSilenceMode, TrimSilenceOptions, } from './repair_trim';
|
|
22
|
+
export { masteringRepairDetectTrimRange, masteringRepairDetectTrimRangeStereo, masteringRepairTrimSilence, masteringRepairTrimSilenceStereo, } from './repair_trim';
|
|
23
|
+
//# sourceMappingURL=effects_mastering.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effects_mastering.d.ts","sourceRoot":"","sources":["../src/effects_mastering.ts"],"names":[],"mappings":"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"}
|