dspx 1.0.1 → 1.1.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/dist/types.d.ts CHANGED
@@ -1090,4 +1090,239 @@ export interface AutocorrelationOptions {
1090
1090
  */
1091
1091
  export interface CrossCorrelationOptions {
1092
1092
  }
1093
+ /**
1094
+ * Parameters for FFT processing in pipeline
1095
+ */
1096
+ export interface fftParams {
1097
+ /** FFT size (must be power of 2 for FFT, any size for DFT) */
1098
+ size: number;
1099
+ /**
1100
+ * Transform type
1101
+ * - 'fft': Fast Fourier Transform (O(N log N), requires power of 2)
1102
+ * - 'dft': Discrete Fourier Transform (O(N²), works with any size)
1103
+ * - 'rfft': Real FFT (O(N log N), for real-valued signals)
1104
+ * - 'rdft': Real DFT (O(N²), for real-valued signals)
1105
+ */
1106
+ type?: "fft" | "dft" | "rfft" | "rdft";
1107
+ /**
1108
+ * Forward or inverse transform
1109
+ * - true: Forward transform (time -> frequency)
1110
+ * - false: Inverse transform (frequency -> time)
1111
+ */
1112
+ forward?: boolean;
1113
+ /**
1114
+ * Output format
1115
+ * - 'complex': Return {real, imag} arrays
1116
+ * - 'magnitude': Return magnitude spectrum
1117
+ * - 'power': Return power spectrum (magnitude squared)
1118
+ * - 'phase': Return phase spectrum
1119
+ */
1120
+ output?: "complex" | "magnitude" | "power" | "phase";
1121
+ }
1122
+ /**
1123
+ * Parameters for STFT (Short-Time Fourier Transform) processing in pipeline
1124
+ *
1125
+ * STFT computes the Fourier transform over sliding windows, producing a time-frequency
1126
+ * representation (spectrogram). Useful for analyzing non-stationary signals where
1127
+ * frequency content changes over time.
1128
+ *
1129
+ * **Window Size vs Hop Size Trade-offs:**
1130
+ * - Larger window: Better frequency resolution, worse time resolution
1131
+ * - Smaller window: Better time resolution, worse frequency resolution
1132
+ * - Larger hop: Faster processing, less overlap
1133
+ * - Smaller hop: Smoother spectrogram, more overlap
1134
+ *
1135
+ * **Common Overlap Settings:**
1136
+ * - 50% overlap: hopSize = windowSize / 2 (standard)
1137
+ * - 75% overlap: hopSize = windowSize / 4 (high quality)
1138
+ * - No overlap: hopSize = windowSize (fast, blocky)
1139
+ */
1140
+ export interface stftParams {
1141
+ /**
1142
+ * Window size (FFT size) in samples
1143
+ * - For FFT/RFFT: Must be power of 2 (e.g., 256, 512, 1024, 2048)
1144
+ * - For DFT/RDFT: Can be any positive integer
1145
+ *
1146
+ * Typical values:
1147
+ * - Audio analysis: 1024-4096 samples
1148
+ * - Speech: 256-512 samples
1149
+ * - Vibration: 512-2048 samples
1150
+ */
1151
+ windowSize: number;
1152
+ /**
1153
+ * Hop size (stride) in samples between consecutive windows
1154
+ *
1155
+ * Default: windowSize / 2 (50% overlap)
1156
+ *
1157
+ * Examples:
1158
+ * - windowSize=1024, hopSize=512 → 50% overlap
1159
+ * - windowSize=1024, hopSize=256 → 75% overlap
1160
+ * - windowSize=1024, hopSize=1024 → No overlap
1161
+ */
1162
+ hopSize?: number;
1163
+ /**
1164
+ * Transform method
1165
+ * - 'fft': Fast transform (O(N log N), requires power-of-2 windowSize)
1166
+ * - 'dft': Direct transform (O(N²), works with any windowSize)
1167
+ *
1168
+ * Default: 'fft' if windowSize is power of 2, else 'dft'
1169
+ */
1170
+ method?: "fft" | "dft";
1171
+ /**
1172
+ * Input signal type
1173
+ * - 'real': Real-valued input (uses RFFT/RDFT, outputs N/2+1 bins)
1174
+ * - 'complex': Complex-valued input (uses FFT/DFT, outputs N bins)
1175
+ *
1176
+ * Default: 'real' (most common for audio/sensor data)
1177
+ */
1178
+ type?: "real" | "complex";
1179
+ /**
1180
+ * Transform direction
1181
+ * - true: Forward STFT (time → time-frequency)
1182
+ * - false: Inverse STFT (time-frequency → time)
1183
+ *
1184
+ * Default: true (forward)
1185
+ */
1186
+ forward?: boolean;
1187
+ /**
1188
+ * Output format for each time window
1189
+ * - 'complex': Complex spectrum {real, imag}
1190
+ * - 'magnitude': Magnitude spectrum |X[k]|
1191
+ * - 'power': Power spectrum |X[k]|²
1192
+ * - 'phase': Phase spectrum ∠X[k]
1193
+ *
1194
+ * Default: 'magnitude'
1195
+ *
1196
+ * Output shape: [numWindows, numFreqBins] flattened
1197
+ */
1198
+ output?: "complex" | "magnitude" | "power" | "phase";
1199
+ /**
1200
+ * Window function to reduce spectral leakage
1201
+ * - 'none': Rectangular window (no tapering)
1202
+ * - 'hann': Hann window (smooth, general purpose)
1203
+ * - 'hamming': Hamming window (better frequency resolution)
1204
+ * - 'blackman': Blackman window (best sidelobe suppression)
1205
+ * - 'bartlett': Triangular window
1206
+ *
1207
+ * Default: 'hann'
1208
+ */
1209
+ window?: "none" | "hann" | "hamming" | "blackman" | "bartlett";
1210
+ }
1211
+ /**
1212
+ * Parameters for Mel Spectrogram processing in pipeline
1213
+ *
1214
+ * Converts power spectrum to Mel-scale representation using filterbank matrix multiplication.
1215
+ * The Mel scale is a perceptual scale of pitches judged by listeners to be equal in distance.
1216
+ *
1217
+ * **Pipeline Position:**
1218
+ * Typically used after STFT + Power: STFT → Power → MelSpectrogram → Log → MFCC
1219
+ *
1220
+ * **Filterbank Creation:**
1221
+ * The filterbank matrix must be pre-computed in TypeScript using a helper function
1222
+ * that creates triangular filters distributed along the Mel scale.
1223
+ *
1224
+ * **What it does:**
1225
+ * Applies matrix multiplication: mel_energies = filterbank × power_spectrum
1226
+ * This groups frequency bins into perceptually-meaningful Mel bands.
1227
+ */
1228
+ export interface MelSpectrogramParams {
1229
+ /**
1230
+ * Pre-computed Mel filterbank matrix (numMelBands × numBins)
1231
+ *
1232
+ * This matrix contains triangular filters that convert linear frequency bins
1233
+ * to Mel-scale bands. Must be pre-computed using a Mel filterbank generator.
1234
+ *
1235
+ * Shape: Float32Array of length (numMelBands * numBins), row-major order
1236
+ */
1237
+ filterbankMatrix: Float32Array;
1238
+ /**
1239
+ * Number of input frequency bins (from STFT/FFT)
1240
+ *
1241
+ * For real signals: numBins = fftSize / 2 + 1
1242
+ * For complex signals: numBins = fftSize
1243
+ *
1244
+ * Example: FFT size 512 → 257 bins (real)
1245
+ */
1246
+ numBins: number;
1247
+ /**
1248
+ * Number of output Mel frequency bands
1249
+ *
1250
+ * Common values:
1251
+ * - Speech: 20-40 bands
1252
+ * - Music: 40-128 bands
1253
+ * - MFCC: 20-40 bands (13-20 MFCCs extracted from these)
1254
+ *
1255
+ * More bands = finer frequency resolution but higher computational cost
1256
+ */
1257
+ numMelBands: number;
1258
+ }
1259
+ /**
1260
+ * Parameters for MFCC (Mel-Frequency Cepstral Coefficients) processing in pipeline
1261
+ *
1262
+ * Applies Discrete Cosine Transform (DCT) to log Mel energies to produce MFCCs.
1263
+ * MFCCs are widely used in speech recognition, audio classification, and speaker
1264
+ * identification because they:
1265
+ * - Decorrelate Mel energies
1266
+ * - Compress information into lower-order coefficients
1267
+ * - Mimic human auditory perception
1268
+ * - Provide compact representation suitable for ML models
1269
+ *
1270
+ * **Pipeline Position:**
1271
+ * Final stage: STFT → Power → MelSpectrogram → Log → MFCC
1272
+ *
1273
+ * **Typical Output:**
1274
+ * 13-20 MFCC coefficients per frame, representing the spectral envelope shape.
1275
+ * Often the first coefficient (C0) represents energy and may be discarded.
1276
+ */
1277
+ export interface MfccParams {
1278
+ /**
1279
+ * Number of input Mel frequency bands (from MelSpectrogram)
1280
+ *
1281
+ * Must match the numMelBands from the preceding MelSpectrogram stage.
1282
+ *
1283
+ * Typical values: 20-40 bands
1284
+ */
1285
+ numMelBands: number;
1286
+ /**
1287
+ * Number of MFCC coefficients to output
1288
+ *
1289
+ * Common values:
1290
+ * - Speech recognition: 13 coefficients
1291
+ * - Speaker recognition: 20 coefficients
1292
+ * - Music: 13-20 coefficients
1293
+ *
1294
+ * Must be ≤ numMelBands. Lower coefficients capture envelope,
1295
+ * higher coefficients capture fine spectral detail.
1296
+ *
1297
+ * Default: 13
1298
+ */
1299
+ numCoefficients?: number;
1300
+ /**
1301
+ * Apply logarithm to input energies before DCT
1302
+ *
1303
+ * - true: Apply log (standard for MFCCs, matches human perception)
1304
+ * - false: Skip log (use when input is already in log domain)
1305
+ *
1306
+ * Default: true
1307
+ *
1308
+ * The log compression mimics human hearing's logarithmic loudness perception.
1309
+ */
1310
+ useLogEnergy?: boolean;
1311
+ /**
1312
+ * Cepstral liftering coefficient
1313
+ *
1314
+ * Liftering weights lower-order coefficients more than higher-order ones,
1315
+ * improving recognition performance by emphasizing the spectral envelope.
1316
+ *
1317
+ * - 0: No liftering (disabled)
1318
+ * - 22: Common value for speech (HTK standard)
1319
+ * - Higher values: Stronger emphasis on lower coefficients
1320
+ *
1321
+ * Default: 0 (disabled)
1322
+ *
1323
+ * Lifter formula: L[n] = 1 + (Q/2) * sin(πn/Q)
1324
+ * where Q is the liftering coefficient.
1325
+ */
1326
+ lifterCoefficient?: number;
1327
+ }
1093
1328
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/ts/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/ts/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dspx",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "High-performance DSP library with native C++ acceleration and Redis state persistence",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,6 +18,9 @@
18
18
  #include "adapters/RlsStage.h" // RLS Adaptive Filter stage
19
19
  #include "adapters/WaveletTransformStage.h" // Wavelet Transform stage
20
20
  #include "adapters/HilbertEnvelopeStage.h" // Hilbert Envelope stage
21
+ #include "adapters/StftStage.h" // STFT (Short-Time Fourier Transform) stage
22
+ #include "adapters/MelSpectrogramStage.h" // Mel Spectrogram stage
23
+ #include "adapters/MfccStage.h" // MFCC (Mel-Frequency Cepstral Coefficients) stage
21
24
  #include "adapters/MatrixTransformStage.h" // Matrix Transform stage (PCA/ICA/Whitening)
22
25
  #include "adapters/GscPreprocessorStage.h" // GSC Preprocessor for adaptive beamforming
23
26
  #include "adapters/ChannelSelectorStage.h" // Channel selector for reducing channel count
@@ -574,6 +577,108 @@ namespace dsp
574
577
  return std::make_unique<dsp::adapters::HilbertEnvelopeStage>(windowSize, hopSize);
575
578
  };
