speechflow 1.3.1 → 1.3.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.
Files changed (84) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dst/speechflow-node-a2a-gender.d.ts +2 -0
  3. package/dst/speechflow-node-a2a-gender.js +137 -59
  4. package/dst/speechflow-node-a2a-gender.js.map +1 -1
  5. package/dst/speechflow-node-a2a-meter.d.ts +3 -1
  6. package/dst/speechflow-node-a2a-meter.js +80 -39
  7. package/dst/speechflow-node-a2a-meter.js.map +1 -1
  8. package/dst/speechflow-node-a2a-mute.d.ts +1 -0
  9. package/dst/speechflow-node-a2a-mute.js +37 -11
  10. package/dst/speechflow-node-a2a-mute.js.map +1 -1
  11. package/dst/speechflow-node-a2a-vad.d.ts +3 -0
  12. package/dst/speechflow-node-a2a-vad.js +194 -96
  13. package/dst/speechflow-node-a2a-vad.js.map +1 -1
  14. package/dst/speechflow-node-a2a-wav.js +27 -11
  15. package/dst/speechflow-node-a2a-wav.js.map +1 -1
  16. package/dst/speechflow-node-a2t-deepgram.d.ts +4 -0
  17. package/dst/speechflow-node-a2t-deepgram.js +136 -46
  18. package/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  19. package/dst/speechflow-node-t2a-elevenlabs.d.ts +2 -0
  20. package/dst/speechflow-node-t2a-elevenlabs.js +61 -12
  21. package/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  22. package/dst/speechflow-node-t2a-kokoro.d.ts +1 -0
  23. package/dst/speechflow-node-t2a-kokoro.js +10 -4
  24. package/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  25. package/dst/speechflow-node-t2t-deepl.js +8 -4
  26. package/dst/speechflow-node-t2t-deepl.js.map +1 -1
  27. package/dst/speechflow-node-t2t-format.js +2 -2
  28. package/dst/speechflow-node-t2t-format.js.map +1 -1
  29. package/dst/speechflow-node-t2t-ollama.js +1 -1
  30. package/dst/speechflow-node-t2t-ollama.js.map +1 -1
  31. package/dst/speechflow-node-t2t-openai.js +1 -1
  32. package/dst/speechflow-node-t2t-openai.js.map +1 -1
  33. package/dst/speechflow-node-t2t-sentence.d.ts +1 -1
  34. package/dst/speechflow-node-t2t-sentence.js +34 -18
  35. package/dst/speechflow-node-t2t-sentence.js.map +1 -1
  36. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -1
  37. package/dst/speechflow-node-t2t-subtitle.js +78 -190
  38. package/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  39. package/dst/speechflow-node-t2t-transformers.js +2 -2
  40. package/dst/speechflow-node-t2t-transformers.js.map +1 -1
  41. package/dst/speechflow-node-x2x-filter.js +4 -4
  42. package/dst/speechflow-node-x2x-trace.js +6 -13
  43. package/dst/speechflow-node-x2x-trace.js.map +1 -1
  44. package/dst/speechflow-node-xio-device.js +12 -8
  45. package/dst/speechflow-node-xio-device.js.map +1 -1
  46. package/dst/speechflow-node-xio-file.js +9 -3
  47. package/dst/speechflow-node-xio-file.js.map +1 -1
  48. package/dst/speechflow-node-xio-mqtt.js +5 -2
  49. package/dst/speechflow-node-xio-mqtt.js.map +1 -1
  50. package/dst/speechflow-node-xio-websocket.js +11 -11
  51. package/dst/speechflow-node-xio-websocket.js.map +1 -1
  52. package/dst/speechflow-node.d.ts +0 -2
  53. package/dst/speechflow-node.js +0 -3
  54. package/dst/speechflow-node.js.map +1 -1
  55. package/dst/speechflow-utils.d.ts +5 -0
  56. package/dst/speechflow-utils.js +77 -44
  57. package/dst/speechflow-utils.js.map +1 -1
  58. package/dst/speechflow.js +101 -82
  59. package/dst/speechflow.js.map +1 -1
  60. package/etc/eslint.mjs +1 -2
  61. package/etc/stx.conf +3 -3
  62. package/package.json +6 -6
  63. package/src/speechflow-node-a2a-gender.ts +148 -64
  64. package/src/speechflow-node-a2a-meter.ts +87 -40
  65. package/src/speechflow-node-a2a-mute.ts +39 -11
  66. package/src/speechflow-node-a2a-vad.ts +206 -100
  67. package/src/speechflow-node-a2a-wav.ts +27 -11
  68. package/src/speechflow-node-a2t-deepgram.ts +139 -43
  69. package/src/speechflow-node-t2a-elevenlabs.ts +65 -12
  70. package/src/speechflow-node-t2a-kokoro.ts +11 -4
  71. package/src/speechflow-node-t2t-deepl.ts +9 -4
  72. package/src/speechflow-node-t2t-format.ts +2 -2
  73. package/src/speechflow-node-t2t-ollama.ts +1 -1
  74. package/src/speechflow-node-t2t-openai.ts +1 -1
  75. package/src/speechflow-node-t2t-sentence.ts +37 -20
  76. package/src/speechflow-node-t2t-transformers.ts +4 -3
  77. package/src/speechflow-node-x2x-filter.ts +4 -4
  78. package/src/speechflow-node-x2x-trace.ts +1 -1
  79. package/src/speechflow-node-xio-device.ts +12 -8
  80. package/src/speechflow-node-xio-file.ts +9 -3
  81. package/src/speechflow-node-xio-mqtt.ts +5 -2
  82. package/src/speechflow-node-xio-websocket.ts +12 -12
  83. package/src/speechflow-utils.ts +78 -44
  84. package/src/speechflow.ts +114 -35
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
  ChangeLog
