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.
- package/CHANGELOG.md +6 -0
- package/dst/speechflow-node-a2a-gender.d.ts +2 -0
- package/dst/speechflow-node-a2a-gender.js +137 -59
- package/dst/speechflow-node-a2a-gender.js.map +1 -1
- package/dst/speechflow-node-a2a-meter.d.ts +3 -1
- package/dst/speechflow-node-a2a-meter.js +80 -39
- package/dst/speechflow-node-a2a-meter.js.map +1 -1
- package/dst/speechflow-node-a2a-mute.d.ts +1 -0
- package/dst/speechflow-node-a2a-mute.js +37 -11
- package/dst/speechflow-node-a2a-mute.js.map +1 -1
- package/dst/speechflow-node-a2a-vad.d.ts +3 -0
- package/dst/speechflow-node-a2a-vad.js +194 -96
- package/dst/speechflow-node-a2a-vad.js.map +1 -1
- package/dst/speechflow-node-a2a-wav.js +27 -11
- package/dst/speechflow-node-a2a-wav.js.map +1 -1
- package/dst/speechflow-node-a2t-deepgram.d.ts +4 -0
- package/dst/speechflow-node-a2t-deepgram.js +136 -46
- package/dst/speechflow-node-a2t-deepgram.js.map +1 -1
- package/dst/speechflow-node-t2a-elevenlabs.d.ts +2 -0
- package/dst/speechflow-node-t2a-elevenlabs.js +61 -12
- package/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
- package/dst/speechflow-node-t2a-kokoro.d.ts +1 -0
- package/dst/speechflow-node-t2a-kokoro.js +10 -4
- package/dst/speechflow-node-t2a-kokoro.js.map +1 -1
- package/dst/speechflow-node-t2t-deepl.js +8 -4
- package/dst/speechflow-node-t2t-deepl.js.map +1 -1
- package/dst/speechflow-node-t2t-format.js +2 -2
- package/dst/speechflow-node-t2t-format.js.map +1 -1
- package/dst/speechflow-node-t2t-ollama.js +1 -1
- package/dst/speechflow-node-t2t-ollama.js.map +1 -1
- package/dst/speechflow-node-t2t-openai.js +1 -1
- package/dst/speechflow-node-t2t-openai.js.map +1 -1
- package/dst/speechflow-node-t2t-sentence.d.ts +1 -1
- package/dst/speechflow-node-t2t-sentence.js +34 -18
- package/dst/speechflow-node-t2t-sentence.js.map +1 -1
- package/dst/speechflow-node-t2t-subtitle.d.ts +0 -1
- package/dst/speechflow-node-t2t-subtitle.js +78 -190
- package/dst/speechflow-node-t2t-subtitle.js.map +1 -1
- package/dst/speechflow-node-t2t-transformers.js +2 -2
- package/dst/speechflow-node-t2t-transformers.js.map +1 -1
- package/dst/speechflow-node-x2x-filter.js +4 -4
- package/dst/speechflow-node-x2x-trace.js +6 -13
- package/dst/speechflow-node-x2x-trace.js.map +1 -1
- package/dst/speechflow-node-xio-device.js +12 -8
- package/dst/speechflow-node-xio-device.js.map +1 -1
- package/dst/speechflow-node-xio-file.js +9 -3
- package/dst/speechflow-node-xio-file.js.map +1 -1
- package/dst/speechflow-node-xio-mqtt.js +5 -2
- package/dst/speechflow-node-xio-mqtt.js.map +1 -1
- package/dst/speechflow-node-xio-websocket.js +11 -11
- package/dst/speechflow-node-xio-websocket.js.map +1 -1
- package/dst/speechflow-node.d.ts +0 -2
- package/dst/speechflow-node.js +0 -3
- package/dst/speechflow-node.js.map +1 -1
- package/dst/speechflow-utils.d.ts +5 -0
- package/dst/speechflow-utils.js +77 -44
- package/dst/speechflow-utils.js.map +1 -1
- package/dst/speechflow.js +101 -82
- package/dst/speechflow.js.map +1 -1
- package/etc/eslint.mjs +1 -2
- package/etc/stx.conf +3 -3
- package/package.json +6 -6
- package/src/speechflow-node-a2a-gender.ts +148 -64
- package/src/speechflow-node-a2a-meter.ts +87 -40
- package/src/speechflow-node-a2a-mute.ts +39 -11
- package/src/speechflow-node-a2a-vad.ts +206 -100
- package/src/speechflow-node-a2a-wav.ts +27 -11
- package/src/speechflow-node-a2t-deepgram.ts +139 -43
- package/src/speechflow-node-t2a-elevenlabs.ts +65 -12
- package/src/speechflow-node-t2a-kokoro.ts +11 -4
- package/src/speechflow-node-t2t-deepl.ts +9 -4
- package/src/speechflow-node-t2t-format.ts +2 -2
- package/src/speechflow-node-t2t-ollama.ts +1 -1
- package/src/speechflow-node-t2t-openai.ts +1 -1
- package/src/speechflow-node-t2t-sentence.ts +37 -20
- package/src/speechflow-node-t2t-transformers.ts +4 -3
- package/src/speechflow-node-x2x-filter.ts +4 -4
- package/src/speechflow-node-x2x-trace.ts +1 -1
- package/src/speechflow-node-xio-device.ts +12 -8
- package/src/speechflow-node-xio-file.ts +9 -3
- package/src/speechflow-node-xio-mqtt.ts +5 -2
- package/src/speechflow-node-xio-websocket.ts +12 -12
- package/src/speechflow-utils.ts +78 -44
- package/src/speechflow.ts +114 -35
package/CHANGELOG.md
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
120
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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.
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
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 (
|
|
174
|
-
|
|
175
|
-
|
|
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
|
-
|
|
181
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
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
|
-
/*
|
|
330
|
+
/* cleanup classifier */
|
|
264
331
|
if (this.classifier !== null) {
|
|
265
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
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
|
-
/*
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
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":";AAAA;;;;EAIE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEF,6BAA6B;AAC7B,8DAAgC;AAEhC,6BAA6B;AAC7B,iDAA0D;AAE1D,6BAA6B;AAC7B,wEAAmE;AACnE,0DAAoE;AAEpE,0CAA0C;AAC1C,MAAqB,mBAAoB,SAAQ,yBAAc;IAC3D,kCAAkC;IAC3B,MAAM,CAAC,IAAI,GAAG,OAAO,CAAA;IAE5B,sBAAsB;
|
|
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: {
|