576
579
 
580
+ // Factory for STFT (Short-Time Fourier Transform) stage
581
+ m_stageFactories["stft"] = [](const Napi::Object &params)
582
+ {
583
+ if (!params.Has("windowSize"))
584
+ {
585
+ throw std::invalid_argument("STFT: 'windowSize' is required");
586
+ }
587
+ size_t windowSize = params.Get("windowSize").As<Napi::Number>().Uint32Value();
588
+
589
+ // Get optional parameters with defaults
590
+ size_t hopSize = windowSize / 2; // Default: 50% overlap
591
+ if (params.Has("hopSize"))
592
+ {
593
+ hopSize = params.Get("hopSize").As<Napi::Number>().Uint32Value();
594
+ }
595
+
596
+ std::string method = "fft"; // Default: fft
597
+ if (params.Has("method"))
598
+ {
599
+ method = params.Get("method").As<Napi::String>().Utf8Value();
600
+ }
601
+
602
+ std::string type = "real"; // Default: real
603
+ if (params.Has("type"))
604
+ {
605
+ type = params.Get("type").As<Napi::String>().Utf8Value();
606
+ }
607
+
608
+ bool forward = true; // Default: forward transform
609
+ if (params.Has("forward"))
610
+ {
611
+ forward = params.Get("forward").As<Napi::Boolean>().Value();
612
+ }
613
+
614
+ std::string output = "magnitude"; // Default: magnitude
615
+ if (params.Has("output"))
616
+ {
617
+ output = params.Get("output").As<Napi::String>().Utf8Value();
618
+ }
619
+
620
+ std::string window = "hann"; // Default: hann window
621
+ if (params.Has("window"))
622
+ {
623
+ window = params.Get("window").As<Napi::String>().Utf8Value();
624
+ }
625
+
626
+ return std::make_unique<dsp::adapters::StftStage>(
627
+ windowSize, hopSize, method, type, forward, output, window);
628
+ };
629
+
630
+ // Factory for Mel Spectrogram stage
631
+ m_stageFactories["melSpectrogram"] = [](const Napi::Object &params)
632
+ {
633
+ if (!params.Has("filterbankMatrix") || !params.Has("numBins") || !params.Has("numMelBands"))
634
+ {
635
+ throw std::invalid_argument("MelSpectrogram: requires 'filterbankMatrix', 'numBins', 'numMelBands'");
636
+ }
637
+
638
+ Napi::Float32Array filterbankArray = params.Get("filterbankMatrix").As<Napi::Float32Array>();
639
+ size_t numBins = params.Get("numBins").As<Napi::Number>().Uint32Value();
640
+ size_t numMelBands = params.Get("numMelBands").As<Napi::Number>().Uint32Value();
641
+
642
+ std::vector<float> filterbank(filterbankArray.Data(),
643
+ filterbankArray.Data() + filterbankArray.ElementLength());
644
+
645
+ return std::make_unique<dsp::adapters::MelSpectrogramStage>(
646
+ filterbank, numBins, numMelBands);
647
+ };
648
+
649
+ // Factory for MFCC stage
650
+ m_stageFactories["mfcc"] = [](const Napi::Object &params)
651
+ {
652
+ if (!params.Has("numMelBands"))
653
+ {
654
+ throw std::invalid_argument("MFCC: 'numMelBands' is required");
655
+ }
656
+
657
+ size_t numMelBands = params.Get("numMelBands").As<Napi::Number>().Uint32Value();
658
+
659
+ // Optional parameters with defaults
660
+ size_t numCoefficients = 13; // Default: 13 MFCCs
661
+ if (params.Has("numCoefficients"))
662
+ {
663
+ numCoefficients = params.Get("numCoefficients").As<Napi::Number>().Uint32Value();
664
+ }
665
+
666
+ bool useLogEnergy = true; // Default: apply log
667
+ if (params.Has("useLogEnergy"))
668
+ {
669
+ useLogEnergy = params.Get("useLogEnergy").As<Napi::Boolean>().Value();
670
+ }
671
+
672
+ float lifterCoefficient = 0.0f; // Default: no liftering
673
+ if (params.Has("lifterCoefficient"))
674
+ {
675
+ lifterCoefficient = params.Get("lifterCoefficient").As<Napi::Number>().FloatValue();
676
+ }
677
+
678
+ return std::make_unique<dsp::adapters::MfccStage>(
679
+ numMelBands, numCoefficients, useLogEnergy, lifterCoefficient);
680
+ };
681
+
577
682
  // Factory for PCA Transform stage
