@libraz/libsonare 1.5.5 → 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 +759 -35
- package/dist/index.js +904 -209
- 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 +574 -86
- package/dist/worklet.js +1634 -235
- 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 +6 -0
- package/src/clip_page_streamer.ts +62 -8
- package/src/codes.ts +51 -64
- package/src/effects_mastering.ts +1 -0
- package/src/errors.ts +1 -0
- package/src/feature_core.ts +140 -2
- package/src/feature_music.ts +17 -2
- package/src/feature_pitch.ts +70 -1
- package/src/feature_spectral.ts +231 -5
- package/src/feature_spectrogram.ts +159 -0
- package/src/features.ts +16 -1
- package/src/index.ts +101 -7
- 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/opfs_clip_pages.ts +26 -1
- package/src/project.ts +7 -0
- package/src/project_class.ts +62 -8
- 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 +22 -0
- package/src/public_types_mixing.ts +11 -2
- package/src/public_types_music.ts +9 -0
- package/src/public_types_spectral.ts +33 -0
- package/src/quick_analysis.ts +25 -7
- package/src/realtime_engine.ts +153 -3
- package/src/realtime_voice_changer.ts +51 -77
- package/src/sonare-analysis.js.d.ts +8 -0
- package/src/sonare.js.d.ts +276 -6
- package/src/streaming_processors.ts +15 -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 +125 -7
- package/src/worklet/protocol.ts +301 -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,36 @@ 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
|
+
}
|
|
627
703
|
|
|
628
704
|
export interface WasmEngineMetronomeConfig {
|
|
629
705
|
enabled: boolean;
|
|
@@ -843,6 +919,7 @@ export interface WasmRealtimeEngine {
|
|
|
843
919
|
stop: (renderFrame: number) => void;
|
|
844
920
|
seekSample: (timelineSample: number, renderFrame: number) => void;
|
|
845
921
|
settleParameters: () => void;
|
|
922
|
+
flushControlCommands: () => void;
|
|
846
923
|
seekPpq: (ppq: number, renderFrame: number) => void;
|
|
847
924
|
setTempo: (bpm: number) => void;
|
|
848
925
|
setTempoSegments: (segments: WasmEngineTempoSegment[]) => void;
|
|
@@ -926,10 +1003,14 @@ export interface WasmRealtimeEngine {
|
|
|
926
1003
|
clearClipPage: (providerId: number, pageIndex: number) => void;
|
|
927
1004
|
destroyClipPageProvider: (providerId: number) => void;
|
|
928
1005
|
popClipPageRequest: () => WasmClipPageRequest | null;
|
|
1006
|
+
popClipPageRequestToScratch: () => boolean;
|
|
1007
|
+
clipPageRequestScratchClipId: () => number;
|
|
1008
|
+
clipPageRequestScratchSample: () => number;
|
|
1009
|
+
clipPageRequestOverflowCount: () => number;
|
|
929
1010
|
setCaptureBuffer: (numChannels: number, capacityFrames: number) => void;
|
|
930
1011
|
armCapture: (armed: boolean) => void;
|
|
931
1012
|
setCapturePunch: (startSample: number, endSample: number, enabled: boolean) => void;
|
|
932
|
-
setCaptureSource: (source: WasmEngineCaptureStatus['source']) => void;
|
|
1013
|
+
setCaptureSource: (source: WasmEngineCaptureStatus['source'] | number) => void;
|
|
933
1014
|
setRecordOffsetSamples: (offsetSamples: number) => void;
|
|
934
1015
|
setInputMonitor: (enabled: boolean, gain: number) => void;
|
|
935
1016
|
resetCapture: () => void;
|
|
@@ -1002,14 +1083,29 @@ export interface WasmRealtimeEngine {
|
|
|
1002
1083
|
value: number,
|
|
1003
1084
|
renderFrame: number,
|
|
1004
1085
|
) => void;
|
|
1086
|
+
pushMidiUmp: (destinationId: number, word0: number, renderFrame: number) => void;
|
|
1005
1087
|
pushMidiSysex: (destinationId: number, data: Uint8Array, renderFrame: number) => void;
|
|
1006
1088
|
pushMidiPanic: (renderFrame: number) => void;
|
|
1007
1089
|
setMidiDestinationExternal: (destinationId: number, external: boolean) => void;
|
|
1008
1090
|
setExternalMidiClockEnabled: (enabled: boolean) => void;
|
|
1009
1091
|
externalMidiDroppedCount: () => number;
|
|
1092
|
+
externalMidiPendingCount: () => number;
|
|
1010
1093
|
drainExternalMidi: (maxRecords: number) => WasmExternalMidiEvent[];
|
|
1094
|
+
popExternalMidiToScratch: () => boolean;
|
|
1095
|
+
externalMidiScratchDestinationId: () => number;
|
|
1096
|
+
externalMidiScratchRenderFrame: () => number;
|
|
1097
|
+
externalMidiScratchByteWord: () => number;
|
|
1098
|
+
externalMidiScratchByteCount: () => number;
|
|
1099
|
+
consumeExternalMidiScratch: () => void;
|
|
1011
1100
|
clearParameters: () => void;
|
|
1012
1101
|
process: (channels: Float32Array[]) => Float32Array[];
|
|
1102
|
+
prepareWithChannels: (
|
|
1103
|
+
sampleRate: number,
|
|
1104
|
+
maxBlockSize: number,
|
|
1105
|
+
commandCapacity: number,
|
|
1106
|
+
telemetryCapacity: number,
|
|
1107
|
+
maxChannels: number,
|
|
1108
|
+
) => void;
|
|
1013
1109
|
prepareChannels: (numChannels: number, maxFrames: number) => void;
|
|
1014
1110
|
getChannelBuffer: (channel: number, numFrames: number) => Float32Array;
|
|
1015
1111
|
processPrepared: (numFrames: number) => void;
|
|
@@ -1018,19 +1114,40 @@ export interface WasmRealtimeEngine {
|
|
|
1018
1114
|
bounceOffline: (options: WasmEngineBounceOptions) => WasmEngineBounceResult;
|
|
1019
1115
|
freezeOffline: (options: WasmEngineFreezeOptions) => WasmEngineFreezeResult;
|
|
1020
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;
|
|
1021
1129
|
drainMeterTelemetry: (maxRecords: number) => WasmEngineMeterTelemetry[];
|
|
1022
1130
|
drainMeterTelemetryWide: (maxRecords: number) => WasmEngineMeterTelemetryWide[];
|
|
1023
1131
|
configureScopeTelemetry: (intervalFrames: number, bandCount: number) => number;
|
|
1024
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;
|
|
1025
1141
|
delete: () => void;
|
|
1026
1142
|
}
|
|
1027
1143
|
|
|
1028
|
-
export type ProgressCallback
|
|
1144
|
+
export type { ProgressCallback } from './public_types';
|
|
1029
1145
|
export type TempogramMode = 'autocorrelation' | 'auto' | 'ac' | 'cosine' | 0 | 1;
|
|
1030
1146
|
|
|
1031
1147
|
export interface WasmSynthEnumTables {
|
|
1032
1148
|
engineModes: string[];
|
|
1033
1149
|
waveforms: string[];
|
|
1150
|
+
builtinWaveforms: string[];
|
|
1034
1151
|
filterModels: string[];
|
|
1035
1152
|
filterOutputs: string[];
|
|
1036
1153
|
bodyTypes: string[];
|
|
@@ -1068,7 +1185,7 @@ export interface SonareModule {
|
|
|
1068
1185
|
profileType: number,
|
|
1069
1186
|
genreHint: string,
|
|
1070
1187
|
) => WasmKeyCandidateResult[];
|
|
1071
|
-
detectOnsets: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1188
|
+
detectOnsets: (samples: Float32Array, sampleRate: number, options: object) => Float32Array;
|
|
1072
1189
|
detectBeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1073
1190
|
detectDownbeats: (samples: Float32Array, sampleRate: number) => Float32Array;
|
|
1074
1191
|
detectChords: (
|
|
@@ -1142,6 +1259,7 @@ export interface SonareModule {
|
|
|
1142
1259
|
samples: Float32Array,
|
|
1143
1260
|
sampleRate: number,
|
|
1144
1261
|
progressCallback: ProgressCallback | null,
|
|
1262
|
+
cancelCallback: (() => boolean) | null,
|
|
1145
1263
|
) => WasmAnalysisResult;
|
|
1146
1264
|
analyzeBpm: (
|
|
1147
1265
|
samples: Float32Array,
|
|
@@ -1181,11 +1299,13 @@ export interface SonareModule {
|
|
|
1181
1299
|
detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
|
|
1182
1300
|
hasFfmpegSupport: () => boolean;
|
|
1183
1301
|
version: () => string;
|
|
1302
|
+
capabilities: () => SonareCapabilities;
|
|
1303
|
+
capabilityCatalog: () => string;
|
|
1184
1304
|
abiVersion: () => number;
|
|
1185
1305
|
engineAbiVersion: () => number;
|
|
1186
1306
|
voiceChangerAbiVersion: () => number;
|
|
1187
|
-
voiceCharacterPresetId: (preset: number) => string
|
|
1188
|
-
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig
|
|
1307
|
+
voiceCharacterPresetId: (preset: number) => string;
|
|
1308
|
+
realtimeVoiceChangerPresetConfig: (preset: number) => WasmRealtimeVoiceChangerPodConfig;
|
|
1189
1309
|
|
|
1190
1310
|
meteringPeakDb: (samples: Float32Array, sampleRate: number) => number;
|
|
1191
1311
|
meteringRmsDb: (samples: Float32Array, sampleRate: number) => number;
|
|
@@ -1590,6 +1710,7 @@ export interface SonareModule {
|
|
|
1590
1710
|
sampleRate: number,
|
|
1591
1711
|
config: Record<string, unknown>,
|
|
1592
1712
|
progressCallback: ProgressCallback | null,
|
|
1713
|
+
cancelCallback: (() => boolean) | null,
|
|
1593
1714
|
) => WasmMasteringChainResult;
|
|
1594
1715
|
masteringChainStereoWithProgress: (
|
|
1595
1716
|
left: Float32Array,
|
|
@@ -1597,6 +1718,7 @@ export interface SonareModule {
|
|
|
1597
1718
|
sampleRate: number,
|
|
1598
1719
|
config: Record<string, unknown>,
|
|
1599
1720
|
progressCallback: ProgressCallback | null,
|
|
1721
|
+
cancelCallback: (() => boolean) | null,
|
|
1600
1722
|
) => WasmMasteringStereoChainResult;
|
|
1601
1723
|
masteringPresetNames: () => string[];
|
|
1602
1724
|
masterAudio: (
|
|
@@ -1618,6 +1740,7 @@ export interface SonareModule {
|
|
|
1618
1740
|
sampleRate: number,
|
|
1619
1741
|
overrides: Record<string, number | boolean> | null,
|
|
1620
1742
|
progressCallback: ProgressCallback | null,
|
|
1743
|
+
cancelCallback: (() => boolean) | null,
|
|
1621
1744
|
) => WasmMasteringChainResult;
|
|
1622
1745
|
masterAudioStereoWithProgress: (
|
|
1623
1746
|
presetName: string,
|
|
@@ -1626,6 +1749,7 @@ export interface SonareModule {
|
|
|
1626
1749
|
sampleRate: number,
|
|
1627
1750
|
overrides: Record<string, number | boolean> | null,
|
|
1628
1751
|
progressCallback: ProgressCallback | null,
|
|
1752
|
+
cancelCallback: (() => boolean) | null,
|
|
1629
1753
|
) => WasmMasteringStereoChainResult;
|
|
1630
1754
|
mixingScenePresetNames: () => string[];
|
|
1631
1755
|
mixingScenePresetJson: (presetName: string) => string;
|
|
@@ -1680,6 +1804,79 @@ export interface SonareModule {
|
|
|
1680
1804
|
htk: boolean,
|
|
1681
1805
|
lifter: number,
|
|
1682
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;
|
|
1683
1880
|
|
|
1684
1881
|
// Features - Inverse reconstruction
|
|
1685
1882
|
melToStft: (
|
|
@@ -1704,6 +1901,16 @@ export interface SonareModule {
|
|
|
1704
1901
|
nIter: number,
|
|
1705
1902
|
htk: boolean,
|
|
1706
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;
|
|
1707
1914
|
mfccToMel: (
|
|
1708
1915
|
mfcc: Float32Array,
|
|
1709
1916
|
nMfcc: number,
|
|
@@ -1746,6 +1953,7 @@ export interface SonareModule {
|
|
|
1746
1953
|
sampleRate: number,
|
|
1747
1954
|
nFft: number,
|
|
1748
1955
|
hopLength: number,
|
|
1956
|
+
p: number,
|
|
1749
1957
|
) => Float32Array;
|
|
1750
1958
|
spectralRolloff: (
|
|
1751
1959
|
samples: Float32Array,
|
|
@@ -1760,6 +1968,13 @@ export interface SonareModule {
|
|
|
1760
1968
|
nFft: number,
|
|
1761
1969
|
hopLength: number,
|
|
1762
1970
|
) => Float32Array;
|
|
1971
|
+
spectralFlux: (
|
|
1972
|
+
samples: Float32Array,
|
|
1973
|
+
sampleRate: number,
|
|
1974
|
+
nFft: number,
|
|
1975
|
+
hopLength: number,
|
|
1976
|
+
lag: number,
|
|
1977
|
+
) => Float32Array;
|
|
1763
1978
|
zeroCrossingRate: (
|
|
1764
1979
|
samples: Float32Array,
|
|
1765
1980
|
sampleRate: number,
|
|
@@ -1826,6 +2041,30 @@ export interface SonareModule {
|
|
|
1826
2041
|
threshold: number,
|
|
1827
2042
|
fillNa: boolean,
|
|
1828
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[];
|
|
1829
2068
|
|
|
1830
2069
|
// Core - Conversion
|
|
1831
2070
|
hzToMel: (hz: number) => number;
|
|
@@ -1857,9 +2096,31 @@ export interface SonareModule {
|
|
|
1857
2096
|
hopLength: number,
|
|
1858
2097
|
) => Int32Array;
|
|
1859
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;
|
|
1860
2120
|
padCenter: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1861
2121
|
fixLength: (values: Float32Array, size: number, padValue: number) => Float32Array;
|
|
1862
2122
|
fixFrames: (frames: Int32Array, xMin: number, xMax: number, pad: boolean) => Int32Array;
|
|
2123
|
+
onsetBacktrack: (events: Int32Array, energy: Float32Array) => Int32Array;
|
|
1863
2124
|
peakPick: (
|
|
1864
2125
|
values: Float32Array,
|
|
1865
2126
|
preMax: number,
|
|
@@ -1883,6 +2144,8 @@ export interface SonareModule {
|
|
|
1883
2144
|
hopLength: number,
|
|
1884
2145
|
winLength: number,
|
|
1885
2146
|
mode: TempogramMode,
|
|
2147
|
+
center: boolean,
|
|
2148
|
+
norm: boolean,
|
|
1886
2149
|
) => WasmTempogramResult;
|
|
1887
2150
|
cyclicTempogram: (
|
|
1888
2151
|
onsetEnvelope: Float32Array,
|
|
@@ -2019,6 +2282,8 @@ export interface SonareModule {
|
|
|
2019
2282
|
sampleRate: number,
|
|
2020
2283
|
hopLength: number,
|
|
2021
2284
|
winLength: number,
|
|
2285
|
+
center: boolean,
|
|
2286
|
+
norm: boolean,
|
|
2022
2287
|
) => WasmFourierTempogramResult;
|
|
2023
2288
|
tempogramRatio: (
|
|
2024
2289
|
tempogramData: Float32Array,
|
|
@@ -2115,6 +2380,7 @@ export interface SonareModule {
|
|
|
2115
2380
|
maxBlockSize: number,
|
|
2116
2381
|
commandCapacity: number,
|
|
2117
2382
|
telemetryCapacity: number,
|
|
2383
|
+
maxChannels?: number,
|
|
2118
2384
|
) => WasmRealtimeEngine;
|
|
2119
2385
|
|
|
2120
2386
|
// Streaming - StreamingMasteringChain
|
|
@@ -2152,6 +2418,8 @@ export interface WasmStreamingMasteringChain {
|
|
|
2152
2418
|
left: Float32Array,
|
|
2153
2419
|
right: Float32Array,
|
|
2154
2420
|
) => { left: Float32Array; right: Float32Array };
|
|
2421
|
+
flushMono: () => Float32Array;
|
|
2422
|
+
flushStereo: () => { left: Float32Array; right: Float32Array };
|
|
2155
2423
|
reset: () => void;
|
|
2156
2424
|
latencySamples: () => number;
|
|
2157
2425
|
stageNames: () => string[];
|
|
@@ -2206,8 +2474,10 @@ export interface WasmRealtimeVoiceChanger {
|
|
|
2206
2474
|
prepare: (sampleRate: number, maxBlockSize: number, channels: number) => void;
|
|
2207
2475
|
reset: () => void;
|
|
2208
2476
|
setConfig: (config: Record<string, unknown> | string) => void;
|
|
2477
|
+
setPodConfig: (config: WasmRealtimeVoiceChangerPodConfig) => void;
|
|
2209
2478
|
configJson: () => string;
|
|
2210
2479
|
latencySamples: () => number;
|
|
2480
|
+
bufferGeneration: () => number;
|
|
2211
2481
|
processMono: (samples: Float32Array) => Float32Array;
|
|
2212
2482
|
processMonoInto: (samples: Float32Array, output: Float32Array) => void;
|
|
2213
2483
|
processInterleaved: (samples: Float32Array, channels: number) => Float32Array;
|
|
@@ -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();
|
package/src/web_midi.ts
CHANGED
|
@@ -1,4 +1,36 @@
|
|
|
1
|
-
import type { MidiCcBindOptions
|
|
1
|
+
import type { MidiCcBindOptions } from './realtime_engine';
|
|
2
|
+
|
|
3
|
+
export interface WebMidiEngine {
|
|
4
|
+
bindMidiCc(
|
|
5
|
+
channel: number,
|
|
6
|
+
controller: number,
|
|
7
|
+
paramId: number,
|
|
8
|
+
options?: MidiCcBindOptions,
|
|
9
|
+
): void;
|
|
10
|
+
setMidiInputSource(destinationId?: number): void;
|
|
11
|
+
clearMidiInputSource(): void;
|
|
12
|
+
pushMidiInputNoteOn(
|
|
13
|
+
group: number,
|
|
14
|
+
channel: number,
|
|
15
|
+
note: number,
|
|
16
|
+
velocity: number,
|
|
17
|
+
time?: number,
|
|
18
|
+
): void;
|
|
19
|
+
pushMidiInputNoteOff(
|
|
20
|
+
group: number,
|
|
21
|
+
channel: number,
|
|
22
|
+
note: number,
|
|
23
|
+
velocity?: number,
|
|
24
|
+
time?: number,
|
|
25
|
+
): void;
|
|
26
|
+
pushMidiInputCc(
|
|
27
|
+
group: number,
|
|
28
|
+
channel: number,
|
|
29
|
+
controller: number,
|
|
30
|
+
value: number,
|
|
31
|
+
time?: number,
|
|
32
|
+
): void;
|
|
33
|
+
}
|
|
2
34
|
|
|
3
35
|
type MidiInputState = 'connected' | 'disconnected';
|
|
4
36
|
|
|
@@ -103,7 +135,7 @@ export function isWebMidiAvailable(): boolean {
|
|
|
103
135
|
}
|
|
104
136
|
|
|
105
137
|
export async function bindWebMidi(
|
|
106
|
-
engine:
|
|
138
|
+
engine: WebMidiEngine,
|
|
107
139
|
options: BindWebMidiOptions = {},
|
|
108
140
|
): Promise<WebMidiBinding> {
|
|
109
141
|
const navigatorWithMidi = globalThis.navigator as NavigatorWithMidi | undefined;
|
|
@@ -237,7 +269,7 @@ export async function bindWebMidi(
|
|
|
237
269
|
}
|
|
238
270
|
|
|
239
271
|
function dispatchMidiMessage(
|
|
240
|
-
engine:
|
|
272
|
+
engine: WebMidiEngine,
|
|
241
273
|
event: MidiMessageEventLike,
|
|
242
274
|
group: number,
|
|
243
275
|
runningStatus: number,
|
|
@@ -300,7 +332,7 @@ function dispatchMidiMessage(
|
|
|
300
332
|
}
|
|
301
333
|
|
|
302
334
|
function dispatchUmpMessage(
|
|
303
|
-
engine:
|
|
335
|
+
engine: WebMidiEngine,
|
|
304
336
|
words: ArrayLike<number>,
|
|
305
337
|
portTimeSamples: number,
|
|
306
338
|
): void {
|