speechflow 1.3.2 → 1.4.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.
Files changed (154) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/etc/stx.conf +54 -58
  3. package/package.json +25 -106
  4. package/speechflow-cli/etc/stx.conf +77 -0
  5. package/speechflow-cli/package.json +116 -0
  6. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +217 -0
  7. package/{src → speechflow-cli/src}/speechflow-node-a2a-vad.ts +14 -21
  8. package/{src → speechflow-cli/src}/speechflow-node-a2t-deepgram.ts +21 -38
  9. package/{src → speechflow-cli/src}/speechflow-node-t2a-elevenlabs.ts +10 -16
  10. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +276 -0
  11. package/{src → speechflow-cli/src}/speechflow-node-x2x-filter.ts +5 -1
  12. package/{src → speechflow-cli/src}/speechflow-node-x2x-trace.ts +15 -7
  13. package/{src → speechflow-cli/src}/speechflow-node.ts +7 -0
  14. package/{src → speechflow-cli/src}/speechflow.ts +81 -25
  15. package/speechflow-ui-db/etc/eslint.mjs +106 -0
  16. package/speechflow-ui-db/etc/htmllint.json +55 -0
  17. package/speechflow-ui-db/etc/stx.conf +79 -0
  18. package/speechflow-ui-db/etc/stylelint.js +46 -0
  19. package/speechflow-ui-db/etc/stylelint.yaml +33 -0
  20. package/speechflow-ui-db/etc/tsc-client.json +30 -0
  21. package/speechflow-ui-db/etc/tsc.node.json +9 -0
  22. package/speechflow-ui-db/etc/vite-client.mts +63 -0
  23. package/speechflow-ui-db/package.d/htmllint-cli+0.0.7.patch +20 -0
  24. package/speechflow-ui-db/package.json +75 -0
  25. package/speechflow-ui-db/src/app-icon.ai +1989 -4
  26. package/speechflow-ui-db/src/app-icon.svg +26 -0
  27. package/speechflow-ui-db/src/app.styl +64 -0
  28. package/speechflow-ui-db/src/app.vue +221 -0
  29. package/speechflow-ui-db/src/index.html +23 -0
  30. package/speechflow-ui-db/src/index.ts +26 -0
  31. package/{dst/speechflow.d.ts → speechflow-ui-db/src/lib.d.ts} +5 -3
  32. package/speechflow-ui-db/src/tsconfig.json +3 -0
  33. package/speechflow-ui-st/etc/eslint.mjs +106 -0
  34. package/speechflow-ui-st/etc/htmllint.json +55 -0
  35. package/speechflow-ui-st/etc/stx.conf +79 -0
  36. package/speechflow-ui-st/etc/stylelint.js +46 -0
  37. package/speechflow-ui-st/etc/stylelint.yaml +33 -0
  38. package/speechflow-ui-st/etc/tsc-client.json +30 -0
  39. package/speechflow-ui-st/etc/tsc.node.json +9 -0
  40. package/speechflow-ui-st/etc/vite-client.mts +63 -0
  41. package/speechflow-ui-st/package.d/htmllint-cli+0.0.7.patch +20 -0
  42. package/speechflow-ui-st/package.json +79 -0
  43. package/speechflow-ui-st/src/app-icon.ai +1989 -4
  44. package/speechflow-ui-st/src/app-icon.svg +26 -0
  45. package/speechflow-ui-st/src/app.styl +64 -0
  46. package/speechflow-ui-st/src/app.vue +142 -0
  47. package/speechflow-ui-st/src/index.html +23 -0
  48. package/speechflow-ui-st/src/index.ts +26 -0
  49. package/speechflow-ui-st/src/lib.d.ts +9 -0
  50. package/speechflow-ui-st/src/tsconfig.json +3 -0
  51. package/dst/speechflow-node-a2a-ffmpeg.d.ts +0 -13
  52. package/dst/speechflow-node-a2a-ffmpeg.js +0 -153
  53. package/dst/speechflow-node-a2a-ffmpeg.js.map +0 -1
  54. package/dst/speechflow-node-a2a-gender.d.ts +0 -20
  55. package/dst/speechflow-node-a2a-gender.js +0 -349
  56. package/dst/speechflow-node-a2a-gender.js.map +0 -1
  57. package/dst/speechflow-node-a2a-meter.d.ts +0 -14
  58. package/dst/speechflow-node-a2a-meter.js +0 -196
  59. package/dst/speechflow-node-a2a-meter.js.map +0 -1
  60. package/dst/speechflow-node-a2a-mute.d.ts +0 -17
  61. package/dst/speechflow-node-a2a-mute.js +0 -117
  62. package/dst/speechflow-node-a2a-mute.js.map +0 -1
  63. package/dst/speechflow-node-a2a-vad.d.ts +0 -19
  64. package/dst/speechflow-node-a2a-vad.js +0 -383
  65. package/dst/speechflow-node-a2a-vad.js.map +0 -1
  66. package/dst/speechflow-node-a2a-wav.d.ts +0 -11
  67. package/dst/speechflow-node-a2a-wav.js +0 -211
  68. package/dst/speechflow-node-a2a-wav.js.map +0 -1
  69. package/dst/speechflow-node-a2t-deepgram.d.ts +0 -19
  70. package/dst/speechflow-node-a2t-deepgram.js +0 -345
  71. package/dst/speechflow-node-a2t-deepgram.js.map +0 -1
  72. package/dst/speechflow-node-t2a-elevenlabs.d.ts +0 -18
  73. package/dst/speechflow-node-t2a-elevenlabs.js +0 -244
  74. package/dst/speechflow-node-t2a-elevenlabs.js.map +0 -1
  75. package/dst/speechflow-node-t2a-kokoro.d.ts +0 -14
  76. package/dst/speechflow-node-t2a-kokoro.js +0 -155
  77. package/dst/speechflow-node-t2a-kokoro.js.map +0 -1
  78. package/dst/speechflow-node-t2t-deepl.d.ts +0 -15
  79. package/dst/speechflow-node-t2t-deepl.js +0 -146
  80. package/dst/speechflow-node-t2t-deepl.js.map +0 -1
  81. package/dst/speechflow-node-t2t-format.d.ts +0 -11
  82. package/dst/speechflow-node-t2t-format.js +0 -82
  83. package/dst/speechflow-node-t2t-format.js.map +0 -1
  84. package/dst/speechflow-node-t2t-ollama.d.ts +0 -13
  85. package/dst/speechflow-node-t2t-ollama.js +0 -247
  86. package/dst/speechflow-node-t2t-ollama.js.map +0 -1
  87. package/dst/speechflow-node-t2t-openai.d.ts +0 -13
  88. package/dst/speechflow-node-t2t-openai.js +0 -227
  89. package/dst/speechflow-node-t2t-openai.js.map +0 -1
  90. package/dst/speechflow-node-t2t-sentence.d.ts +0 -17
  91. package/dst/speechflow-node-t2t-sentence.js +0 -250
  92. package/dst/speechflow-node-t2t-sentence.js.map +0 -1
  93. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -12
  94. package/dst/speechflow-node-t2t-subtitle.js +0 -166
  95. package/dst/speechflow-node-t2t-subtitle.js.map +0 -1
  96. package/dst/speechflow-node-t2t-transformers.d.ts +0 -14
  97. package/dst/speechflow-node-t2t-transformers.js +0 -265
  98. package/dst/speechflow-node-t2t-transformers.js.map +0 -1
  99. package/dst/speechflow-node-x2x-filter.d.ts +0 -11
  100. package/dst/speechflow-node-x2x-filter.js +0 -117
  101. package/dst/speechflow-node-x2x-filter.js.map +0 -1
  102. package/dst/speechflow-node-x2x-trace.d.ts +0 -11
  103. package/dst/speechflow-node-x2x-trace.js +0 -104
  104. package/dst/speechflow-node-x2x-trace.js.map +0 -1
  105. package/dst/speechflow-node-xio-device.d.ts +0 -13
  106. package/dst/speechflow-node-xio-device.js +0 -230
  107. package/dst/speechflow-node-xio-device.js.map +0 -1
  108. package/dst/speechflow-node-xio-file.d.ts +0 -11
  109. package/dst/speechflow-node-xio-file.js +0 -216
  110. package/dst/speechflow-node-xio-file.js.map +0 -1
  111. package/dst/speechflow-node-xio-mqtt.d.ts +0 -13
  112. package/dst/speechflow-node-xio-mqtt.js +0 -188
  113. package/dst/speechflow-node-xio-mqtt.js.map +0 -1
  114. package/dst/speechflow-node-xio-websocket.d.ts +0 -13
  115. package/dst/speechflow-node-xio-websocket.js +0 -278
  116. package/dst/speechflow-node-xio-websocket.js.map +0 -1
  117. package/dst/speechflow-node.d.ts +0 -63
  118. package/dst/speechflow-node.js +0 -177
  119. package/dst/speechflow-node.js.map +0 -1
  120. package/dst/speechflow-utils.d.ts +0 -74
  121. package/dst/speechflow-utils.js +0 -519
  122. package/dst/speechflow-utils.js.map +0 -1
  123. package/dst/speechflow.js +0 -787
  124. package/dst/speechflow.js.map +0 -1
  125. package/src/speechflow-node-a2a-meter.ts +0 -177
  126. package/src/speechflow-node-t2t-subtitle.ts +0 -149
  127. /package/{etc → speechflow-cli/etc}/biome.jsonc +0 -0
  128. /package/{etc → speechflow-cli/etc}/eslint.mjs +0 -0
  129. /package/{etc → speechflow-cli/etc}/oxlint.jsonc +0 -0
  130. /package/{etc → speechflow-cli/etc}/speechflow.bat +0 -0
  131. /package/{etc → speechflow-cli/etc}/speechflow.sh +0 -0
  132. /package/{etc → speechflow-cli/etc}/speechflow.yaml +0 -0
  133. /package/{etc → speechflow-cli/etc}/tsconfig.json +0 -0
  134. /package/{package.d → speechflow-cli/package.d}/@ericedouard+vad-node-realtime+0.2.0.patch +0 -0
  135. /package/{src → speechflow-cli/src}/lib.d.ts +0 -0
  136. /package/{src → speechflow-cli/src}/speechflow-logo.ai +0 -0
  137. /package/{src → speechflow-cli/src}/speechflow-logo.svg +0 -0
  138. /package/{src → speechflow-cli/src}/speechflow-node-a2a-ffmpeg.ts +0 -0
  139. /package/{src → speechflow-cli/src}/speechflow-node-a2a-gender.ts +0 -0
  140. /package/{src → speechflow-cli/src}/speechflow-node-a2a-mute.ts +0 -0
  141. /package/{src → speechflow-cli/src}/speechflow-node-a2a-wav.ts +0 -0
  142. /package/{src → speechflow-cli/src}/speechflow-node-t2a-kokoro.ts +0 -0
  143. /package/{src → speechflow-cli/src}/speechflow-node-t2t-deepl.ts +0 -0
  144. /package/{src → speechflow-cli/src}/speechflow-node-t2t-format.ts +0 -0
  145. /package/{src → speechflow-cli/src}/speechflow-node-t2t-ollama.ts +0 -0
  146. /package/{src → speechflow-cli/src}/speechflow-node-t2t-openai.ts +0 -0
  147. /package/{src → speechflow-cli/src}/speechflow-node-t2t-sentence.ts +0 -0
  148. /package/{src → speechflow-cli/src}/speechflow-node-t2t-transformers.ts +0 -0
  149. /package/{src → speechflow-cli/src}/speechflow-node-xio-device.ts +0 -0
  150. /package/{src → speechflow-cli/src}/speechflow-node-xio-file.ts +0 -0
  151. /package/{src → speechflow-cli/src}/speechflow-node-xio-mqtt.ts +0 -0
  152. /package/{src → speechflow-cli/src}/speechflow-node-xio-websocket.ts +0 -0
  153. /package/{src → speechflow-cli/src}/speechflow-utils.ts +0 -0
  154. /package/{tsconfig.json → speechflow-cli/tsconfig.json} +0 -0