578
683
  m_stageFactories["pcaTransform"] = [](const Napi::Object &params)
579
684
  {
@@ -0,0 +1,211 @@
1
+ /**
2
+ * Mel Spectrogram Pipeline Stage
3
+ *
4
+ * Converts power spectrum to Mel-scale representation using filterbank matrix multiplication.
5
+ * This is a STATELESS operation that applies the Mel filterbank to incoming power spectra.
6
+ *
7
+ * Features:
8
+ * - High-performance matrix multiplication using Eigen
9
+ * - Pre-computed Mel filterbank (passed from TypeScript)
10
+ * - Processes power spectrum bins → Mel frequency bins
11
+ * - Multi-channel support (each channel processed independently)
12
+ *
13
+ * Mathematical Operation:
14
+ * mel_energies = filterbank × power_spectrum
15
+ * where:
16
+ * - power_spectrum is (numBins × 1) vector
17
+ * - filterbank is (numMelBands × numBins) matrix
18
+ * - mel_energies is (numMelBands × 1) vector
19
+ *
20
+ * Typical Pipeline:
21
+ * STFT → Power → MelSpectrogram → Log → MFCC
22
+ *
23
+ * Parameters:
24
+ * - filterbankMatrix: Pre-computed Mel filterbank (TypeScript provides this)
25
+ * - numBins: Number of input frequency bins (from STFT/FFT)
26
+ * - numMelBands: Number of Mel frequency bands (output size)
27
+ */
28
+
29
+ #pragma once
30
+
31
+ #include "../IDspStage.h"
32
+ #include <Eigen/Dense>
33
+ #include <vector>
34
+ #include <memory>
35
+ #include <stdexcept>
36
+ #include <string>
37
+ #include <cmath>
38
+
39
+ namespace dsp::adapters
40
+ {
41
+ class MelSpectrogramStage : public IDspStage
42
+ {
43
+ public:
44
+ /**
45
+ * @brief Constructs a Mel Spectrogram stage
46
+ * @param filterbank_matrix Pre-computed Mel filterbank (numMelBands × numBins), row-major
47
+ * @param num_bins Number of input frequency bins
48
+ * @param num_mel_bands Number of output Mel frequency bands
49
+ */
50
+ explicit MelSpectrogramStage(
51
+ const std::vector<float> &filterbank_matrix,
52
+ size_t num_bins,
53
+ size_t num_mel_bands)
54
+ : m_numBins(num_bins),
55
+ m_numMelBands(num_mel_bands),
56
+ m_filterbank(num_mel_bands, num_bins)
57
+ {
58
+ // Validate parameters
59
+ if (m_numBins == 0)
60
+ {
61
+ throw std::invalid_argument("MelSpectrogram: num_bins must be greater than 0");
62
+ }
63
+
64
+ if (m_numMelBands == 0)
65
+ {
66
+ throw std::invalid_argument("MelSpectrogram: num_mel_bands must be greater than 0");
67
+ }
68
+
69
+ if (filterbank_matrix.size() != num_mel_bands * num_bins)
70
+ {
71
+ throw std::invalid_argument(
72
+ "MelSpectrogram: filterbank matrix size (" +
73
+ std::to_string(filterbank_matrix.size()) +
74
+ ") must equal numMelBands × numBins (" +
75
+ std::to_string(num_mel_bands * num_bins) + ")");
76
+ }
77
+
78
+ // Copy filterbank matrix (input is row-major from TypeScript)
79
+ // Eigen uses column-major by default, so we need to specify row-major
80
+ m_filterbank = Eigen::Map<const Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
81
+ filterbank_matrix.data(), num_mel_bands, num_bins);
82
+ }
83
+
84
+ const char *getType() const override
85
+ {
86
+ return "melSpectrogram";
87
+ }
88
+
89
+ bool isResizing() const override
90
+ {
91
+ return true; // This stage changes output size
92
+ }
93
+
94
+ void process(float *buffer, size_t numSamples, int numChannels, const float *timestamps = nullptr) override
95
+ {
96
+ // This stage changes output size - processResizing() should be called instead
97
+ throw std::runtime_error("MelSpectrogram stage requires processResizing() to be called");
98
+ }
99
+
100
+ size_t calculateOutputSize(size_t inputSize) const override
101
+ {
102
+ // Input has numBins per frame, output has numMelBands per frame
103
+ // Example: 10 samples, 2 channels, numBins=5 → samplesPerChannel=5, numFrames=1
104
+ // Output: 1 frame × numMelBands × numChannels
105
+ // Since we don't know numChannels here, we need to handle it in processResizing
106
+ // For now, return based on the ratio: (numMelBands / numBins) * inputSize
107
+ return (inputSize / m_numBins) * m_numMelBands;
108
+ }
109
+
110
+ void processResizing(const float *inputBuffer, size_t inputSize,
111
+ float *outputBuffer, size_t &outputSize,
112
+ int numChannels, const float *timestamps = nullptr) override
113
+ {
114
+ // Calculate how many complete spectrum frames we have
115
+ // Each frame should be numBins samples per channel
116
+ size_t samplesPerChannel = inputSize / numChannels;
117
+ size_t numFrames = samplesPerChannel / m_numBins;
118
+
119
+ if (numFrames == 0)
120
+ {
121
+ // Not enough data for even one frame - output nothing
122
+ outputSize = 0;
123
+ return;
124
+ }
125
+
126
+ // Calculate output size
127
+ outputSize = numFrames * m_numMelBands * numChannels;
128
+
129
+ // Temporary buffers for Eigen operations
130
+ Eigen::VectorXf input(m_numBins);
131
+ Eigen::VectorXf output(m_numMelBands);
132
+
133
+ // Process each channel independently
134
+ for (int ch = 0; ch < numChannels; ++ch)
135
+ {
136
+ // Process each frame for this channel
137
+ for (size_t frame = 0; frame < numFrames; ++frame)
138
+ {
139
+ // Extract input spectrum (de-interleaved)
140
+ for (size_t i = 0; i < m_numBins; ++i)
141
+ {
142
+ size_t index = (frame * m_numBins + i) * numChannels + ch;
143
+ input(i) = inputBuffer[index];
144
+ }
145
+
146
+ // Apply Mel filterbank: mel_energies = filterbank × power_spectrum
147
+ output = m_filterbank * input;
148
+
149
+ // Write output (re-interleaved)
150
+ for (size_t i = 0; i < m_numMelBands; ++i)
151
+ {
152
+ size_t outIndex = (frame * m_numMelBands + i) * numChannels + ch;
153
+ outputBuffer[outIndex] = output(i);
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ Napi::Object serializeState(Napi::Env env) const override
160
+ {
161
+ Napi::Object state = Napi::Object::New(env);
162
+ state.Set("numBins", Napi::Number::New(env, m_numBins));
163
+ state.Set("numMelBands", Napi::Number::New(env, m_numMelBands));
164
+
165
+ // Serialize filterbank matrix (row-major)
166
+ Napi::Array filterbankArray = Napi::Array::New(env, m_numMelBands * m_numBins);
167
+ for (size_t i = 0; i < m_numMelBands; ++i)
168
+ {
169
+ for (size_t j = 0; j < m_numBins; ++j)
170
+ {
171
+ filterbankArray.Set(i * m_numBins + j, Napi::Number::New(env, m_filterbank(i, j)));
172
+ }
173
+ }
174
+ state.Set("filterbank", filterbankArray);
175
+
176
+ return state;
177
+ }
178
+
179
+ void deserializeState(const Napi::Object &state) override
180
+ {
181
+ size_t numBins = state.Get("numBins").As<Napi::Number>().Uint32Value();
182
+ size_t numMelBands = state.Get("numMelBands").As<Napi::Number>().Uint32Value();
183
+
184
+ if (numBins != m_numBins || numMelBands != m_numMelBands)
185
+ {
186
+ throw std::runtime_error("MelSpectrogram: Dimension mismatch during deserialization");
187
+ }
188
+
189
+ // Restore filterbank matrix
190
+ Napi::Array filterbankArray = state.Get("filterbank").As<Napi::Array>();
191
+ for (size_t i = 0; i < m_numMelBands; ++i)
192
+ {
193
+ for (size_t j = 0; j < m_numBins; ++j)
194
+ {
195
+ m_filterbank(i, j) = filterbankArray.Get(i * m_numBins + j).As<Napi::Number>().FloatValue();
196
+ }
197
+ }
198
+ }
199
+
200
+ void reset() override
201
+ {
202
+ // Stateless - no reset needed
203
+ }
204
+
205
+ private:
206
+ size_t m_numBins; // Number of input frequency bins
207
+ size_t m_numMelBands; // Number of output Mel bands
208
+ Eigen::MatrixXf m_filterbank; // Mel filterbank matrix (numMelBands × numBins)
209
+ };
210
+
211
+ } // namespace dsp::adapters