3
3
  =========
4
4
 
5
+ 1.3.2 (2025-08-04)
6
+ ------------------
7
+
8
+ - BUGFIX: many timeout handling fixes in many nodes
9
+ - CLEANUP: many code cleanups
10
+
5
11
  1.3.1 (2025-07-31)
6
12
  ------------------
7
13
 
@@ -8,6 +8,8 @@ export default class SpeechFlowNodeGender extends SpeechFlowNode {
8
8
  private queueAC;
9
9
  private queueSend;
10
10
  private shutdown;
11
+ private workingOffTimer;
12
+ private progressInterval;
11
13
  constructor(id: string, cfg: {
12
14
  [id: string]: any;
13
15
  }, opts: {
@@ -62,6 +62,8 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
62
62
  queueAC = this.queue.pointerUse("ac");
63
63
  queueSend = this.queue.pointerUse("send");
64
64
  shutdown = false;
65
+ workingOffTimer = null;
66
+ progressInterval = null;
65
67
  /* construct node */
66
68
  constructor(id, cfg, opts, args) {
67
69
  super(id, cfg, opts, args);
@@ -78,6 +80,8 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
78
80
  /* sanity check situation */
79
81
  if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
80
82
  throw new Error("Gender node currently supports PCM-S16LE audio only");
83
+ /* clear shutdown flag */
84
+ this.shutdown = false;
81
85
  /* pass-through logging */
82
86
  const log = (level, msg) => { this.log(level, msg); };
83
87
  /* the used model */
@@ -85,6 +89,8 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
85
89
  /* track download progress when instantiating Transformers engine and model */
86
90
  const progressState = new Map();
87
91
  const progressCallback = (progress) => {
92
+ if (this.shutdown)
93
+ return;
88
94
  let artifact = model;
89
95
  if (typeof progress.file === "string")
90
96
  artifact += `:${progress.file}`;
@@ -96,28 +102,50 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
96
102
  if (percent > 0)
97
103
  progressState.set(artifact, percent);
98
104
  };
99
- const interval = setInterval(() => {
105
+ this.progressInterval = setInterval(() => {
106
+ if (this.shutdown)
107
+ return;
100
108
  for (const [artifact, percent] of progressState) {
101
109
  this.log("info", `downloaded ${percent.toFixed(2)}% of artifact "${artifact}"`);
102
110
  if (percent >= 1.0)
103
111
  progressState.delete(artifact);
104
112
  }
105
113
  }, 1000);
106
- /* instantiate Transformers engine and model */
107
- const pipeline = Transformers.pipeline("audio-classification", model, {
108
- cache_dir: node_path_1.default.join(this.config.cacheDir, "gender"),
109
- dtype: "q4",
110
- device: "auto",
111
- progress_callback: progressCallback
112
- });
113
- this.classifier = await pipeline;
114
- clearInterval(interval);
114
+ try {
115
+ const pipelinePromise = Transformers.pipeline("audio-classification", model, {
116
+ cache_dir: node_path_1.default.join(this.config.cacheDir, "gender"),
117
+ dtype: "q4",
118
+ device: "auto",
119
+ progress_callback: progressCallback
120
+ });
121
+ const timeoutPromise = new Promise((resolve, reject) => setTimeout(() => reject(new Error("model initialization timeout")), 30 * 1000));
122
+ this.classifier = await Promise.race([
123
+ pipelinePromise, timeoutPromise
124
+ ]);
125
+ }
126
+ catch (error) {
127
+ if (this.progressInterval) {
128
+ clearInterval(this.progressInterval);
129
+ this.progressInterval = null;
130
+ }
131
+ throw new Error(`failed to initialize classifier pipeline: ${error}`);
132
+ }
133
+ if (this.progressInterval) {
134
+ clearInterval(this.progressInterval);
135
+ this.progressInterval = null;
136
+ }
115
137
  if (this.classifier === null)
116
138
  throw new Error("failed to instantiate classifier pipeline");
117
139
  /* classify a single large-enough concatenated audio frame */
118
140
  const classify = async (data) => {
119
- const result = await this.classifier(data);
120
- const classified = Array.isArray(result) ? result : [result];
141
+ if (this.shutdown || this.classifier === null)
142
+ throw new Error("classifier shutdown during operation");
143
+ const classifyPromise = this.classifier(data);
144
+ const timeoutPromise = new Promise((resolve, reject) => setTimeout(() => reject(new Error("classification timeout")), 30 * 1000));
145
+ const result = await Promise.race([classifyPromise, timeoutPromise]);
146
+ const classified = Array.isArray(result) ?
147
+ result :
148
+ [result];
121
149
  const c1 = classified.find((c) => c.label === "male");
122
150
  const c2 = classified.find((c) => c.label === "female");
123
151
  const male = c1 ? c1.score : 0.0;
@@ -130,55 +158,63 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
130
158
  const frameWindowDuration = 0.5;
131
159
  const frameWindowSamples = frameWindowDuration * sampleRateTarget;
132
160
  let lastGender = "";
133
- let workingOffTimer = null;
134
161
  let workingOff = false;
135
162
  const workOffQueue = async () => {
136
163
  /* control working off round */
137
164
  if (workingOff || this.shutdown)
138
165
  return;
139
166
  workingOff = true;
140
- if (workingOffTimer !== null) {
141
- clearTimeout(workingOffTimer);
142
- workingOffTimer = null;
167
+ if (this.workingOffTimer !== null) {
168
+ clearTimeout(this.workingOffTimer);
169
+ this.workingOffTimer = null;
143
170
  }
144
171
  this.queue.off("write", workOffQueue);
145
- let pos0 = this.queueAC.position();
146
- const posL = this.queueAC.maxPosition();
147
- const data = new Float32Array(frameWindowSamples);
148
- data.fill(0);
149
- let samples = 0;
150
- let pos = pos0;
151
- while (pos < posL && samples < frameWindowSamples) {
152
- const element = this.queueAC.peek(pos);
153
- if (element === undefined || element.type !== "audio-frame")
154
- break;
155
- if ((samples + element.data.length) < frameWindowSamples) {
156
- data.set(element.data, samples);
157
- samples += element.data.length;
158
- }
159
- pos++;
160
- }
161
- if (pos0 < pos && samples > frameWindowSamples * 0.75) {
162
- const gender = await classify(data);
163
- const posM = pos0 + Math.trunc((pos - pos0) * 0.25);
164
- while (pos0 < posM && pos0 < posL) {
165
- const element = this.queueAC.peek(pos0);
172
+ try {
173
+ let pos0 = this.queueAC.position();
174
+ const posL = this.queueAC.maxPosition();
175
+ const data = new Float32Array(frameWindowSamples);
176
+ data.fill(0);
177
+ let samples = 0;
178
+ let pos = pos0;
179
+ while (pos < posL && samples < frameWindowSamples && !this.shutdown) {
180
+ const element = this.queueAC.peek(pos);
166
181
  if (element === undefined || element.type !== "audio-frame")
167
182
  break;
168
- element.gender = gender;
169
- this.queueAC.touch();
170
- this.queueAC.walk(+1);
171
- pos0++;
183
+ if ((samples + element.data.length) < frameWindowSamples) {
184
+ data.set(element.data, samples);
185
+ samples += element.data.length;
186
+ }
187
+ pos++;
172
188
  }
173
- if (lastGender !== gender) {
174
- log("info", `gender now recognized as <${gender}>`);
175
- lastGender = gender;
189
+ if (pos0 < pos && samples > frameWindowSamples * 0.75 && !this.shutdown) {
190
+ const gender = await classify(data);
191
+ if (this.shutdown)
192
+ return;
193
+ const posM = pos0 + Math.trunc((pos - pos0) * 0.25);
194
+ while (pos0 < posM && pos0 < posL && !this.shutdown) {
195
+ const element = this.queueAC.peek(pos0);
196
+ if (element === undefined || element.type !== "audio-frame")
197
+ break;
198
+ element.gender = gender;
199
+ this.queueAC.touch();
200
+ this.queueAC.walk(+1);
201
+ pos0++;
202
+ }
203
+ if (lastGender !== gender && !this.shutdown) {
204
+ log("info", `gender now recognized as <${gender}>`);
205
+ lastGender = gender;
206
+ }
176
207
  }
177
208
  }
209
+ catch (error) {
210
+ log("error", `gender classification error: ${error}`);
211
+ }
178
212
  /* re-initiate working off round */
179
213
  workingOff = false;
180
- workingOffTimer = setTimeout(workOffQueue, 100);
181
- this.queue.once("write", workOffQueue);
214
+ if (!this.shutdown) {
215
+ this.workingOffTimer = setTimeout(workOffQueue, 100);
216
+ this.queue.once("write", workOffQueue);
217
+ }
182
218
  };
183
219
  this.queue.once("write", workOffQueue);
184
220
  /* provide Duplex stream and internally attach to classifier */
@@ -190,24 +226,37 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
190
226
  highWaterMark: 1,
191
227
  /* receive audio chunk (writable side of stream) */
192
228
  write(chunk, encoding, callback) {
229
+ if (self.shutdown) {
230
+ callback(new Error("stream already destroyed"));
231
+ return;
232
+ }
193
233
  if (!Buffer.isBuffer(chunk.payload))
194
234
  callback(new Error("expected audio input as Buffer chunks"));
195
235
  else if (chunk.payload.byteLength === 0)
196
236
  callback();
197
237
  else {
198
- /* convert audio samples from PCM/I16/48KHz to PCM/F32/16KHz */
199
- let data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
200
- const wav = new wavefile_1.WaveFile();
201
- wav.fromScratch(self.config.audioChannels, self.config.audioSampleRate, "32f", data);
202
- wav.toSampleRate(sampleRateTarget, { method: "cubic" });
203
- data = wav.getSamples(false, (Float32Array));
204
- /* queue chunk and converted data */
205
- self.queueRecv.append({ type: "audio-frame", chunk, data });
206
- callback();
238
+ try {
239
+ /* convert audio samples from PCM/I16/48KHz to PCM/F32/16KHz */
240
+ let data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
241
+ const wav = new wavefile_1.WaveFile();
242
+ wav.fromScratch(self.config.audioChannels, self.config.audioSampleRate, "32f", data);
243
+ wav.toSampleRate(sampleRateTarget, { method: "cubic" });
244
+ data = wav.getSamples(false, (Float32Array));
245
+ /* queue chunk and converted data */
246
+ self.queueRecv.append({ type: "audio-frame", chunk, data });
247
+ callback();
248
+ }
249
+ catch (error) {
250
+ callback(error instanceof Error ? error : new Error("audio processing failed"));
251
+ }
207
252
  }
208
253
  },
209
254
  /* receive no more audio chunks (writable side of stream) */
210
255
  final(callback) {
256
+ if (self.shutdown) {
257
+ callback();
258
+ return;
259
+ }
211
260
  /* signal end of file */
212
261
  self.queueRecv.append({ type: "audio-eof" });
213
262
  callback();
@@ -216,8 +265,10 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
216
265
  read(_size) {
217
266
  /* flush pending audio chunks */
218
267
  const flushPendingChunks = () => {
219
- if (self.shutdown)
268
+ if (self.shutdown) {
269
+ this.push(null);
220
270
  return;
271
+ }
221
272
  const element = self.queueSend.peek();
222
273
  if (element !== undefined
223
274
  && element.type === "audio-eof")
@@ -226,6 +277,10 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
226
277
  && element.type === "audio-frame"
227
278
  && element.gender !== undefined) {
228
279
  while (true) {
280
+ if (self.shutdown) {
281
+ this.push(null);
282
+ return;
283
+ }
229
284
  const element = self.queueSend.peek();
230
285
  if (element === undefined)
231
286
  break;
@@ -244,7 +299,7 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
244
299
  self.queue.trim();
245
300
  }
246
301
  }
247
- else
302
+ else if (!self.shutdown)
248
303
  self.queue.once("write", flushPendingChunks);
249
304
  };
250
305
  flushPendingChunks();
@@ -255,16 +310,39 @@ class SpeechFlowNodeGender extends speechflow_node_1.default {
255
310
  async close() {
256
311
  /* indicate shutdown */
257
312
  this.shutdown = true;
313
+ /* cleanup working-off timer */
314
+ if (this.workingOffTimer !== null) {
315
+ clearTimeout(this.workingOffTimer);
316
+ this.workingOffTimer = null;
317
+ }
318
+ /* cleanup progress interval */
319
+ if (this.progressInterval !== null) {
320
+ clearInterval(this.progressInterval);
321
+ this.progressInterval = null;
322
+ }
323
+ /* remove all event listeners */
324
+ this.queue.removeAllListeners("write");
258
325
  /* close stream */
259
326
  if (this.stream !== null) {
260
327
  this.stream.destroy();
261
328
  this.stream = null;
262
329
  }
263
- /* close classifier */
330
+ /* cleanup classifier */
264
331
  if (this.classifier !== null) {
265
- this.classifier.dispose();
332
+ try {
333
+ const disposePromise = this.classifier.dispose();
334
+ const timeoutPromise = new Promise((resolve) => setTimeout(resolve, 5000));
335
+ await Promise.race([disposePromise, timeoutPromise]);
336
+ }
337
+ catch (error) {
338
+ this.log("warning", `error during classifier cleanup: ${error}`);
339
+ }
266
340
  this.classifier = null;
267
341
  }
342
+ /* cleanup queue pointers */
343
+ this.queue.pointerDelete("recv");
344
+ this.queue.pointerDelete("ac");
345
+ this.queue.pointerDelete("send");
268
346
  }
269
347
  }
270
348
  exports.default = SpeechFlowNodeGender;
@@ -1 +1 @@
1
- {"version":3,"file":"speechflow-node-a2a-gender.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-gender.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speechflow-node-a2a-gender.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-gender.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import SpeechFlowNode from "./speechflow-node";
2
2
  export default class SpeechFlowNodeMeter extends SpeechFlowNode {
3
3
  static name: string;
4
- interval: ReturnType<typeof setInterval> | null;
4
+ private interval;
5
+ private destroyed;
6
+ private pendingCalculations;
5
7
  constructor(id: string, cfg: {
6
8
  [id: string]: any;
7
9
  }, opts: {
@@ -54,13 +54,14 @@ class SpeechFlowNodeMeter extends speechflow_node_1.default {
54
54
  static name = "meter";
55
55
  /* internal state */
56
56
  interval = null;
57
+ destroyed = false;
58
+ pendingCalculations = new Set();
57
59
  /* construct node */
58
60
  constructor(id, cfg, opts, args) {
59
61
  super(id, cfg, opts, args);
60
62
  /* declare node configuration parameters */
61
63
  this.configure({
62
- interval: { type: "number", pos: 0, val: 250 },
63
- dashboard: { type: "string", val: "" }
64
+ interval: { type: "number", pos: 0, val: 250 }
64
65
  });
65
66
  /* declare node input/output format */
66
67
  this.input = "audio";
@@ -71,6 +72,8 @@ class SpeechFlowNodeMeter extends speechflow_node_1.default {
71
72
  /* sanity check situation */
72
73
  if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
73
74
  throw new Error("meter node currently supports PCM-S16LE audio only");
75
+ /* clear destruction flag */
76
+ this.destroyed = false;
74
77
  /* internal state */
75
78
  const sampleWindowDuration = 3; /* LUFS-S requires 3s */
76
79
  const sampleWindowSize = this.config.audioSampleRate * sampleWindowDuration;
@@ -80,13 +83,13 @@ class SpeechFlowNodeMeter extends speechflow_node_1.default {
80
83
  let rms = 0;
81
84
  /* setup loudness emitting interval */
82
85
  this.interval = setInterval(() => {
86
+ if (this.destroyed)
87
+ return;
83
88
  this.log("debug", `LUFS-S: ${lufss.toFixed(1)} dB, RMS: ${rms.toFixed(1)} dB`);
84
89
  this.sendResponse(["meter", "LUFS-S", lufss]);
85
90
  this.sendResponse(["meter", "RMS", rms]);
86
- if (this.params.dashboard !== "")
87
- this.dashboardInfo("audio", this.params.dashboard, "final", lufss);
88
91
  }, this.params.interval);
89
- /* provide Duplex stream and internally attach to VAD */
92
+ /* provide Duplex stream and internally attach to meter */
90
93
  const self = this;
91
94
  this.stream = new node_stream_1.default.Transform({
92
95
  writableObjectMode: true,
@@ -95,43 +98,75 @@ class SpeechFlowNodeMeter extends speechflow_node_1.default {
95
98
  highWaterMark: 1,
96
99
  /* transform audio chunk */
97
100
  transform(chunk, encoding, callback) {
101
+ if (self.destroyed) {
102
+ callback(new Error("stream already destroyed"));
103
+ return;
104
+ }
98
105
  if (!Buffer.isBuffer(chunk.payload))
99
106
  callback(new Error("expected audio input as Buffer chunks"));
100
107
  else if (chunk.payload.byteLength === 0)
101
108
  callback();
102
109
  else {
103
- /* convert audio samples from PCM/I16 to PCM/F32 */
104
- const data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
105
- /* update internal audio sample sliding window */
106
- const fusion = new Float32Array(sampleWindow.length + data.length);
107
- fusion.set(sampleWindow, 0);
108
- fusion.set(data, sampleWindow.length);
109
- sampleWindow = fusion.slice(fusion.length - sampleWindowSize);
110
- /* asynchronously calculate the LUFS-S metric */
111
- setTimeout(() => {
112
- const audioData = {
113
- sampleRate: self.config.audioSampleRate,
114
- numberOfChannels: self.config.audioChannels,
115
- channelData: [sampleWindow],
116
- duration: sampleWindowDuration,
117
- length: sampleWindow.length
118
- };
119
- const lufs = (0, audio_inspect_1.getLUFS)(audioData, {
120
- channelMode: self.config.audioChannels === 1 ? "mono" : "stereo",
121
- calculateShortTerm: true,
122
- calculateMomentary: false,
123
- calculateLoudnessRange: false,
124
- calculateTruePeak: false
125
- });
126
- lufss = lufs.shortTerm ? lufs.shortTerm[0] : 0;
127
- rms = (0, audio_inspect_1.getRMS)(audioData, { asDB: true });
128
- }, 0);
129
- /* pass-through original audio chunk */
130
- this.push(chunk);
131
- callback();
110
+ try {
111
+ /* convert audio samples from PCM/I16 to PCM/F32 */
112
+ const data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
113
+ /* update internal audio sample sliding window */
114
+ if (data.length >= sampleWindowSize)
115
+ /* new data is larger than window, so just use the tail */
116
+ sampleWindow = data.slice(data.length - sampleWindowSize);
117
+ else {
118
+ /* shift existing data and append new data */
119
+ const newWindow = new Float32Array(sampleWindowSize);
120
+ const keepSize = sampleWindowSize - data.length;
121
+ newWindow.set(sampleWindow.slice(sampleWindow.length - keepSize), 0);
122
+ newWindow.set(data, keepSize);
123
+ sampleWindow = newWindow;
124
+ }
125
+ /* asynchronously calculate the LUFS-S metric */
126
+ const calculator = setTimeout(() => {
127
+ if (self.destroyed)
128
+ return;
129
+ try {
130
+ self.pendingCalculations.delete(calculator);
131
+ const audioData = {
132
+ sampleRate: self.config.audioSampleRate,
133
+ numberOfChannels: self.config.audioChannels,
134
+ channelData: [sampleWindow],
135
+ duration: sampleWindowDuration,
136
+ length: sampleWindow.length
137
+ };
138
+ const lufs = (0, audio_inspect_1.getLUFS)(audioData, {
139
+ channelMode: self.config.audioChannels === 1 ? "mono" : "stereo",
140
+ calculateShortTerm: true,
141
+ calculateMomentary: false,
142
+ calculateLoudnessRange: false,
143
+ calculateTruePeak: false
144
+ });
145
+ if (!self.destroyed) {
146
+ lufss = lufs.shortTerm ? lufs.shortTerm[0] : 0;
147
+ rms = (0, audio_inspect_1.getRMS)(audioData, { asDB: true });
148
+ }
149
+ }
150
+ catch (error) {
151
+ if (!self.destroyed)
152
+ self.log("warning", `meter calculation error: ${error}`);
153
+ }
154
+ }, 0);
155
+ self.pendingCalculations.add(calculator);
156
+ /* pass-through original audio chunk */
157
+ this.push(chunk);
158
+ callback();
159
+ }
160
+ catch (error) {
161
+ callback(error instanceof Error ? error : new Error("Meter processing failed"));
162
+ }
132
163
  }
133
164
  },
134
165
  final(callback) {
166
+ if (self.destroyed) {
167
+ callback();
168
+ return;
169
+ }
135
170
  this.push(null);
136
171
  callback();
137
172
  }
@@ -139,16 +174,22 @@ class SpeechFlowNodeMeter extends speechflow_node_1.default {
139
174
  }
140
175
  /* close node */
141
176
  async close() {
142
- /* close stream */
143
- if (this.stream !== null) {
144
- this.stream.destroy();
145
- this.stream = null;
146
- }
177
+ /* indicate destruction */
178
+ this.destroyed = true;
179
+ /* clear all pending calculations */
180
+ for (const timeout of this.pendingCalculations)
181
+ clearTimeout(timeout);
182
+ this.pendingCalculations.clear();
147
183
  /* stop interval */
148
184
  if (this.interval !== null) {
149
185
  clearInterval(this.interval);
150
186
  this.interval = null;
151
187
  }
188
+ /* close stream */
189
+ if (this.stream !== null) {
190
+ this.stream.destroy();
191
+ this.stream = null;
192
+ }
152
193
  }
153
194
  }
154
195
  exports.default = SpeechFlowNodeMeter;
@@ -1 +1 @@
1
- {"version":3,"file":"speechflow-node-a2a-meter.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-meter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speechflow-node-a2a-meter.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-meter.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ type MuteMode = "none" | /* not muted */ "silenced" | /* muted by changing au
3
3
  export default class SpeechFlowNodeMute extends SpeechFlowNode {
4
4
  static name: string;
5
5
  private muteMode;
6
+ private destroyed;
6
7
  constructor(id: string, cfg: {
7
8
  [id: string]: any;
8
9
  }, opts: {