@@ -1,349 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- /* standard dependencies */
45
- const node_path_1 = __importDefault(require("node:path"));
46
- const node_stream_1 = __importDefault(require("node:stream"));
47
- /* external dependencies */
48
- const Transformers = __importStar(require("@huggingface/transformers"));
49
- const wavefile_1 = require("wavefile");
50
- /* internal dependencies */
51
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
52
- const utils = __importStar(require("./speechflow-utils"));
53
- /* SpeechFlow node for Gender recognition */
54
- class SpeechFlowNodeGender extends speechflow_node_1.default {
55
- /* declare official node name */
56
- static name = "gender";
57
- /* internal state */
58
- static speexInitialized = false;
59
- classifier = null;
60
- queue = new utils.Queue();
61
- queueRecv = this.queue.pointerUse("recv");
62
- queueAC = this.queue.pointerUse("ac");
63
- queueSend = this.queue.pointerUse("send");
64
- shutdown = false;
65
- workingOffTimer = null;
66
- progressInterval = null;
67
- /* construct node */
68
- constructor(id, cfg, opts, args) {
69
- super(id, cfg, opts, args);
70
- /* declare node configuration parameters */
71
- this.configure({
72
- window: { type: "number", pos: 0, val: 500 }
73
- });
74
- /* declare node input/output format */
75
- this.input = "audio";
76
- this.output = "audio";
77
- }
78
- /* open node */
79
- async open() {
80
- /* sanity check situation */
81
- if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
82
- throw new Error("Gender node currently supports PCM-S16LE audio only");
83
- /* clear shutdown flag */
84
- this.shutdown = false;
85
- /* pass-through logging */
86
- const log = (level, msg) => { this.log(level, msg); };
87
- /* the used model */
88
- const model = "Xenova/wav2vec2-large-xlsr-53-gender-recognition-librispeech";
89
- /* track download progress when instantiating Transformers engine and model */
90
- const progressState = new Map();
91
- const progressCallback = (progress) => {
92
- if (this.shutdown)
93
- return;
94
- let artifact = model;
95
- if (typeof progress.file === "string")
96
- artifact += `:${progress.file}`;
97
- let percent = 0;
98
- if (typeof progress.loaded === "number" && typeof progress.total === "number")
99
- percent = progress.loaded / progress.total * 100;
100
- else if (typeof progress.progress === "number")
101
- percent = progress.progress;
102
- if (percent > 0)
103
- progressState.set(artifact, percent);
104
- };
105
- this.progressInterval = setInterval(() => {
106
- if (this.shutdown)
107
- return;
108
- for (const [artifact, percent] of progressState) {
109
- this.log("info", `downloaded ${percent.toFixed(2)}% of artifact "${artifact}"`);
110
- if (percent >= 1.0)
111
- progressState.delete(artifact);
112
- }
113
- }, 1000);
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
- }
137
- if (this.classifier === null)
138
- throw new Error("failed to instantiate classifier pipeline");
139
- /* classify a single large-enough concatenated audio frame */
140
- const classify = async (data) => {
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];
149
- const c1 = classified.find((c) => c.label === "male");
150
- const c2 = classified.find((c) => c.label === "female");
151
- const male = c1 ? c1.score : 0.0;
152
- const female = c2 ? c2.score : 0.0;
153
- return (male > female ? "male" : "female");
154
- };
155
- /* define sample rate required by model */
156
- const sampleRateTarget = 16000;
157
- /* work off queued audio frames */
158
- const frameWindowDuration = 0.5;
159
- const frameWindowSamples = frameWindowDuration * sampleRateTarget;
160
- let lastGender = "";
161
- let workingOff = false;
162
- const workOffQueue = async () => {
163
- /* control working off round */
164
- if (workingOff || this.shutdown)
165
- return;
166
- workingOff = true;
167
- if (this.workingOffTimer !== null) {
168
- clearTimeout(this.workingOffTimer);
169
- this.workingOffTimer = null;
170
- }
171
- this.queue.off("write", workOffQueue);
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);
181
- if (element === undefined || element.type !== "audio-frame")
182
- break;
183
- if ((samples + element.data.length) < frameWindowSamples) {
184
- data.set(element.data, samples);
185
- samples += element.data.length;
186
- }
187
- pos++;
188
- }
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
- }
207
- }
208
- }
209
- catch (error) {
210
- log("error", `gender classification error: ${error}`);
211
- }
212
- /* re-initiate working off round */
213
- workingOff = false;
214
- if (!this.shutdown) {
215
- this.workingOffTimer = setTimeout(workOffQueue, 100);
216
- this.queue.once("write", workOffQueue);
217
- }
218
- };
219
- this.queue.once("write", workOffQueue);
220
- /* provide Duplex stream and internally attach to classifier */
221
- const self = this;
222
- this.stream = new node_stream_1.default.Duplex({
223
- writableObjectMode: true,
224
- readableObjectMode: true,
225
- decodeStrings: false,
226
- highWaterMark: 1,
227
- /* receive audio chunk (writable side of stream) */
228
- write(chunk, encoding, callback) {
229
- if (self.shutdown) {
230
- callback(new Error("stream already destroyed"));
231
- return;
232
- }
233
- if (!Buffer.isBuffer(chunk.payload))
234
- callback(new Error("expected audio input as Buffer chunks"));
235
- else if (chunk.payload.byteLength === 0)
236
- callback();
237
- else {
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
- }
252
- }
253
- },
254
- /* receive no more audio chunks (writable side of stream) */
255
- final(callback) {
256
- if (self.shutdown) {
257
- callback();
258
- return;
259
- }
260
- /* signal end of file */
261
- self.queueRecv.append({ type: "audio-eof" });
262
- callback();
263
- },
264
- /* send audio chunk(s) (readable side of stream) */
265
- read(_size) {
266
- /* flush pending audio chunks */
267
- const flushPendingChunks = () => {
268
- if (self.shutdown) {
269
- this.push(null);
270
- return;
271
- }
272
- const element = self.queueSend.peek();
273
- if (element !== undefined
274
- && element.type === "audio-eof")
275
- this.push(null);
276
- else if (element !== undefined
277
- && element.type === "audio-frame"
278
- && element.gender !== undefined) {
279
- while (true) {
280
- if (self.shutdown) {
281
- this.push(null);
282
- return;
283
- }
284
- const element = self.queueSend.peek();
285
- if (element === undefined)
286
- break;
287
- else if (element.type === "audio-eof") {
288
- this.push(null);
289
- break;
290
- }
291
- else if (element.type === "audio-frame"
292
- && element.gender === undefined)
293
- break;
294
- const duration = utils.audioArrayDuration(element.data);
295
- log("debug", `send chunk (${duration.toFixed(3)}s) with gender <${element.gender}>`);
296
- element.chunk.meta.set("gender", element.gender);
297
- this.push(element.chunk);
298
- self.queueSend.walk(+1);
299
- self.queue.trim();
300
- }
301
- }
302
- else if (!self.shutdown)
303
- self.queue.once("write", flushPendingChunks);
304
- };
305
- flushPendingChunks();
306
- }
307
- });
308
- }
309
- /* close node */
310
- async close() {
311
- /* indicate shutdown */
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");
325
- /* close stream */
326
- if (this.stream !== null) {
327
- this.stream.destroy();
328
- this.stream = null;
329
- }
330
- /* cleanup classifier */
331
- if (this.classifier !== null) {
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
- }
340
- this.classifier = null;
341
- }
342
- /* cleanup queue pointers */
343
- this.queue.pointerDelete("recv");
344
- this.queue.pointerDelete("ac");
345
- this.queue.pointerDelete("send");
346
- }
347
- }
348
- exports.default = SpeechFlowNodeGender;
349
- //# sourceMappingURL=speechflow-node-a2a-gender.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-a2a-gender.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-gender.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeMeter extends SpeechFlowNode {
3
- static name: string;
4
- private interval;
5
- private destroyed;
6
- private pendingCalculations;
7
- constructor(id: string, cfg: {
8
- [id: string]: any;
9
- }, opts: {
10
- [id: string]: any;
11
- }, args: any[]);
12
- open(): Promise<void>;
13
- close(): Promise<void>;
14
- }
@@ -1,196 +0,0 @@
1
- "use strict";
2
- /*
3
- ** SpeechFlow - Speech Processing Flow Graph
4
- ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
- ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
- */
7
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
- if (k2 === undefined) k2 = k;
9
- var desc = Object.getOwnPropertyDescriptor(m, k);
10
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
- desc = { enumerable: true, get: function() { return m[k]; } };
12
- }
13
- Object.defineProperty(o, k2, desc);
14
- }) : (function(o, m, k, k2) {
15
- if (k2 === undefined) k2 = k;
16
- o[k2] = m[k];
17
- }));
18
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
- Object.defineProperty(o, "default", { enumerable: true, value: v });
20
- }) : function(o, v) {
21
- o["default"] = v;
22
- });
23
- var __importStar = (this && this.__importStar) || (function () {
24
- var ownKeys = function(o) {
25
- ownKeys = Object.getOwnPropertyNames || function (o) {
26
- var ar = [];
27
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
- return ar;
29
- };
30
- return ownKeys(o);
31
- };
32
- return function (mod) {
33
- if (mod && mod.__esModule) return mod;
34
- var result = {};
35
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
- __setModuleDefault(result, mod);
37
- return result;
38
- };
39
- })();
40
- var __importDefault = (this && this.__importDefault) || function (mod) {
41
- return (mod && mod.__esModule) ? mod : { "default": mod };
42
- };
43
- Object.defineProperty(exports, "__esModule", { value: true });
44
- /* standard dependencies */
45
- const node_stream_1 = __importDefault(require("node:stream"));
46
- /* external dependencies */
47
- const audio_inspect_1 = require("audio-inspect");
48
- /* internal dependencies */
49
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
50
- const utils = __importStar(require("./speechflow-utils"));
51
- /* SpeechFlow node for audio metering */
52
- class SpeechFlowNodeMeter extends speechflow_node_1.default {
53
- /* declare official node name */
54
- static name = "meter";
55
- /* internal state */
56
- interval = null;
57
- destroyed = false;
58
- pendingCalculations = new Set();
59
- /* construct node */
60
- constructor(id, cfg, opts, args) {
61
- super(id, cfg, opts, args);
62
- /* declare node configuration parameters */
63
- this.configure({
64
- interval: { type: "number", pos: 0, val: 250 }
65
- });
66
- /* declare node input/output format */
67
- this.input = "audio";
68
- this.output = "audio";
69
- }
70
- /* open node */
71
- async open() {
72
- /* sanity check situation */
73
- if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
74
- throw new Error("meter node currently supports PCM-S16LE audio only");
75
- /* clear destruction flag */
76
- this.destroyed = false;
77
- /* internal state */
78
- const sampleWindowDuration = 3; /* LUFS-S requires 3s */
79
- const sampleWindowSize = this.config.audioSampleRate * sampleWindowDuration;
80
- let sampleWindow = new Float32Array(sampleWindowSize);
81
- sampleWindow.fill(0, 0, sampleWindowSize);
82
- let lufss = 0;
83
- let rms = 0;
84
- /* setup loudness emitting interval */
85
- this.interval = setInterval(() => {
86
- if (this.destroyed)
87
- return;
88
- this.log("debug", `LUFS-S: ${lufss.toFixed(1)} dB, RMS: ${rms.toFixed(1)} dB`);
89
- this.sendResponse(["meter", "LUFS-S", lufss]);
90
- this.sendResponse(["meter", "RMS", rms]);
91
- }, this.params.interval);
92
- /* provide Duplex stream and internally attach to meter */
93
- const self = this;
94
- this.stream = new node_stream_1.default.Transform({
95
- writableObjectMode: true,
96
- readableObjectMode: true,
97
- decodeStrings: false,
98
- highWaterMark: 1,
99
- /* transform audio chunk */
100
- transform(chunk, encoding, callback) {
101
- if (self.destroyed) {
102
- callback(new Error("stream already destroyed"));
103
- return;
104
- }
105
- if (!Buffer.isBuffer(chunk.payload))
106
- callback(new Error("expected audio input as Buffer chunks"));
107
- else if (chunk.payload.byteLength === 0)
108
- callback();
109
- else {
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
- }
163
- }
164
- },
165
- final(callback) {
166
- if (self.destroyed) {
167
- callback();
168
- return;
169
- }
170
- this.push(null);
171
- callback();
172
- }
173
- });
174
- }
175
- /* close node */
176
- async close() {
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();
183
- /* stop interval */
184
- if (this.interval !== null) {
185
- clearInterval(this.interval);
186
- this.interval = null;
187
- }
188
- /* close stream */
189
- if (this.stream !== null) {
190
- this.stream.destroy();
191
- this.stream = null;
192
- }
193
- }
194
- }
195
- exports.default = SpeechFlowNodeMeter;
196
- //# sourceMappingURL=speechflow-node-a2a-meter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-a2a-meter.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-meter.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- type MuteMode = "none" | /* not muted */ "silenced" | /* muted by changing audio samples to silence */ "unplugged";
3
- export default class SpeechFlowNodeMute extends SpeechFlowNode {
4
- static name: string;
5
- private muteMode;
6
- private destroyed;
7
- constructor(id: string, cfg: {
8
- [id: string]: any;
9
- }, opts: {
10
- [id: string]: any;
11
- }, args: any[]);
12
- receiveRequest(params: any[]): Promise<void>;
13
- setMuteMode(mode: MuteMode): void;
14
- open(): Promise<void>;
15
- close(): Promise<void>;
16
- }
17
- export {};