@libraz/libsonare 1.5.4 → 1.6.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/README.md +109 -20
- package/dist/analysis.d.ts +5730 -0
- package/dist/analysis.js +2464 -0
- package/dist/analysis.js.map +1 -0
- package/dist/index.d.ts +873 -63
- package/dist/index.js +1037 -265
- package/dist/index.js.map +1 -1
- package/dist/schemas/realtime-voice-changer-preset-pack.schema.json +27 -0
- package/dist/schemas/realtime-voice-changer-preset.schema.json +140 -0
- package/dist/sonare-analysis.js +2 -0
- package/dist/sonare-analysis.wasm +0 -0
- package/dist/sonare.js +1 -1
- package/dist/sonare.wasm +0 -0
- package/dist/worker.d.ts +65 -0
- package/dist/worker.js +707 -0
- package/dist/worker.js.map +1 -0
- package/dist/worklet.d.ts +596 -86
- package/dist/worklet.js +1658 -235
- package/dist/worklet.js.map +1 -1
- package/package.json +23 -11
- package/src/_chain_config.ts +5 -23
- package/src/analysis.ts +137 -0
- package/src/analysis_helpers.ts +29 -0
- package/src/audio.ts +5 -3
- package/src/clip_page_streamer.ts +62 -8
- package/src/codes.ts +51 -64
- package/src/effects_mastering.ts +1 -0
- package/src/effects_transform.ts +12 -6
- package/src/errors.ts +1 -0
- package/src/feature_core.ts +159 -3
- package/src/feature_music.ts +35 -16
- package/src/feature_pitch.ts +75 -6
- package/src/feature_spectral.ts +234 -8
- package/src/feature_spectrogram.ts +186 -5
- package/src/features.ts +16 -1
- package/src/index.ts +104 -7
- package/src/mastering_chain.ts +20 -8
- package/src/mastering_core.ts +7 -0
- package/src/mastering_dynamics.ts +7 -1
- package/src/metering.ts +51 -5
- package/src/mixer.ts +14 -1
- package/src/opfs_clip_pages.ts +26 -1
- package/src/project.ts +7 -0
- package/src/project_class.ts +74 -13
- package/src/project_internal.ts +24 -29
- package/src/project_types.ts +69 -10
- package/src/public_types.ts +68 -0
- package/src/public_types_mastering.ts +28 -0
- package/src/public_types_mixing.ts +11 -2
- package/src/public_types_music.ts +13 -0
- package/src/public_types_spectral.ts +43 -3
- package/src/quick_analysis.ts +48 -12
- package/src/realtime_engine.ts +162 -4
- package/src/realtime_voice_changer.ts +51 -77
- package/src/sonare-analysis.js.d.ts +8 -0
- package/src/sonare.js.d.ts +305 -9
- package/src/streaming_processors.ts +22 -1
- package/src/validation.ts +6 -0
- package/src/web_midi.ts +36 -4
- package/src/worker.ts +196 -0
- package/src/worker_client.ts +352 -0
- package/src/worker_protocol.ts +59 -0
- package/src/worklet/engine-automation.ts +2 -1
- package/src/worklet/engine-capture-facade.ts +13 -4
- package/src/worklet/engine-clips.ts +12 -3
- package/src/worklet/engine-node.ts +212 -4
- package/src/worklet/engine-offline.ts +7 -2
- package/src/worklet/engine-parameter-facade.ts +26 -5
- package/src/worklet/engine-processor.ts +383 -42
- package/src/worklet/engine-register.ts +8 -0
- package/src/worklet/engine-strips.ts +17 -1
- package/src/worklet/engine-sync.ts +2 -6
- package/src/worklet/engine-tempo-facade.ts +8 -6
- package/src/worklet/engine.ts +380 -13
- package/src/worklet/guards.ts +22 -1
- package/src/worklet/messages.ts +141 -9
- package/src/worklet/protocol.ts +303 -17
- package/src/worklet/voice-changer-processor.ts +12 -15
- package/src/worklet.ts +20 -1
package/src/sonare.js.d.ts
CHANGED
|
@@ -2,7 +2,12 @@
|
|
|
2
2
|
* Type declarations for the Emscripten-generated WASM module with embind
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
ProgressCallback,
|
|
7
|
+
SonareCapabilities,
|
|
8
|
+
SpectralRegionOp,
|
|
9
|
+
SurroundPan,
|
|
10
|
+
} from './public_types';
|
|
6
11
|
|
|
7
12
|
export interface SonareModuleOptions {
|
|
8
13
|
locateFile?: (path: string, prefix: string) => string;
|
|
@@ -133,8 +138,10 @@ export interface WasmMelodyContourResult {
|
|
|
133
138
|
export interface WasmAnalysisResult {
|
|
134
139
|
bpm: number;
|
|
135
140
|
bpmConfidence: number;
|
|
141
|
+
bpmCandidates: WasmBpmHypothesis[];
|
|
136
142
|
key: WasmKeyResult;
|
|
137
143
|
timeSignature: WasmTimeSignatureResult;
|
|
144
|
+
timeSignatureCandidates: WasmTimeSignatureResult[];
|
|
138
145
|
beats: WasmBeatResult[];
|
|
139
146
|
chords: WasmChordResult[];
|
|
140
147
|
sections: WasmSectionResult[];
|
|
@@ -145,6 +152,12 @@ export interface WasmAnalysisResult {
|
|
|
145
152
|
form: string;
|
|
146
153
|
}
|
|
147
154
|
|
|
155
|
+
export interface WasmBpmHypothesis {
|
|
156
|
+
value: number;
|
|
157
|
+
confidence: number;
|
|
158
|
+
relation: 'primary' | 'half' | 'double' | 'other';
|
|
159
|
+
}
|
|
160
|
+
|
|
148
161
|
export interface WasmBpmCandidate {
|
|
149
162
|
bpm: number;
|
|
150
163
|
confidence: number;
|
|
@@ -324,6 +337,12 @@ export interface WasmMatrix2dResult {
|
|
|
324
337
|
cols: number;
|
|
325
338
|
}
|
|
326
339
|
|
|
340
|
+
export interface WasmSegmentMatrixResult {
|
|
341
|
+
rows: number;
|
|
342
|
+
cols: number;
|
|
343
|
+
values: Float32Array;
|
|
344
|
+
}
|
|
345
|
+
|
|
327
346
|
export interface WasmDecomposeResult {
|
|
328
347
|
w: Float32Array;
|
|
329
348
|
h: Float32Array;
|
|
@@ -390,6 +409,14 @@ export interface WasmPitchResult {
|
|
|
390
409
|
meanF0: number;
|
|
391
410
|
}
|
|
392
411
|
|
|
412
|
+
export interface WasmNoteSegment {
|
|
413
|
+
frameStart: number;
|
|
414
|
+
frameEnd: number;
|
|
415
|
+
startSeconds: number;
|
|
416
|
+
endSeconds: number;
|
|
417
|
+
medianCents: number;
|
|
418
|
+
}
|
|
419
|
+
|
|
393
420
|
export interface WasmTrimResult {
|
|
394
421
|
audio: Float32Array;
|
|
395
422
|
startSample: number;
|
|
@@ -458,6 +485,8 @@ export interface WasmLufsResult {
|
|
|
458
485
|
integratedLufs: number;
|
|
459
486
|
momentaryLufs: number;
|
|
460
487
|
shortTermLufs: number;
|
|
488
|
+
maxMomentaryLufs: number;
|
|
489
|
+
maxShortTermLufs: number;
|
|
461
490
|
loudnessRange: number;
|
|
462
491
|
}
|
|
463
492
|
|
|
@@ -467,6 +496,7 @@ export interface WasmMasteringResult {
|
|
|
467
496
|
inputLufs: number;
|
|
468
497
|
outputLufs: number;
|
|
469
498
|
appliedGainDb: number;
|
|
499
|
+
loudnessTargetLimited?: boolean;
|
|
470
500
|
latencySamples?: number;
|
|
471
501
|
}
|
|
472
502
|
|
|
@@ -475,11 +505,30 @@ export interface WasmStageGainReduction {
|
|
|
475
505
|
gainReductionDb: number;
|
|
476
506
|
}
|
|
477
507
|
|
|
508
|
+
export interface WasmMasteringLoudnessSummary {
|
|
509
|
+
integratedLufs: number;
|
|
510
|
+
maxMomentaryLufs: number;
|
|
511
|
+
maxShortTermLufs: number;
|
|
512
|
+
truePeakDbtp: number;
|
|
513
|
+
loudnessRange: number;
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
export interface WasmMasteringReport {
|
|
517
|
+
before: WasmMasteringLoudnessSummary;
|
|
518
|
+
after: WasmMasteringLoudnessSummary;
|
|
519
|
+
appliedGainDb: number;
|
|
520
|
+
maxGainReductionDb: number;
|
|
521
|
+
loudnessTargetLimited: boolean;
|
|
522
|
+
bandEnergyDeltaDb: Float32Array;
|
|
523
|
+
}
|
|
524
|
+
|
|
478
525
|
export interface WasmMasteringChainResult extends WasmMasteringResult {
|
|
479
526
|
stages: string[];
|
|
480
527
|
outputTruePeakDbtp: number;
|
|
481
528
|
outputLra: number;
|
|
529
|
+
loudnessTargetLimited: boolean;
|
|
482
530
|
stageGainReductions: WasmStageGainReduction[];
|
|
531
|
+
report: WasmMasteringReport;
|
|
483
532
|
}
|
|
484
533
|
|
|
485
534
|
export interface WasmMasteringStereoChainResult {
|
|
@@ -492,7 +541,9 @@ export interface WasmMasteringStereoChainResult {
|
|
|
492
541
|
stages: string[];
|
|
493
542
|
outputTruePeakDbtp: number;
|
|
494
543
|
outputLra: number;
|
|
544
|
+
loudnessTargetLimited: boolean;
|
|
495
545
|
stageGainReductions: WasmStageGainReduction[];
|
|
546
|
+
report: WasmMasteringReport;
|
|
496
547
|
}
|
|
497
548
|
|
|
498
549
|
export interface WasmMasteringStereoResult {
|
|
@@ -619,13 +670,44 @@ export interface WasmProjectMarker {
|
|
|
619
670
|
keyFifths?: number;
|
|
620
671
|
keyMinor?: boolean;
|
|
621
672
|
}
|
|
673
|
+
export interface WasmProjectTrack {
|
|
674
|
+
id: number;
|
|
675
|
+
kind: number;
|
|
676
|
+
midiDestinationId: number;
|
|
677
|
+
gain: number;
|
|
678
|
+
pan: number;
|
|
679
|
+
mute: boolean;
|
|
680
|
+
solo: boolean;
|
|
681
|
+
name: string;
|
|
682
|
+
}
|
|
683
|
+
export interface WasmProjectClip {
|
|
684
|
+
id: number;
|
|
685
|
+
trackId: number;
|
|
686
|
+
sourceId: number;
|
|
687
|
+
sourceKind: number;
|
|
688
|
+
startPpq: number;
|
|
689
|
+
lengthPpq: number;
|
|
690
|
+
sourceOffsetPpq: number;
|
|
691
|
+
gain: number;
|
|
692
|
+
loopMode: number;
|
|
693
|
+
loopLengthPpq: number;
|
|
694
|
+
}
|
|
695
|
+
export interface WasmProjectSource {
|
|
696
|
+
id: number;
|
|
697
|
+
kind: number;
|
|
698
|
+
channelCount: number;
|
|
699
|
+
storageHandleId: number;
|
|
700
|
+
sampleRateHint: number;
|
|
701
|
+
nameOrUri: string;
|
|
702
|
+
}
|
|
622
703
|
|
|
623
704
|
export interface WasmEngineMetronomeConfig {
|
|
624
705
|
enabled: boolean;
|
|
625
706
|
beatGain?: number;
|
|
626
707
|
accentGain?: number;
|
|
708
|
+
/** Explicit click length in samples (0..384000). The engine caps it to one second at its sample rate. */
|
|
627
709
|
clickSamples?: number;
|
|
628
|
-
/** Optional click length in seconds; > 0 overrides the engine 2 ms default. */
|
|
710
|
+
/** Optional click length in seconds (0..1); > 0 overrides the engine 2 ms default. */
|
|
629
711
|
clickSeconds?: number;
|
|
630
712
|
}
|
|
631
713
|
|
|
@@ -837,6 +919,7 @@ export interface WasmRealtimeEngine {
|
|
|
837
919
|
stop: (renderFrame: number) => void;
|
|
838
920
|
seekSample: (timelineSample: number, renderFrame: number) => void;
|
|
839
921
|
settleParameters: () => void;
|
|
922
|
+
flushControlCommands: () => void;
|
|
840
923
|
seekPpq: (ppq: number, renderFrame: number) => void;
|
|
841
924
|
setTempo: (bpm: number) => void;
|
|
842
925
|
setTempoSegments: (segments: WasmEngineTempoSegment[]) => void;
|
|
@@ -920,10 +1003,14 @@ export interface WasmRealtimeEngine {
|
|
|
920
1003
|
clearClipPage: (providerId: number, pageIndex: number) => void;
|
|
921
1004
|
destroyClipPageProvider: (providerId: number) => void;
|
|
922
1005
|
popClipPageRequest: () => WasmClipPageRequest | null;
|
|
1006
|
+
popClipPageRequestToScratch: () => boolean;
|
|
1007
|
+
clipPageRequestScratchClipId: () => number;
|
|
1008
|
+
clipPageRequestScratchSample: () => number;
|
|
1009
|
+
clipPageRequestOverflowCount: () => number;
|
|
923
1010
|
setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
|
|
924
1011
|
armCapture: (armed: boolean) => void;
|
|
925
1012
|
setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
|
|
926
|
-
setCaptureSource: (source: WasmEngineCaptureStatus['source']) => void;
|
|
1013
|
+
setCaptureSource: (source: WasmEngineCaptureStatus['source'] | number) => void;
|
|
927
1014
|
setRecordOffsetSamples: (offsetSamples: number) => void;
|
|
928
1015
|
setInputMonitor: (enabled: boolean, gain: number) => void;
|
|
929
1016
|
resetCapture: () => void;
|
|
@@ -943,6 +1030,7 @@ export interface WasmRealtimeEngine {
|
|
|
943
1030
|
minValue: number,
|
|
944
1031
|
maxValue: number,
|
|
945
1032
|
) => void;
|
|
1033
|
+
bindMidiCcBinding: (binding: import('./project_types').ProjectMidiCcBinding) => void;
|
|
946
1034
|
clearMidiCcBindings: () => void;
|
|
947
1035
|
midiCcBindingCount: () => number;
|
|
948
1036
|
setMidiFx: (destinationId: number, configJson: string) => void;
|
|
@@ -995,14 +1083,29 @@ export interface WasmRealtimeEngine {
|
|
|
995
1083
|
value: number,
|
|
996
1084
|
renderFrame: number,
|
|
997
1085
|
) => void;
|
|
1086
|
+
pushMidiUmp: (destinationId: number, word0: number, renderFrame: number) => void;
|
|
998
1087
|
pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame: number) => void;
|
|
999
1088
|
pushMidiPanic: (renderFrame: number) => void;
|
|
1000
1089
|
setMidiDestinationExternal: (destinationId: number, external: boolean) => void;
|
|
1001
1090
|
setExternalMidiClockEnabled: (enabled: boolean) => void;
|
|
1002
1091
|
externalMidiDroppedCount: () => number;
|
|
1092
|
+
externalMidiPendingCount: () => number;
|
|
1003
1093
|
drainExternalMidi: (maxRecords: number) => WasmExternalMidiEvent[];
|
|
1094
|
+
popExternalMidiToScratch: () => boolean;
|
|
1095
|
+
externalMidiScratchDestinationId: () => number;
|
|
1096
|
+
externalMidiScratchRenderFrame: () => number;
|
|
1097
|
+
externalMidiScratchByteWord: () => number;
|
|
1098
|
+
externalMidiScratchByteCount: () => number;
|
|
1099
|
+
consumeExternalMidiScratch: () => void;
|
|
1004
1100
|
clearParameters: () => void;
|
|
1005
1101
|
process: (channels: Float32Array[]) => Float32Array[];
|
|
1102
|
+
prepareWithChannels: (
|
|
1103
|
+
sampleRate: number,
|
|
1104
|
+
maxBlockSize: number,
|
|
1105
|
+
commandCapacity: number,
|
|
1106
|
+
telemetryCapacity: number,
|
|
1107
|
+
maxChannels: number,
|
|
1108
|
+
) => void;
|
|
1006
1109
|
prepareChannels: (numChannels: number, maxFrames: number) => void;
|
|
1007
1110
|
getChannelBuffer: (channel: number, numFrames: number) => Float32Array;
|
|
1008
1111
|
processPrepared: (numFrames: number) => void;
|
|
@@ -1011,19 +1114,40 @@ export interface WasmRealtimeEngine {
|
|
|
1011
1114
|
bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
|
|
1012
1115
|
freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
|
|
1013
1116
|
drainTelemetry: (maxRecords: number) => WasmEngineTelemetry[];
|
|
1117
|
+
popTelemetryToScratch: () => boolean;
|
|
1118
|
+
telemetryScratchType: () => number;
|
|
1119
|
+
telemetryScratchError: () => number;
|
|
1120
|
+
telemetryScratchRenderFrame: () => number;
|
|
1121
|
+
telemetryScratchTimelineSample: () => number;
|
|
1122
|
+
telemetryScratchAudibleTimelineSample: () => number;
|
|
1123
|
+
telemetryScratchGraphLatencySamplesQ8: () => number;
|
|
1124
|
+
telemetryScratchValue: () => number;
|
|
1125
|
+
popMeterTelemetryToScratch: () => boolean;
|
|
1126
|
+
meterScratchTargetId: () => number;
|
|
1127
|
+
meterScratchRenderFrame: () => number;
|
|
1128
|
+
meterScratchValue: (field: number) => number;
|
|
1014
1129
|
drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
|
|
1015
1130
|
drainMeterTelemetryWide: (maxRecords: number) => WasmEngineMeterTelemetryWide[];
|
|
1016
1131
|
configureScopeTelemetry: (intervalFrames: number, bandCount: number) => number;
|
|
1017
1132
|
drainScopeTelemetry: (maxRecords: number) => WasmEngineScopeTelemetry[];
|
|
1133
|
+
popScopeTelemetryToScratch: () => boolean;
|
|
1134
|
+
scopeScratchTargetId: () => number;
|
|
1135
|
+
scopeScratchRenderFrame: () => number;
|
|
1136
|
+
scopeScratchBandCount: () => number;
|
|
1137
|
+
scopeScratchBand: (index: number) => number;
|
|
1138
|
+
scopeScratchPointCount: () => number;
|
|
1139
|
+
scopeScratchPointLeft: (index: number) => number;
|
|
1140
|
+
scopeScratchPointRight: (index: number) => number;
|
|
1018
1141
|
delete: () => void;
|
|
1019
1142
|
}
|
|
1020
1143
|
|
|
1021
|
-
export type ProgressCallback
|
|
1144
|
+
export type { ProgressCallback } from './public_types';
|
|
1022
1145
|
export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
|
|
1023
1146
|
|
|
1024
1147
|
export interface WasmSynthEnumTables {
|
|
1025
1148
|
engineModes: string[];
|
|
1026
1149
|
waveforms: string[];
|
|
1150
|
+
builtinWaveforms: string[];
|
|
1027
1151
|
filterModels: string[];
|
|
1028
1152
|
filterOutputs: string[];
|
|
1029
1153
|
bodyTypes: string[];
|
|
@@ -1061,7 +1185,7 @@ export interface SonareModule {
|
|
|
1061
1185
|
profileType: number,
|
|
1062
1186
|
genreHint: string,
|
|
1063
1187
|
) => WasmKeyCandidateResult[];
|
|
1064
|
-
detectOnsets: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1188
|
+
detectOnsets: (samples: Float32Array, sampleRate: number, options: object) => Float32Array;
|
|
1065
1189
|
detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1066
1190
|
detectDownbeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1067
1191
|
detectChords: (
|
|
@@ -1100,7 +1224,7 @@ export interface SonareModule {
|
|
|
1100
1224
|
detectInversions: boolean,
|
|
1101
1225
|
chromaMethod: number,
|
|
1102
1226
|
) => string[];
|
|
1103
|
-
analyze: (samples: Float32Array, sampleRate: number) => WasmAnalysisResult;
|
|
1227
|
+
analyze: (samples: Float32Array, sampleRate: number, options: object) => WasmAnalysisResult;
|
|
1104
1228
|
_synthEnumTables: () => WasmSynthEnumTables;
|
|
1105
1229
|
_synthPatchRoundTrip: (patch: unknown) => unknown;
|
|
1106
1230
|
_analysisResultSchemaPaths: () => string[];
|
|
@@ -1135,6 +1259,7 @@ export interface SonareModule {
|
|
|
1135
1259
|
samples: Float32Array,
|
|
1136
1260
|
sampleRate: number,
|
|
1137
1261
|
progressCallback: ProgressCallback | null,
|
|
1262
|
+
cancelCallback: (() => boolean) | null,
|
|
1138
1263
|
) => WasmAnalysisResult;
|
|
1139
1264
|
analyzeBpm: (
|
|
1140
1265
|
samples: Float32Array,
|
|
@@ -1174,14 +1299,23 @@ export interface SonareModule {
|
|
|
1174
1299
|
detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
|
|
1175
1300
|
hasFfmpegSupport: () => boolean;
|
|
1176
1301
|
version: () => string;
|
|
1302
|
+
capabilities: () => SonareCapabilities;
|
|
1303
|
+
capabilityCatalog: () => string;
|
|
1177
1304
|
abiVersion: () => number;
|
|
1178
1305
|
engineAbiVersion: () => number;
|
|
1179
1306
|
voiceChangerAbiVersion: () => number;
|
|
1180
|
-
voiceCharacterPresetId: (preset: number) => string
|
|
1181
|
-
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig
|
|
1307
|
+
voiceCharacterPresetId: (preset: number) => string;
|
|
1308
|
+
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig;
|
|
1182
1309
|
|
|
1183
1310
|
meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
|
|
1184
1311
|
meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
|
|
1312
|
+
meteringSilenceRatio: (
|
|
1313
|
+
samples: Float32Array,
|
|
1314
|
+
sampleRate: number,
|
|
1315
|
+
thresholdDb: number,
|
|
1316
|
+
frameLength: number,
|
|
1317
|
+
hopLength: number,
|
|
1318
|
+
) => number;
|
|
1185
1319
|
meteringCrestFactorDb: (samples: Float32Array, sampleRate: number) => number;
|
|
1186
1320
|
meteringDcOffset: (samples: Float32Array, sampleRate: number) => number;
|
|
1187
1321
|
meteringTruePeakDb: (
|
|
@@ -1576,6 +1710,7 @@ export interface SonareModule {
|
|
|
1576
1710
|
sampleRate: number,
|
|
1577
1711
|
config: Record<string, unknown>,
|
|
1578
1712
|
progressCallback: ProgressCallback | null,
|
|
1713
|
+
cancelCallback: (() => boolean) | null,
|
|
1579
1714
|
) => WasmMasteringChainResult;
|
|
1580
1715
|
masteringChainStereoWithProgress: (
|
|
1581
1716
|
left: Float32Array,
|
|
@@ -1583,6 +1718,7 @@ export interface SonareModule {
|
|
|
1583
1718
|
sampleRate: number,
|
|
1584
1719
|
config: Record<string, unknown>,
|
|
1585
1720
|
progressCallback: ProgressCallback | null,
|
|
1721
|
+
cancelCallback: (() => boolean) | null,
|
|
1586
1722
|
) => WasmMasteringStereoChainResult;
|
|
1587
1723
|
masteringPresetNames: () => string[];
|
|
1588
1724
|
masterAudio: (
|
|
@@ -1604,6 +1740,7 @@ export interface SonareModule {
|
|
|
1604
1740
|
sampleRate: number,
|
|
1605
1741
|
overrides: Record<string, number | boolean> | null,
|
|
1606
1742
|
progressCallback: ProgressCallback | null,
|
|
1743
|
+
cancelCallback: (() => boolean) | null,
|
|
1607
1744
|
) => WasmMasteringChainResult;
|
|
1608
1745
|
masterAudioStereoWithProgress: (
|
|
1609
1746
|
presetName: string,
|
|
@@ -1612,6 +1749,7 @@ export interface SonareModule {
|
|
|
1612
1749
|
sampleRate: number,
|
|
1613
1750
|
overrides: Record<string, number | boolean> | null,
|
|
1614
1751
|
progressCallback: ProgressCallback | null,
|
|
1752
|
+
cancelCallback: (() => boolean) | null,
|
|
1615
1753
|
) => WasmMasteringStereoChainResult;
|
|
1616
1754
|
mixingScenePresetNames: () => string[];
|
|
1617
1755
|
mixingScenePresetJson: (presetName: string) => string;
|
|
@@ -1666,6 +1804,79 @@ export interface SonareModule {
|
|
|
1666
1804
|
htk: boolean,
|
|
1667
1805
|
lifter: number,
|
|
1668
1806
|
) => WasmMfccResult;
|
|
1807
|
+
melDelta: (
|
|
1808
|
+
features: Float32Array,
|
|
1809
|
+
nFeatures: number,
|
|
1810
|
+
nFrames: number,
|
|
1811
|
+
width: number,
|
|
1812
|
+
) => Float32Array;
|
|
1813
|
+
reassignedSpectrogram: (
|
|
1814
|
+
samples: Float32Array,
|
|
1815
|
+
sampleRate: number,
|
|
1816
|
+
nFft: number,
|
|
1817
|
+
hopLength: number,
|
|
1818
|
+
refPower: number,
|
|
1819
|
+
fillNan: boolean,
|
|
1820
|
+
) => {
|
|
1821
|
+
nBins: number;
|
|
1822
|
+
nFrames: number;
|
|
1823
|
+
magnitude: Float32Array;
|
|
1824
|
+
times: Float32Array;
|
|
1825
|
+
frequencies: Float32Array;
|
|
1826
|
+
};
|
|
1827
|
+
segmentCrossSimilarity: (
|
|
1828
|
+
x: Float32Array,
|
|
1829
|
+
xRows: number,
|
|
1830
|
+
xCols: number,
|
|
1831
|
+
y: Float32Array,
|
|
1832
|
+
yRows: number,
|
|
1833
|
+
yCols: number,
|
|
1834
|
+
k: number,
|
|
1835
|
+
metric: string,
|
|
1836
|
+
mode: string,
|
|
1837
|
+
) => WasmSegmentMatrixResult;
|
|
1838
|
+
segmentRecurrenceMatrix: (
|
|
1839
|
+
data: Float32Array,
|
|
1840
|
+
rows: number,
|
|
1841
|
+
cols: number,
|
|
1842
|
+
k: number,
|
|
1843
|
+
width: number,
|
|
1844
|
+
sym: boolean,
|
|
1845
|
+
metric: string,
|
|
1846
|
+
mode: string,
|
|
1847
|
+
) => WasmSegmentMatrixResult;
|
|
1848
|
+
segmentRecurrenceToLag: (
|
|
1849
|
+
recurrence: Float32Array,
|
|
1850
|
+
n: number,
|
|
1851
|
+
pad: boolean,
|
|
1852
|
+
) => WasmSegmentMatrixResult;
|
|
1853
|
+
segmentLagToRecurrence: (
|
|
1854
|
+
lag: Float32Array,
|
|
1855
|
+
rows: number,
|
|
1856
|
+
lags: number,
|
|
1857
|
+
) => WasmSegmentMatrixResult;
|
|
1858
|
+
segmentSubsegment: (
|
|
1859
|
+
data: Float32Array,
|
|
1860
|
+
rows: number,
|
|
1861
|
+
cols: number,
|
|
1862
|
+
boundaries: Int32Array,
|
|
1863
|
+
nSegments: number,
|
|
1864
|
+
) => Int32Array;
|
|
1865
|
+
segmentAgglomerative: (
|
|
1866
|
+
data: Float32Array,
|
|
1867
|
+
rows: number,
|
|
1868
|
+
cols: number,
|
|
1869
|
+
k: number,
|
|
1870
|
+
linkage: string,
|
|
1871
|
+
) => Int32Array;
|
|
1872
|
+
segmentPathEnhance: (
|
|
1873
|
+
recurrence: Float32Array,
|
|
1874
|
+
n: number,
|
|
1875
|
+
win: number,
|
|
1876
|
+
maxRatio: number,
|
|
1877
|
+
minRatio: number,
|
|
1878
|
+
nFilters: number,
|
|
1879
|
+
) => WasmSegmentMatrixResult;
|
|
1669
1880
|
|
|
1670
1881
|
// Features - Inverse reconstruction
|
|
1671
1882
|
melToStft: (
|
|
@@ -1690,11 +1901,22 @@ export interface SonareModule {
|
|
|
1690
1901
|
nIter: number,
|
|
1691
1902
|
htk: boolean,
|
|
1692
1903
|
) => Float32Array;
|
|
1904
|
+
griffinLim: (
|
|
1905
|
+
magnitude: Float32Array,
|
|
1906
|
+
nBins: number,
|
|
1907
|
+
nFrames: number,
|
|
1908
|
+
sampleRate: number,
|
|
1909
|
+
nFft: number,
|
|
1910
|
+
hopLength: number,
|
|
1911
|
+
nIter: number,
|
|
1912
|
+
momentum: number,
|
|
1913
|
+
) => Float32Array;
|
|
1693
1914
|
mfccToMel: (
|
|
1694
1915
|
mfcc: Float32Array,
|
|
1695
1916
|
nMfcc: number,
|
|
1696
1917
|
nFrames: number,
|
|
1697
1918
|
nMels: number,
|
|
1919
|
+
lifter: number,
|
|
1698
1920
|
) => WasmMelPowerResult;
|
|
1699
1921
|
mfccToAudio: (
|
|
1700
1922
|
mfcc: Float32Array,
|
|
@@ -1708,6 +1930,7 @@ export interface SonareModule {
|
|
|
1708
1930
|
fmax: number,
|
|
1709
1931
|
nIter: number,
|
|
1710
1932
|
htk: boolean,
|
|
1933
|
+
lifter: number,
|
|
1711
1934
|
) => Float32Array;
|
|
1712
1935
|
|
|
1713
1936
|
// Features - Chroma
|
|
@@ -1730,6 +1953,7 @@ export interface SonareModule {
|
|
|
1730
1953
|
sampleRate: number,
|
|
1731
1954
|
nFft: number,
|
|
1732
1955
|
hopLength: number,
|
|
1956
|
+
p: number,
|
|
1733
1957
|
) => Float32Array;
|
|
1734
1958
|
spectralRolloff: (
|
|
1735
1959
|
samples: Float32Array,
|
|
@@ -1744,6 +1968,13 @@ export interface SonareModule {
|
|
|
1744
1968
|
nFft: number,
|
|
1745
1969
|
hopLength: number,
|
|
1746
1970
|
) => Float32Array;
|
|
1971
|
+
spectralFlux: (
|
|
1972
|
+
samples: Float32Array,
|
|
1973
|
+
sampleRate: number,
|
|
1974
|
+
nFft: number,
|
|
1975
|
+
hopLength: number,
|
|
1976
|
+
lag: number,
|
|
1977
|
+
) => Float32Array;
|
|
1747
1978
|
zeroCrossingRate: (
|
|
1748
1979
|
samples: Float32Array,
|
|
1749
1980
|
sampleRate: number,
|
|
@@ -1810,6 +2041,30 @@ export interface SonareModule {
|
|
|
1810
2041
|
threshold: number,
|
|
1811
2042
|
fillNa: boolean,
|
|
1812
2043
|
) => WasmPitchResult;
|
|
2044
|
+
piptrack: (
|
|
2045
|
+
samples: Float32Array,
|
|
2046
|
+
sampleRate: number,
|
|
2047
|
+
nFft: number,
|
|
2048
|
+
hopLength: number,
|
|
2049
|
+
fmin: number,
|
|
2050
|
+
fmax: number,
|
|
2051
|
+
threshold: number,
|
|
2052
|
+
) => {
|
|
2053
|
+
nBins: number;
|
|
2054
|
+
nFrames: number;
|
|
2055
|
+
pitches: Float32Array;
|
|
2056
|
+
magnitudes: Float32Array;
|
|
2057
|
+
};
|
|
2058
|
+
noteSegments: (
|
|
2059
|
+
f0Hz: Float32Array,
|
|
2060
|
+
voicedProb: Float32Array,
|
|
2061
|
+
frameRate: number,
|
|
2062
|
+
options: {
|
|
2063
|
+
segmentationThresholdCents?: number;
|
|
2064
|
+
minNoteMs?: number;
|
|
2065
|
+
referenceHz?: number;
|
|
2066
|
+
},
|
|
2067
|
+
) => WasmNoteSegment[];
|
|
1813
2068
|
|
|
1814
2069
|
// Core - Conversion
|
|
1815
2070
|
hzToMel: (hz: number) => number;
|
|
@@ -1841,9 +2096,31 @@ export interface SonareModule {
|
|
|
1841
2096
|
hopLength: number,
|
|
1842
2097
|
) => Int32Array;
|
|
1843
2098
|
frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
|
|
2099
|
+
tone: (
|
|
2100
|
+
frequency: number,
|
|
2101
|
+
sampleRate: number,
|
|
2102
|
+
duration: number,
|
|
2103
|
+
phase: number,
|
|
2104
|
+
amplitude: number,
|
|
2105
|
+
) => Float32Array;
|
|
2106
|
+
chirp: (
|
|
2107
|
+
fmin: number,
|
|
2108
|
+
fmax: number,
|
|
2109
|
+
sampleRate: number,
|
|
2110
|
+
duration: number,
|
|
2111
|
+
linear: boolean,
|
|
2112
|
+
) => Float32Array;
|
|
2113
|
+
clicks: (
|
|
2114
|
+
times: Float32Array,
|
|
2115
|
+
sampleRate: number,
|
|
2116
|
+
length: number,
|
|
2117
|
+
frequency: number,
|
|
2118
|
+
clickDuration: number,
|
|
2119
|
+
) => Float32Array;
|
|
1844
2120
|
padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1845
2121
|
fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1846
2122
|
fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
|
|
2123
|
+
onsetBacktrack: (events: Int32Array, energy: Float32Array) => Int32Array;
|
|
1847
2124
|
peakPick: (
|
|
1848
2125
|
values: Float32Array,
|
|
1849
2126
|
preMax: number,
|
|
@@ -1867,6 +2144,8 @@ export interface SonareModule {
|
|
|
1867
2144
|
hopLength: number,
|
|
1868
2145
|
winLength: number,
|
|
1869
2146
|
mode: TempogramMode,
|
|
2147
|
+
center: boolean,
|
|
2148
|
+
norm: boolean,
|
|
1870
2149
|
) => WasmTempogramResult;
|
|
1871
2150
|
cyclicTempogram: (
|
|
1872
2151
|
onsetEnvelope: Float32Array,
|
|
@@ -1889,12 +2168,14 @@ export interface SonareModule {
|
|
|
1889
2168
|
sampleRate: number,
|
|
1890
2169
|
hopLength: number,
|
|
1891
2170
|
nChroma: number,
|
|
2171
|
+
binsPerOctave: number,
|
|
1892
2172
|
) => WasmChromaResult;
|
|
1893
2173
|
chromaCqt: (
|
|
1894
2174
|
samples: Float32Array,
|
|
1895
2175
|
sampleRate: number,
|
|
1896
2176
|
hopLength: number,
|
|
1897
2177
|
nChroma: number,
|
|
2178
|
+
binsPerOctave: number,
|
|
1898
2179
|
) => WasmChromaResult;
|
|
1899
2180
|
bassChroma: (
|
|
1900
2181
|
samples: Float32Array,
|
|
@@ -1902,7 +2183,13 @@ export interface SonareModule {
|
|
|
1902
2183
|
hopLength: number,
|
|
1903
2184
|
nChroma: number,
|
|
1904
2185
|
) => WasmChromaResult;
|
|
1905
|
-
nnlsChroma: (
|
|
2186
|
+
nnlsChroma: (
|
|
2187
|
+
samples: Float32Array,
|
|
2188
|
+
sampleRate: number,
|
|
2189
|
+
enableStftBlend: boolean,
|
|
2190
|
+
stftBlendWeight: number,
|
|
2191
|
+
stftBlendNFft: number,
|
|
2192
|
+
) => WasmNnlsChromaResult;
|
|
1906
2193
|
cqt: (
|
|
1907
2194
|
samples: Float32Array,
|
|
1908
2195
|
sampleRate: number,
|
|
@@ -1995,6 +2282,8 @@ export interface SonareModule {
|
|
|
1995
2282
|
sampleRate: number,
|
|
1996
2283
|
hopLength: number,
|
|
1997
2284
|
winLength: number,
|
|
2285
|
+
center: boolean,
|
|
2286
|
+
norm: boolean,
|
|
1998
2287
|
) => WasmFourierTempogramResult;
|
|
1999
2288
|
tempogramRatio: (
|
|
2000
2289
|
tempogramData: Float32Array,
|
|
@@ -2091,6 +2380,7 @@ export interface SonareModule {
|
|
|
2091
2380
|
maxBlockSize: number,
|
|
2092
2381
|
commandCapacity: number,
|
|
2093
2382
|
telemetryCapacity: number,
|
|
2383
|
+
maxChannels?: number,
|
|
2094
2384
|
) => WasmRealtimeEngine;
|
|
2095
2385
|
|
|
2096
2386
|
// Streaming - StreamingMasteringChain
|
|
@@ -2128,6 +2418,8 @@ export interface WasmStreamingMasteringChain {
|
|
|
2128
2418
|
left: Float32Array,
|
|
2129
2419
|
right: Float32Array,
|
|
2130
2420
|
) => { left: Float32Array; right: Float32Array };
|
|
2421
|
+
flushMono: () => Float32Array;
|
|
2422
|
+
flushStereo: () => { left: Float32Array; right: Float32Array };
|
|
2131
2423
|
reset: () => void;
|
|
2132
2424
|
latencySamples: () => number;
|
|
2133
2425
|
stageNames: () => string[];
|
|
@@ -2182,8 +2474,10 @@ export interface WasmRealtimeVoiceChanger {
|
|
|
2182
2474
|
prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
|
|
2183
2475
|
reset: () => void;
|
|
2184
2476
|
setConfig: (config: Record<string, unknown> | string) => void;
|
|
2477
|
+
setPodConfig: (config: WasmRealtimeVoiceChangerPodConfig) => void;
|
|
2185
2478
|
configJson: () => string;
|
|
2186
2479
|
latencySamples: () => number;
|
|
2480
|
+
bufferGeneration: () => number;
|
|
2187
2481
|
processMono: (samples: Float32Array) => Float32Array;
|
|
2188
2482
|
processMonoInto: (samples: Float32Array, output: Float32Array) => void;
|
|
2189
2483
|
processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
|
|
@@ -2255,6 +2549,7 @@ export interface WasmMixer {
|
|
|
2255
2549
|
removeSend: (stripIndex: number, sendIndex: number) => void;
|
|
2256
2550
|
meterTap: (stripIndex: number, tap: number) => WasmMixMeterSnapshot;
|
|
2257
2551
|
stripMeter: (stripIndex: number) => WasmMixMeterSnapshot;
|
|
2552
|
+
busMeter: (busId: string) => WasmMixMeterSnapshot;
|
|
2258
2553
|
scheduleFaderAutomation: (
|
|
2259
2554
|
stripIndex: number,
|
|
2260
2555
|
samplePos: number,
|
|
@@ -2286,6 +2581,7 @@ export interface WasmMixer {
|
|
|
2286
2581
|
busCount: () => number;
|
|
2287
2582
|
addVcaGroup: (id: string, gainDb: number, members: string[]) => void;
|
|
2288
2583
|
setVcaGroupGainDb: (id: string, gainDb: number) => void;
|
|
2584
|
+
setVcaGroupMembers: (id: string, members: string[]) => void;
|
|
2289
2585
|
removeVcaGroup: (id: string) => void;
|
|
2290
2586
|
vcaGroupCount: () => number;
|
|
2291
2587
|
toSceneJson: () => string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { flattenChainConfig } from './_chain_config';
|
|
1
2
|
import { getSonareModule } from './module_state';
|
|
2
3
|
import type {
|
|
3
4
|
EqBand,
|
|
@@ -64,7 +65,12 @@ export class StreamingMasteringChain {
|
|
|
64
65
|
|
|
65
66
|
constructor(config: StreamingMasteringChainConfig) {
|
|
66
67
|
const module = getSonareModule();
|
|
67
|
-
|
|
68
|
+
const { loudnessStaticGainDb, loudnessStaticGainPeakDb, ...chainConfig } = config;
|
|
69
|
+
this.chain = module.createStreamingMasteringChain({
|
|
70
|
+
__flatParams: flattenChainConfig(chainConfig),
|
|
71
|
+
loudnessStaticGainDb,
|
|
72
|
+
loudnessStaticGainPeakDb,
|
|
73
|
+
});
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
/**
|
|
@@ -98,6 +104,21 @@ export class StreamingMasteringChain {
|
|
|
98
104
|
return this.chain.processStereo(left, right);
|
|
99
105
|
}
|
|
100
106
|
|
|
107
|
+
/**
|
|
108
|
+
* Emit delayed audio and finite processor tails after the final mono block.
|
|
109
|
+
* Call until this returns an empty array. The initial `latencySamples()`
|
|
110
|
+
* samples of the concatenated stream are delayed and should be discarded for
|
|
111
|
+
* time-aligned output.
|
|
112
|
+
*/
|
|
113
|
+
flushMono(): Float32Array {
|
|
114
|
+
return this.chain.flushMono();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/** Stereo counterpart of {@link flushMono}. */
|
|
118
|
+
flushStereo(): { left: Float32Array; right: Float32Array } {
|
|
119
|
+
return this.chain.flushStereo();
|
|
120
|
+
}
|
|
121
|
+
|
|
101
122
|
/** Reset all processor state without rebuilding. */
|
|
102
123
|
reset(): void {
|
|
103
124
|
this.chain.reset();
|
package/src/validation.ts
CHANGED
|
@@ -78,6 +78,12 @@ export function assertSampleRate(fnName: string, sampleRate: number): void {
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
/** Validate and retain the public Audio.fromBuffer construction contract. */
|
|
82
|
+
export function validateAudioBuffer(samples: Float32Array, sampleRate: number): void {
|
|
83
|
+
assertSamples('Audio.fromBuffer', samples, true);
|
|
84
|
+
assertSampleRate('Audio.fromBuffer', sampleRate);
|
|
85
|
+
}
|
|
86
|
+
|
|
81
87
|
export function assertNonNegativeInteger(fnName: string, value: number, argName: string): void {
|
|
82
88
|
if (!Number.isInteger(value) || value < 0) {
|
|
83
89
|
throw new RangeError(`${fnName}: ${argName} must be a non-negative integer`);
|