@libraz/libsonare 1.5.5 → 1.7.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 +5809 -0
- package/dist/analysis.js +2574 -0
- package/dist/analysis.js.map +1 -0
- package/dist/index.d.ts +884 -55
- package/dist/index.js +1302 -292
- 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 +734 -0
- package/dist/worker.js.map +1 -0
- package/dist/worklet.d.ts +628 -88
- package/dist/worklet.js +1816 -266
- package/dist/worklet.js.map +1 -1
- package/package.json +23 -11
- package/src/_chain_config.ts +5 -3
- package/src/analysis.ts +137 -0
- package/src/analysis_helpers.ts +40 -29
- package/src/audio.ts +7 -2
- package/src/clip_page_streamer.ts +62 -8
- package/src/codes.ts +87 -64
- package/src/effects_mastering.ts +1 -0
- package/src/effects_transform.ts +179 -10
- package/src/errors.ts +1 -0
- package/src/feature_core.ts +140 -2
- package/src/feature_music.ts +25 -3
- package/src/feature_pitch.ts +70 -1
- package/src/feature_spectral.ts +295 -7
- package/src/feature_spectrogram.ts +203 -3
- package/src/features.ts +16 -1
- package/src/index.ts +120 -8
- package/src/mastering_chain.ts +20 -8
- package/src/mastering_core.ts +5 -0
- package/src/mastering_dynamics.ts +7 -1
- package/src/metering.ts +6 -1
- package/src/mixer.ts +3 -3
- package/src/opfs_clip_pages.ts +26 -1
- package/src/project.ts +13 -0
- package/src/project_class.ts +204 -23
- package/src/project_internal.ts +38 -34
- package/src/project_types.ts +114 -11
- package/src/public_types.ts +68 -0
- package/src/public_types_mastering.ts +22 -0
- package/src/public_types_mixing.ts +27 -2
- package/src/public_types_music.ts +9 -0
- package/src/public_types_realtime.ts +23 -5
- package/src/public_types_spectral.ts +33 -0
- package/src/quick_analysis.ts +46 -10
- package/src/realtime_engine.ts +167 -6
- package/src/realtime_voice_changer.ts +51 -77
- package/src/sonare-analysis.js.d.ts +8 -0
- package/src/sonare.js.d.ts +340 -6
- package/src/stream_analyzer.ts +6 -1
- package/src/streaming_processors.ts +15 -0
- package/src/web_midi.ts +46 -11
- 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 +264 -21
- package/src/worklet/engine-offline.ts +7 -2
- package/src/worklet/engine-parameter-facade.ts +55 -5
- package/src/worklet/engine-processor.ts +435 -62
- package/src/worklet/engine-register.ts +9 -1
- package/src/worklet/engine-strips.ts +19 -3
- package/src/worklet/engine-sync.ts +2 -6
- package/src/worklet/engine-tempo-facade.ts +8 -6
- package/src/worklet/engine.ts +390 -13
- package/src/worklet/guards.ts +121 -8
- package/src/worklet/messages.ts +166 -8
- package/src/worklet/protocol.ts +305 -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;
|
|
@@ -478,12 +505,30 @@ export interface WasmStageGainReduction {
|
|
|
478
505
|
gainReductionDb: number;
|
|
479
506
|
}
|
|
480
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
|
+
|
|
481
525
|
export interface WasmMasteringChainResult extends WasmMasteringResult {
|
|
482
526
|
stages: string[];
|
|
483
527
|
outputTruePeakDbtp: number;
|
|
484
528
|
outputLra: number;
|
|
485
529
|
loudnessTargetLimited: boolean;
|
|
486
530
|
stageGainReductions: WasmStageGainReduction[];
|
|
531
|
+
report: WasmMasteringReport;
|
|
487
532
|
}
|
|
488
533
|
|
|
489
534
|
export interface WasmMasteringStereoChainResult {
|
|
@@ -498,6 +543,7 @@ export interface WasmMasteringStereoChainResult {
|
|
|
498
543
|
outputLra: number;
|
|
499
544
|
loudnessTargetLimited: boolean;
|
|
500
545
|
stageGainReductions: WasmStageGainReduction[];
|
|
546
|
+
report: WasmMasteringReport;
|
|
501
547
|
}
|
|
502
548
|
|
|
503
549
|
export interface WasmMasteringStereoResult {
|
|
@@ -624,6 +670,40 @@ export interface WasmProjectMarker {
|
|
|
624
670
|
keyFifths?: number;
|
|
625
671
|
keyMinor?: boolean;
|
|
626
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
|
+
/** Owning content hash for audio sources; empty for MIDI sources. */
|
|
703
|
+
contentHash: string;
|
|
704
|
+
/** External source-separation role for audio sources; empty for MIDI sources. */
|
|
705
|
+
externalStemRole: string;
|
|
706
|
+
}
|
|
627
707
|
|
|
628
708
|
export interface WasmEngineMetronomeConfig {
|
|
629
709
|
enabled: boolean;
|
|
@@ -838,11 +918,13 @@ export interface WasmRealtimeEngine {
|
|
|
838
918
|
setParameterSmoothed: (paramId: number, value: number, renderFrame: number) => void;
|
|
839
919
|
setParamSmoothingMs: (smoothingMs: number) => void;
|
|
840
920
|
setSoloMute: (laneIndex: number, solo: boolean, mute: boolean, renderFrame: number) => void;
|
|
921
|
+
setTrackMonitorMode: (laneIndex: number, mode: number, renderFrame: number) => void;
|
|
841
922
|
getTransportState: () => WasmEngineTransportState;
|
|
842
923
|
play: (renderFrame: number) => void;
|
|
843
924
|
stop: (renderFrame: number) => void;
|
|
844
925
|
seekSample: (timelineSample: number, renderFrame: number) => void;
|
|
845
926
|
settleParameters: () => void;
|
|
927
|
+
flushControlCommands: () => void;
|
|
846
928
|
seekPpq: (ppq: number, renderFrame: number) => void;
|
|
847
929
|
setTempo: (bpm: number) => void;
|
|
848
930
|
setTempoSegments: (segments: WasmEngineTempoSegment[]) => void;
|
|
@@ -926,10 +1008,14 @@ export interface WasmRealtimeEngine {
|
|
|
926
1008
|
clearClipPage: (providerId: number, pageIndex: number) => void;
|
|
927
1009
|
destroyClipPageProvider: (providerId: number) => void;
|
|
928
1010
|
popClipPageRequest: () => WasmClipPageRequest | null;
|
|
1011
|
+
popClipPageRequestToScratch: () => boolean;
|
|
1012
|
+
clipPageRequestScratchClipId: () => number;
|
|
1013
|
+
clipPageRequestScratchSample: () => number;
|
|
1014
|
+
clipPageRequestOverflowCount: () => number;
|
|
929
1015
|
setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
|
|
930
1016
|
armCapture: (armed: boolean) => void;
|
|
931
1017
|
setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
|
|
932
|
-
setCaptureSource: (source: WasmEngineCaptureStatus['source']) => void;
|
|
1018
|
+
setCaptureSource: (source: WasmEngineCaptureStatus['source'] | number) => void;
|
|
933
1019
|
setRecordOffsetSamples: (offsetSamples: number) => void;
|
|
934
1020
|
setInputMonitor: (enabled: boolean, gain: number) => void;
|
|
935
1021
|
resetCapture: () => void;
|
|
@@ -1002,14 +1088,29 @@ export interface WasmRealtimeEngine {
|
|
|
1002
1088
|
value: number,
|
|
1003
1089
|
renderFrame: number,
|
|
1004
1090
|
) => void;
|
|
1091
|
+
pushMidiUmp: (destinationId: number, word0: number, renderFrame: number) => void;
|
|
1005
1092
|
pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame: number) => void;
|
|
1006
1093
|
pushMidiPanic: (renderFrame: number) => void;
|
|
1007
1094
|
setMidiDestinationExternal: (destinationId: number, external: boolean) => void;
|
|
1008
1095
|
setExternalMidiClockEnabled: (enabled: boolean) => void;
|
|
1009
1096
|
externalMidiDroppedCount: () => number;
|
|
1097
|
+
externalMidiPendingCount: () => number;
|
|
1010
1098
|
drainExternalMidi: (maxRecords: number) => WasmExternalMidiEvent[];
|
|
1099
|
+
popExternalMidiToScratch: () => boolean;
|
|
1100
|
+
externalMidiScratchDestinationId: () => number;
|
|
1101
|
+
externalMidiScratchRenderFrame: () => number;
|
|
1102
|
+
externalMidiScratchByteWord: () => number;
|
|
1103
|
+
externalMidiScratchByteCount: () => number;
|
|
1104
|
+
consumeExternalMidiScratch: () => void;
|
|
1011
1105
|
clearParameters: () => void;
|
|
1012
1106
|
process: (channels: Float32Array[]) => Float32Array[];
|
|
1107
|
+
prepareWithChannels: (
|
|
1108
|
+
sampleRate: number,
|
|
1109
|
+
maxBlockSize: number,
|
|
1110
|
+
commandCapacity: number,
|
|
1111
|
+
telemetryCapacity: number,
|
|
1112
|
+
maxChannels: number,
|
|
1113
|
+
) => void;
|
|
1013
1114
|
prepareChannels: (numChannels: number, maxFrames: number) => void;
|
|
1014
1115
|
getChannelBuffer: (channel: number, numFrames: number) => Float32Array;
|
|
1015
1116
|
processPrepared: (numFrames: number) => void;
|
|
@@ -1018,19 +1119,40 @@ export interface WasmRealtimeEngine {
|
|
|
1018
1119
|
bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
|
|
1019
1120
|
freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
|
|
1020
1121
|
drainTelemetry: (maxRecords: number) => WasmEngineTelemetry[];
|
|
1122
|
+
popTelemetryToScratch: () => boolean;
|
|
1123
|
+
telemetryScratchType: () => number;
|
|
1124
|
+
telemetryScratchError: () => number;
|
|
1125
|
+
telemetryScratchRenderFrame: () => number;
|
|
1126
|
+
telemetryScratchTimelineSample: () => number;
|
|
1127
|
+
telemetryScratchAudibleTimelineSample: () => number;
|
|
1128
|
+
telemetryScratchGraphLatencySamplesQ8: () => number;
|
|
1129
|
+
telemetryScratchValue: () => number;
|
|
1130
|
+
popMeterTelemetryToScratch: () => boolean;
|
|
1131
|
+
meterScratchTargetId: () => number;
|
|
1132
|
+
meterScratchRenderFrame: () => number;
|
|
1133
|
+
meterScratchValue: (field: number) => number;
|
|
1021
1134
|
drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
|
|
1022
1135
|
drainMeterTelemetryWide: (maxRecords: number) => WasmEngineMeterTelemetryWide[];
|
|
1023
1136
|
configureScopeTelemetry: (intervalFrames: number, bandCount: number) => number;
|
|
1024
1137
|
drainScopeTelemetry: (maxRecords: number) => WasmEngineScopeTelemetry[];
|
|
1138
|
+
popScopeTelemetryToScratch: () => boolean;
|
|
1139
|
+
scopeScratchTargetId: () => number;
|
|
1140
|
+
scopeScratchRenderFrame: () => number;
|
|
1141
|
+
scopeScratchBandCount: () => number;
|
|
1142
|
+
scopeScratchBand: (index: number) => number;
|
|
1143
|
+
scopeScratchPointCount: () => number;
|
|
1144
|
+
scopeScratchPointLeft: (index: number) => number;
|
|
1145
|
+
scopeScratchPointRight: (index: number) => number;
|
|
1025
1146
|
delete: () => void;
|
|
1026
1147
|
}
|
|
1027
1148
|
|
|
1028
|
-
export type ProgressCallback
|
|
1149
|
+
export type { ProgressCallback } from './public_types';
|
|
1029
1150
|
export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
|
|
1030
1151
|
|
|
1031
1152
|
export interface WasmSynthEnumTables {
|
|
1032
1153
|
engineModes: string[];
|
|
1033
1154
|
waveforms: string[];
|
|
1155
|
+
builtinWaveforms: string[];
|
|
1034
1156
|
filterModels: string[];
|
|
1035
1157
|
filterOutputs: string[];
|
|
1036
1158
|
bodyTypes: string[];
|
|
@@ -1068,7 +1190,7 @@ export interface SonareModule {
|
|
|
1068
1190
|
profileType: number,
|
|
1069
1191
|
genreHint: string,
|
|
1070
1192
|
) => WasmKeyCandidateResult[];
|
|
1071
|
-
detectOnsets: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1193
|
+
detectOnsets: (samples: Float32Array, sampleRate: number, options: object) => Float32Array;
|
|
1072
1194
|
detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1073
1195
|
detectDownbeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1074
1196
|
detectChords: (
|
|
@@ -1117,6 +1239,12 @@ export interface SonareModule {
|
|
|
1117
1239
|
sampleRate: number,
|
|
1118
1240
|
nOctaveBands: number,
|
|
1119
1241
|
) => WasmAcousticResult;
|
|
1242
|
+
analyzeImpulseResponseEx: (
|
|
1243
|
+
samples: Float32Array,
|
|
1244
|
+
sampleRate: number,
|
|
1245
|
+
nOctaveBands: number,
|
|
1246
|
+
minDecayDb: number,
|
|
1247
|
+
) => WasmAcousticResult;
|
|
1120
1248
|
detectAcoustic: (
|
|
1121
1249
|
samples: Float32Array,
|
|
1122
1250
|
sampleRate: number,
|
|
@@ -1142,6 +1270,7 @@ export interface SonareModule {
|
|
|
1142
1270
|
samples: Float32Array,
|
|
1143
1271
|
sampleRate: number,
|
|
1144
1272
|
progressCallback: ProgressCallback | null,
|
|
1273
|
+
cancelCallback: (() => boolean) | null,
|
|
1145
1274
|
) => WasmAnalysisResult;
|
|
1146
1275
|
analyzeBpm: (
|
|
1147
1276
|
samples: Float32Array,
|
|
@@ -1181,11 +1310,13 @@ export interface SonareModule {
|
|
|
1181
1310
|
detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
|
|
1182
1311
|
hasFfmpegSupport: () => boolean;
|
|
1183
1312
|
version: () => string;
|
|
1313
|
+
capabilities: () => SonareCapabilities;
|
|
1314
|
+
capabilityCatalog: () => string;
|
|
1184
1315
|
abiVersion: () => number;
|
|
1185
1316
|
engineAbiVersion: () => number;
|
|
1186
1317
|
voiceChangerAbiVersion: () => number;
|
|
1187
|
-
voiceCharacterPresetId: (preset: number) => string
|
|
1188
|
-
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig
|
|
1318
|
+
voiceCharacterPresetId: (preset: number) => string;
|
|
1319
|
+
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig;
|
|
1189
1320
|
|
|
1190
1321
|
meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
|
|
1191
1322
|
meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
|
|
@@ -1353,12 +1484,30 @@ export interface SonareModule {
|
|
|
1353
1484
|
kernelHarmonic: number,
|
|
1354
1485
|
kernelPercussive: number,
|
|
1355
1486
|
) => WasmHpssResult;
|
|
1487
|
+
hpssEx: (
|
|
1488
|
+
samples: Float32Array,
|
|
1489
|
+
sampleRate: number,
|
|
1490
|
+
kernelHarmonic: number,
|
|
1491
|
+
kernelPercussive: number,
|
|
1492
|
+
nFft: number,
|
|
1493
|
+
hopLength: number,
|
|
1494
|
+
hardMask: boolean,
|
|
1495
|
+
) => WasmHpssResult;
|
|
1356
1496
|
hpssWithResidual: (
|
|
1357
1497
|
samples: Float32Array,
|
|
1358
1498
|
sampleRate: number,
|
|
1359
1499
|
kernelHarmonic: number,
|
|
1360
1500
|
kernelPercussive: number,
|
|
1361
1501
|
) => WasmHpssWithResidualResult;
|
|
1502
|
+
hpssWithResidualEx: (
|
|
1503
|
+
samples: Float32Array,
|
|
1504
|
+
sampleRate: number,
|
|
1505
|
+
kernelHarmonic: number,
|
|
1506
|
+
kernelPercussive: number,
|
|
1507
|
+
nFft: number,
|
|
1508
|
+
hopLength: number,
|
|
1509
|
+
hardMask: boolean,
|
|
1510
|
+
) => WasmHpssWithResidualResult;
|
|
1362
1511
|
decompose: (
|
|
1363
1512
|
s: Float32Array,
|
|
1364
1513
|
nFeatures: number,
|
|
@@ -1400,7 +1549,21 @@ export interface SonareModule {
|
|
|
1400
1549
|
harmonic: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1401
1550
|
percussive: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1402
1551
|
timeStretch: (samples: Float32Array, sampleRate: number, rate: number) => Float32Array;
|
|
1552
|
+
timeStretchEx: (
|
|
1553
|
+
samples: Float32Array,
|
|
1554
|
+
sampleRate: number,
|
|
1555
|
+
rate: number,
|
|
1556
|
+
nFft: number,
|
|
1557
|
+
hopLength: number,
|
|
1558
|
+
) => Float32Array;
|
|
1403
1559
|
pitchShift: (samples: Float32Array, sampleRate: number, semitones: number) => Float32Array;
|
|
1560
|
+
pitchShiftEx: (
|
|
1561
|
+
samples: Float32Array,
|
|
1562
|
+
sampleRate: number,
|
|
1563
|
+
semitones: number,
|
|
1564
|
+
nFft: number,
|
|
1565
|
+
hopLength: number,
|
|
1566
|
+
) => Float32Array;
|
|
1404
1567
|
pitchCorrectToMidi: (
|
|
1405
1568
|
samples: Float32Array,
|
|
1406
1569
|
sampleRate: number,
|
|
@@ -1462,6 +1625,12 @@ export interface SonareModule {
|
|
|
1462
1625
|
channels: number,
|
|
1463
1626
|
) => Float32Array;
|
|
1464
1627
|
normalize: (samples: Float32Array, sampleRate: number, targetDb: number) => Float32Array;
|
|
1628
|
+
normalizeEx: (
|
|
1629
|
+
samples: Float32Array,
|
|
1630
|
+
sampleRate: number,
|
|
1631
|
+
targetDb: number,
|
|
1632
|
+
mode: string,
|
|
1633
|
+
) => Float32Array;
|
|
1465
1634
|
mastering: (
|
|
1466
1635
|
samples: Float32Array,
|
|
1467
1636
|
sampleRate: number,
|
|
@@ -1590,6 +1759,7 @@ export interface SonareModule {
|
|
|
1590
1759
|
sampleRate: number,
|
|
1591
1760
|
config: Record<string, unknown>,
|
|
1592
1761
|
progressCallback: ProgressCallback | null,
|
|
1762
|
+
cancelCallback: (() => boolean) | null,
|
|
1593
1763
|
) => WasmMasteringChainResult;
|
|
1594
1764
|
masteringChainStereoWithProgress: (
|
|
1595
1765
|
left: Float32Array,
|
|
@@ -1597,6 +1767,7 @@ export interface SonareModule {
|
|
|
1597
1767
|
sampleRate: number,
|
|
1598
1768
|
config: Record<string, unknown>,
|
|
1599
1769
|
progressCallback: ProgressCallback | null,
|
|
1770
|
+
cancelCallback: (() => boolean) | null,
|
|
1600
1771
|
) => WasmMasteringStereoChainResult;
|
|
1601
1772
|
masteringPresetNames: () => string[];
|
|
1602
1773
|
masterAudio: (
|
|
@@ -1618,6 +1789,7 @@ export interface SonareModule {
|
|
|
1618
1789
|
sampleRate: number,
|
|
1619
1790
|
overrides: Record<string, number | boolean> | null,
|
|
1620
1791
|
progressCallback: ProgressCallback | null,
|
|
1792
|
+
cancelCallback: (() => boolean) | null,
|
|
1621
1793
|
) => WasmMasteringChainResult;
|
|
1622
1794
|
masterAudioStereoWithProgress: (
|
|
1623
1795
|
presetName: string,
|
|
@@ -1626,6 +1798,7 @@ export interface SonareModule {
|
|
|
1626
1798
|
sampleRate: number,
|
|
1627
1799
|
overrides: Record<string, number | boolean> | null,
|
|
1628
1800
|
progressCallback: ProgressCallback | null,
|
|
1801
|
+
cancelCallback: (() => boolean) | null,
|
|
1629
1802
|
) => WasmMasteringStereoChainResult;
|
|
1630
1803
|
mixingScenePresetNames: () => string[];
|
|
1631
1804
|
mixingScenePresetJson: (presetName: string) => string;
|
|
@@ -1636,6 +1809,13 @@ export interface SonareModule {
|
|
|
1636
1809
|
options: Record<string, unknown>,
|
|
1637
1810
|
) => WasmMixResult;
|
|
1638
1811
|
trim: (samples: Float32Array, sampleRate: number, thresholdDb: number) => Float32Array;
|
|
1812
|
+
trimEx: (
|
|
1813
|
+
samples: Float32Array,
|
|
1814
|
+
sampleRate: number,
|
|
1815
|
+
thresholdDb: number,
|
|
1816
|
+
frameLength: number,
|
|
1817
|
+
hopLength: number,
|
|
1818
|
+
) => Float32Array;
|
|
1639
1819
|
spectralEdit: (
|
|
1640
1820
|
samples: Float32Array,
|
|
1641
1821
|
sampleRate: number,
|
|
@@ -1680,6 +1860,79 @@ export interface SonareModule {
|
|
|
1680
1860
|
htk: boolean,
|
|
1681
1861
|
lifter: number,
|
|
1682
1862
|
) => WasmMfccResult;
|
|
1863
|
+
melDelta: (
|
|
1864
|
+
features: Float32Array,
|
|
1865
|
+
nFeatures: number,
|
|
1866
|
+
nFrames: number,
|
|
1867
|
+
width: number,
|
|
1868
|
+
) => Float32Array;
|
|
1869
|
+
reassignedSpectrogram: (
|
|
1870
|
+
samples: Float32Array,
|
|
1871
|
+
sampleRate: number,
|
|
1872
|
+
nFft: number,
|
|
1873
|
+
hopLength: number,
|
|
1874
|
+
refPower: number,
|
|
1875
|
+
fillNan: boolean,
|
|
1876
|
+
) => {
|
|
1877
|
+
nBins: number;
|
|
1878
|
+
nFrames: number;
|
|
1879
|
+
magnitude: Float32Array;
|
|
1880
|
+
times: Float32Array;
|
|
1881
|
+
frequencies: Float32Array;
|
|
1882
|
+
};
|
|
1883
|
+
segmentCrossSimilarity: (
|
|
1884
|
+
x: Float32Array,
|
|
1885
|
+
xRows: number,
|
|
1886
|
+
xCols: number,
|
|
1887
|
+
y: Float32Array,
|
|
1888
|
+
yRows: number,
|
|
1889
|
+
yCols: number,
|
|
1890
|
+
k: number,
|
|
1891
|
+
metric: string,
|
|
1892
|
+
mode: string,
|
|
1893
|
+
) => WasmSegmentMatrixResult;
|
|
1894
|
+
segmentRecurrenceMatrix: (
|
|
1895
|
+
data: Float32Array,
|
|
1896
|
+
rows: number,
|
|
1897
|
+
cols: number,
|
|
1898
|
+
k: number,
|
|
1899
|
+
width: number,
|
|
1900
|
+
sym: boolean,
|
|
1901
|
+
metric: string,
|
|
1902
|
+
mode: string,
|
|
1903
|
+
) => WasmSegmentMatrixResult;
|
|
1904
|
+
segmentRecurrenceToLag: (
|
|
1905
|
+
recurrence: Float32Array,
|
|
1906
|
+
n: number,
|
|
1907
|
+
pad: boolean,
|
|
1908
|
+
) => WasmSegmentMatrixResult;
|
|
1909
|
+
segmentLagToRecurrence: (
|
|
1910
|
+
lag: Float32Array,
|
|
1911
|
+
rows: number,
|
|
1912
|
+
lags: number,
|
|
1913
|
+
) => WasmSegmentMatrixResult;
|
|
1914
|
+
segmentSubsegment: (
|
|
1915
|
+
data: Float32Array,
|
|
1916
|
+
rows: number,
|
|
1917
|
+
cols: number,
|
|
1918
|
+
boundaries: Int32Array,
|
|
1919
|
+
nSegments: number,
|
|
1920
|
+
) => Int32Array;
|
|
1921
|
+
segmentAgglomerative: (
|
|
1922
|
+
data: Float32Array,
|
|
1923
|
+
rows: number,
|
|
1924
|
+
cols: number,
|
|
1925
|
+
k: number,
|
|
1926
|
+
linkage: string,
|
|
1927
|
+
) => Int32Array;
|
|
1928
|
+
segmentPathEnhance: (
|
|
1929
|
+
recurrence: Float32Array,
|
|
1930
|
+
n: number,
|
|
1931
|
+
win: number,
|
|
1932
|
+
maxRatio: number,
|
|
1933
|
+
minRatio: number,
|
|
1934
|
+
nFilters: number,
|
|
1935
|
+
) => WasmSegmentMatrixResult;
|
|
1683
1936
|
|
|
1684
1937
|
// Features - Inverse reconstruction
|
|
1685
1938
|
melToStft: (
|
|
@@ -1704,6 +1957,16 @@ export interface SonareModule {
|
|
|
1704
1957
|
nIter: number,
|
|
1705
1958
|
htk: boolean,
|
|
1706
1959
|
) => Float32Array;
|
|
1960
|
+
griffinLim: (
|
|
1961
|
+
magnitude: Float32Array,
|
|
1962
|
+
nBins: number,
|
|
1963
|
+
nFrames: number,
|
|
1964
|
+
sampleRate: number,
|
|
1965
|
+
nFft: number,
|
|
1966
|
+
hopLength: number,
|
|
1967
|
+
nIter: number,
|
|
1968
|
+
momentum: number,
|
|
1969
|
+
) => Float32Array;
|
|
1707
1970
|
mfccToMel: (
|
|
1708
1971
|
mfcc: Float32Array,
|
|
1709
1972
|
nMfcc: number,
|
|
@@ -1746,6 +2009,7 @@ export interface SonareModule {
|
|
|
1746
2009
|
sampleRate: number,
|
|
1747
2010
|
nFft: number,
|
|
1748
2011
|
hopLength: number,
|
|
2012
|
+
p: number,
|
|
1749
2013
|
) => Float32Array;
|
|
1750
2014
|
spectralRolloff: (
|
|
1751
2015
|
samples: Float32Array,
|
|
@@ -1760,6 +2024,13 @@ export interface SonareModule {
|
|
|
1760
2024
|
nFft: number,
|
|
1761
2025
|
hopLength: number,
|
|
1762
2026
|
) => Float32Array;
|
|
2027
|
+
spectralFlux: (
|
|
2028
|
+
samples: Float32Array,
|
|
2029
|
+
sampleRate: number,
|
|
2030
|
+
nFft: number,
|
|
2031
|
+
hopLength: number,
|
|
2032
|
+
lag: number,
|
|
2033
|
+
) => Float32Array;
|
|
1763
2034
|
zeroCrossingRate: (
|
|
1764
2035
|
samples: Float32Array,
|
|
1765
2036
|
sampleRate: number,
|
|
@@ -1826,6 +2097,30 @@ export interface SonareModule {
|
|
|
1826
2097
|
threshold: number,
|
|
1827
2098
|
fillNa: boolean,
|
|
1828
2099
|
) => WasmPitchResult;
|
|
2100
|
+
piptrack: (
|
|
2101
|
+
samples: Float32Array,
|
|
2102
|
+
sampleRate: number,
|
|
2103
|
+
nFft: number,
|
|
2104
|
+
hopLength: number,
|
|
2105
|
+
fmin: number,
|
|
2106
|
+
fmax: number,
|
|
2107
|
+
threshold: number,
|
|
2108
|
+
) => {
|
|
2109
|
+
nBins: number;
|
|
2110
|
+
nFrames: number;
|
|
2111
|
+
pitches: Float32Array;
|
|
2112
|
+
magnitudes: Float32Array;
|
|
2113
|
+
};
|
|
2114
|
+
noteSegments: (
|
|
2115
|
+
f0Hz: Float32Array,
|
|
2116
|
+
voicedProb: Float32Array,
|
|
2117
|
+
frameRate: number,
|
|
2118
|
+
options: {
|
|
2119
|
+
segmentationThresholdCents?: number;
|
|
2120
|
+
minNoteMs?: number;
|
|
2121
|
+
referenceHz?: number;
|
|
2122
|
+
},
|
|
2123
|
+
) => WasmNoteSegment[];
|
|
1829
2124
|
|
|
1830
2125
|
// Core - Conversion
|
|
1831
2126
|
hzToMel: (hz: number) => number;
|
|
@@ -1857,9 +2152,31 @@ export interface SonareModule {
|
|
|
1857
2152
|
hopLength: number,
|
|
1858
2153
|
) => Int32Array;
|
|
1859
2154
|
frameSignal: (samples: Float32Array, frameLength: number, hopLength: number) => WasmFrameResult;
|
|
2155
|
+
tone: (
|
|
2156
|
+
frequency: number,
|
|
2157
|
+
sampleRate: number,
|
|
2158
|
+
duration: number,
|
|
2159
|
+
phase: number,
|
|
2160
|
+
amplitude: number,
|
|
2161
|
+
) => Float32Array;
|
|
2162
|
+
chirp: (
|
|
2163
|
+
fmin: number,
|
|
2164
|
+
fmax: number,
|
|
2165
|
+
sampleRate: number,
|
|
2166
|
+
duration: number,
|
|
2167
|
+
linear: boolean,
|
|
2168
|
+
) => Float32Array;
|
|
2169
|
+
clicks: (
|
|
2170
|
+
times: Float32Array,
|
|
2171
|
+
sampleRate: number,
|
|
2172
|
+
length: number,
|
|
2173
|
+
frequency: number,
|
|
2174
|
+
clickDuration: number,
|
|
2175
|
+
) => Float32Array;
|
|
1860
2176
|
padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1861
2177
|
fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1862
2178
|
fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
|
|
2179
|
+
onsetBacktrack: (events: Int32Array, energy: Float32Array) => Int32Array;
|
|
1863
2180
|
peakPick: (
|
|
1864
2181
|
values: Float32Array,
|
|
1865
2182
|
preMax: number,
|
|
@@ -1883,6 +2200,8 @@ export interface SonareModule {
|
|
|
1883
2200
|
hopLength: number,
|
|
1884
2201
|
winLength: number,
|
|
1885
2202
|
mode: TempogramMode,
|
|
2203
|
+
center: boolean,
|
|
2204
|
+
norm: boolean,
|
|
1886
2205
|
) => WasmTempogramResult;
|
|
1887
2206
|
cyclicTempogram: (
|
|
1888
2207
|
onsetEnvelope: Float32Array,
|
|
@@ -1927,6 +2246,14 @@ export interface SonareModule {
|
|
|
1927
2246
|
stftBlendWeight: number,
|
|
1928
2247
|
stftBlendNFft: number,
|
|
1929
2248
|
) => WasmNnlsChromaResult;
|
|
2249
|
+
nnlsChromaEx: (
|
|
2250
|
+
samples: Float32Array,
|
|
2251
|
+
sampleRate: number,
|
|
2252
|
+
enableStftBlend: boolean,
|
|
2253
|
+
stftBlendWeight: number,
|
|
2254
|
+
stftBlendNFft: number,
|
|
2255
|
+
hopLength: number,
|
|
2256
|
+
) => WasmNnlsChromaResult;
|
|
1930
2257
|
cqt: (
|
|
1931
2258
|
samples: Float32Array,
|
|
1932
2259
|
sampleRate: number,
|
|
@@ -2019,6 +2346,8 @@ export interface SonareModule {
|
|
|
2019
2346
|
sampleRate: number,
|
|
2020
2347
|
hopLength: number,
|
|
2021
2348
|
winLength: number,
|
|
2349
|
+
center: boolean,
|
|
2350
|
+
norm: boolean,
|
|
2022
2351
|
) => WasmFourierTempogramResult;
|
|
2023
2352
|
tempogramRatio: (
|
|
2024
2353
|
tempogramData: Float32Array,
|
|
@@ -2115,6 +2444,7 @@ export interface SonareModule {
|
|
|
2115
2444
|
maxBlockSize: number,
|
|
2116
2445
|
commandCapacity: number,
|
|
2117
2446
|
telemetryCapacity: number,
|
|
2447
|
+
maxChannels?: number,
|
|
2118
2448
|
) => WasmRealtimeEngine;
|
|
2119
2449
|
|
|
2120
2450
|
// Streaming - StreamingMasteringChain
|
|
@@ -2152,6 +2482,8 @@ export interface WasmStreamingMasteringChain {
|
|
|
2152
2482
|
left: Float32Array,
|
|
2153
2483
|
right: Float32Array,
|
|
2154
2484
|
) => { left: Float32Array; right: Float32Array };
|
|
2485
|
+
flushMono: () => Float32Array;
|
|
2486
|
+
flushStereo: () => { left: Float32Array; right: Float32Array };
|
|
2155
2487
|
reset: () => void;
|
|
2156
2488
|
latencySamples: () => number;
|
|
2157
2489
|
stageNames: () => string[];
|
|
@@ -2206,8 +2538,10 @@ export interface WasmRealtimeVoiceChanger {
|
|
|
2206
2538
|
prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
|
|
2207
2539
|
reset: () => void;
|
|
2208
2540
|
setConfig: (config: Record<string, unknown> | string) => void;
|
|
2541
|
+
setPodConfig: (config: WasmRealtimeVoiceChangerPodConfig) => void;
|
|
2209
2542
|
configJson: () => string;
|
|
2210
2543
|
latencySamples: () => number;
|
|
2544
|
+
bufferGeneration: () => number;
|
|
2211
2545
|
processMono: (samples: Float32Array) => Float32Array;
|
|
2212
2546
|
processMonoInto: (samples: Float32Array, output: Float32Array) => void;
|
|
2213
2547
|
processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
|
package/src/stream_analyzer.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { resolveOrdinalInRange } from './codes';
|
|
1
2
|
import { getSonareModule } from './module_state';
|
|
2
3
|
import type { ChordQuality, PitchClass } from './public_types';
|
|
3
4
|
import type { WasmStreamAnalyzer } from './sonare.js';
|
|
@@ -73,6 +74,10 @@ export class StreamAnalyzer {
|
|
|
73
74
|
) {
|
|
74
75
|
throw new TypeError('outputFormat must be the integer 0 (Float32)');
|
|
75
76
|
}
|
|
77
|
+
const window =
|
|
78
|
+
config.window === undefined
|
|
79
|
+
? undefined
|
|
80
|
+
: resolveOrdinalInRange(config.window, 0, 3, 'stream analyzer window');
|
|
76
81
|
const module = getSonareModule();
|
|
77
82
|
const defaults = streamAnalyzerConfigDefaults();
|
|
78
83
|
this.analyzer = new module.StreamAnalyzer(
|
|
@@ -94,7 +99,7 @@ export class StreamAnalyzer {
|
|
|
94
99
|
config.maxProgressionEntries ?? defaults.maxProgressionEntries,
|
|
95
100
|
config.keyUpdateIntervalSec ?? defaults.keyUpdateIntervalSec,
|
|
96
101
|
config.bpmUpdateIntervalSec ?? defaults.bpmUpdateIntervalSec,
|
|
97
|
-
|
|
102
|
+
window ?? defaults.window,
|
|
98
103
|
config.outputFormat ?? defaults.outputFormat,
|
|
99
104
|
);
|
|
100
105
|
}
|
|
@@ -104,6 +104,21 @@ export class StreamingMasteringChain {
|
|
|
104
104
|
return this.chain.processStereo(left, right);
|
|
105
105
|
}
|
|
106
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
|
+
|
|
107
122
|
/** Reset all processor state without rebuilding. */
|
|
108
123
|
reset(): void {
|
|
109
124
|
this.chain.reset();
|