@libraz/libsonare 1.5.0 → 1.5.2

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.
@@ -26,45 +26,45 @@ export interface WasmKeyCandidateResult {
26
26
  correlation: number;
27
27
  }
28
28
 
29
- // Flat POD mirror of SonareRealtimeVoiceChangerConfig. Field names match the
30
- // C ABI / Python POD exactly (snake_case).
29
+ // Flat POD mirror of SonareRealtimeVoiceChangerConfig. Keys are camelCase to
30
+ // match the Node addon getter (the underlying C ABI / Python POD is snake_case).
31
31
  export interface WasmRealtimeVoiceChangerPodConfig {
32
- input_gain_db: number;
33
- output_gain_db: number;
34
- wet_mix: number;
35
- retune_semitones: number;
36
- retune_mix: number;
37
- retune_grain_size: number;
38
- formant_factor: number;
39
- formant_amount: number;
40
- formant_body: number;
41
- formant_brightness: number;
42
- formant_nasal: number;
43
- eq_highpass_hz: number;
44
- eq_body_db: number;
45
- eq_presence_db: number;
46
- eq_air_db: number;
47
- gate_threshold_db: number;
48
- gate_attack_ms: number;
49
- gate_release_ms: number;
50
- gate_range_db: number;
51
- compressor_threshold_db: number;
52
- compressor_ratio: number;
53
- compressor_attack_ms: number;
54
- compressor_release_ms: number;
55
- compressor_makeup_gain_db: number;
56
- deesser_frequency_hz: number;
57
- deesser_threshold_db: number;
58
- deesser_ratio: number;
59
- deesser_range_db: number;
60
- reverb_mix: number;
61
- reverb_time_ms: number;
62
- reverb_damping: number;
63
- reverb_seed: number;
64
- limiter_ceiling_db: number;
65
- limiter_release_ms: number;
66
- limiter_enable_isp_limiter: boolean;
67
- limiter_isp_ceiling_dbtp: number;
32
+ inputGainDb: number;
33
+ outputGainDb: number;
34
+ wetMix: number;
35
+ retuneSemitones: number;
36
+ retuneMix: number;
37
+ retuneGrainSize: number;
38
+ formantFactor: number;
39
+ formantAmount: number;
40
+ formantBody: number;
41
+ formantBrightness: number;
42
+ formantNasal: number;
43
+ eqHighpassHz: number;
44
+ eqBodyDb: number;
45
+ eqPresenceDb: number;
46
+ eqAirDb: number;
47
+ gateThresholdDb: number;
48
+ gateAttackMs: number;
49
+ gateReleaseMs: number;
50
+ gateRangeDb: number;
51
+ compressorThresholdDb: number;
52
+ compressorRatio: number;
53
+ compressorAttackMs: number;
54
+ compressorReleaseMs: number;
55
+ compressorMakeupGainDb: number;
56
+ deesserFrequencyHz: number;
57
+ deesserThresholdDb: number;
58
+ deesserRatio: number;
59
+ deesserRangeDb: number;
60
+ reverbMix: number;
61
+ reverbTimeMs: number;
62
+ reverbDamping: number;
63
+ reverbSeed: number;
64
+ limiterCeilingDb: number;
65
+ limiterReleaseMs: number;
66
+ limiterEnableIspLimiter: boolean;
67
+ limiterIspCeilingDbtp: number;
68
68
  }
69
69
 
70
70
  export interface WasmBeatResult {
@@ -194,6 +194,8 @@ export interface WasmStreamConfigDefaults {
194
194
  computeSpectral: boolean;
195
195
  emitEveryNFrames: number;
196
196
  magnitudeDownsample: number;
197
+ maxPendingFrames: number;
198
+ maxProgressionEntries: number;
197
199
  keyUpdateIntervalSec: number;
198
200
  bpmUpdateIntervalSec: number;
199
201
  window: number;
@@ -1156,6 +1158,7 @@ export interface SonareModule {
1156
1158
  detectKeyCandidates: (samples: Float32Array, sampleRate: number) => WasmKeyCandidateResult[];
1157
1159
  hasFfmpegSupport: () => boolean;
1158
1160
  version: () => string;
1161
+ abiVersion: () => number;
1159
1162
  engineAbiVersion: () => number;
1160
1163
  voiceChangerAbiVersion: () => number;
1161
1164
  voiceCharacterPresetId: (preset: number) => string | null;
@@ -1904,6 +1907,27 @@ export interface SonareModule {
1904
1907
  binsPerOctave: number,
1905
1908
  gamma: number,
1906
1909
  ) => WasmCqtResult;
1910
+ cqtToAudio: (
1911
+ magnitude: Float32Array,
1912
+ nBins: number,
1913
+ nFrames: number,
1914
+ sampleRate: number,
1915
+ hopLength: number,
1916
+ fmin: number,
1917
+ binsPerOctave: number,
1918
+ nIter: number,
1919
+ ) => Float32Array;
1920
+ vqtToAudio: (
1921
+ magnitude: Float32Array,
1922
+ nBins: number,
1923
+ nFrames: number,
1924
+ sampleRate: number,
1925
+ hopLength: number,
1926
+ fmin: number,
1927
+ binsPerOctave: number,
1928
+ gamma: number,
1929
+ nIter: number,
1930
+ ) => Float32Array;
1907
1931
  analyzeSections: (
1908
1932
  samples: Float32Array,
1909
1933
  sampleRate: number,
@@ -1948,6 +1972,7 @@ export interface SonareModule {
1948
1972
  winLength: number,
1949
1973
  sampleRate: number,
1950
1974
  hopLength: number,
1975
+ factors?: Float32Array | number[],
1951
1976
  ) => Float32Array;
1952
1977
  lufs: (samples: Float32Array, sampleRate: number) => WasmLufsResult;
1953
1978
  momentaryLufs: (samples: Float32Array, sampleRate: number) => Float32Array;
@@ -2024,6 +2049,8 @@ export interface SonareModule {
2024
2049
  computeSpectral: boolean,
2025
2050
  emitEveryNFrames: number,
2026
2051
  magnitudeDownsample: number,
2052
+ maxPendingFrames: number,
2053
+ maxProgressionEntries: number,
2027
2054
  keyUpdateIntervalSec: number,
2028
2055
  bpmUpdateIntervalSec: number,
2029
2056
  window: number,
@@ -2234,6 +2261,7 @@ export interface WasmMixer {
2234
2261
  vcaGroupCount: () => number;
2235
2262
  toSceneJson: () => string;
2236
2263
  tailSamples: () => number;
2264
+ latencySamples: () => number;
2237
2265
  drainTailStereo: (numSamples: number) => {
2238
2266
  left: Float32Array;
2239
2267
  right: Float32Array;
@@ -2297,6 +2325,10 @@ export interface WasmAnalyzerStats {
2297
2325
  totalFrames: number;
2298
2326
  totalSamples: number;
2299
2327
  durationSeconds: number;
2328
+ pendingFrames: number;
2329
+ droppedOutputFrames: number;
2330
+ droppedChordProgressionEntries: number;
2331
+ droppedBarProgressionEntries: number;
2300
2332
  estimate: WasmProgressiveEstimate;
2301
2333
  }
2302
2334
 
@@ -71,6 +71,8 @@ export class StreamAnalyzer {
71
71
  config.computeSpectral ?? defaults.computeSpectral,
72
72
  config.emitEveryNFrames ?? defaults.emitEveryNFrames,
73
73
  config.magnitudeDownsample ?? defaults.magnitudeDownsample,
74
+ config.maxPendingFrames ?? defaults.maxPendingFrames,
75
+ config.maxProgressionEntries ?? defaults.maxProgressionEntries,
74
76
  config.keyUpdateIntervalSec ?? defaults.keyUpdateIntervalSec,
75
77
  config.bpmUpdateIntervalSec ?? defaults.bpmUpdateIntervalSec,
76
78
  config.window ?? defaults.window,
@@ -88,7 +90,8 @@ export class StreamAnalyzer {
88
90
  }
89
91
 
90
92
  /**
91
- * Process audio samples with explicit sample offset.
93
+ * Process audio samples with a contiguous explicit sample offset. A gap,
94
+ * seek, or switch from `process()` requires `reset()` first.
92
95
  *
93
96
  * @param samples - Audio samples (mono, float32)
94
97
  * @param sampleOffset - Cumulative sample count at start of this chunk
@@ -163,6 +166,10 @@ export class StreamAnalyzer {
163
166
  totalFrames: s.totalFrames,
164
167
  totalSamples: s.totalSamples,
165
168
  durationSeconds: s.durationSeconds,
169
+ pendingFrames: s.pendingFrames,
170
+ droppedOutputFrames: s.droppedOutputFrames,
171
+ droppedChordProgressionEntries: s.droppedChordProgressionEntries,
172
+ droppedBarProgressionEntries: s.droppedBarProgressionEntries,
166
173
  estimate: {
167
174
  bpm: s.estimate.bpm,
168
175
  bpmConfidence: s.estimate.bpmConfidence,
@@ -64,6 +64,10 @@ export interface AnalyzerStats {
64
64
  totalFrames: number;
65
65
  totalSamples: number;
66
66
  durationSeconds: number;
67
+ pendingFrames: number;
68
+ droppedOutputFrames: number;
69
+ droppedChordProgressionEntries: number;
70
+ droppedBarProgressionEntries: number;
67
71
  estimate: ProgressiveEstimate;
68
72
  }
69
73
 
@@ -159,6 +163,10 @@ export interface StreamConfig {
159
163
  computeSpectral?: boolean;
160
164
  emitEveryNFrames?: number;
161
165
  magnitudeDownsample?: number;
166
+ /** Maximum unread frames; overflow drops the oldest frame. */
167
+ maxPendingFrames?: number;
168
+ /** Maximum retained chord and bar progression entries; overflow drops oldest. */
169
+ maxProgressionEntries?: number;
162
170
  keyUpdateIntervalSec?: number;
163
171
  bpmUpdateIntervalSec?: number;
164
172
  window?: number;