speechflow 1.3.1 → 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 (156) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/etc/stx.conf +54 -58
  3. package/package.json +25 -106
  4. package/{etc → speechflow-cli/etc}/eslint.mjs +1 -2
  5. package/speechflow-cli/etc/stx.conf +77 -0
  6. package/speechflow-cli/package.json +116 -0
  7. package/{src → speechflow-cli/src}/speechflow-node-a2a-gender.ts +148 -64
  8. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +217 -0
  9. package/{src → speechflow-cli/src}/speechflow-node-a2a-mute.ts +39 -11
  10. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +384 -0
  11. package/{src → speechflow-cli/src}/speechflow-node-a2a-wav.ts +27 -11
  12. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +313 -0
  13. package/{src → speechflow-cli/src}/speechflow-node-t2a-elevenlabs.ts +59 -12
  14. package/{src → speechflow-cli/src}/speechflow-node-t2a-kokoro.ts +11 -4
  15. package/{src → speechflow-cli/src}/speechflow-node-t2t-deepl.ts +9 -4
  16. package/{src → speechflow-cli/src}/speechflow-node-t2t-format.ts +2 -2
  17. package/{src → speechflow-cli/src}/speechflow-node-t2t-ollama.ts +1 -1
  18. package/{src → speechflow-cli/src}/speechflow-node-t2t-openai.ts +1 -1
  19. package/{src → speechflow-cli/src}/speechflow-node-t2t-sentence.ts +37 -20
  20. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +276 -0
  21. package/{src → speechflow-cli/src}/speechflow-node-t2t-transformers.ts +4 -3
  22. package/{src → speechflow-cli/src}/speechflow-node-x2x-filter.ts +9 -5
  23. package/{src → speechflow-cli/src}/speechflow-node-x2x-trace.ts +16 -8
  24. package/{src → speechflow-cli/src}/speechflow-node-xio-device.ts +12 -8
  25. package/{src → speechflow-cli/src}/speechflow-node-xio-file.ts +9 -3
  26. package/{src → speechflow-cli/src}/speechflow-node-xio-mqtt.ts +5 -2
  27. package/{src → speechflow-cli/src}/speechflow-node-xio-websocket.ts +12 -12
  28. package/{src → speechflow-cli/src}/speechflow-node.ts +7 -0
  29. package/{src → speechflow-cli/src}/speechflow-utils.ts +78 -44
  30. package/{src → speechflow-cli/src}/speechflow.ts +188 -53
  31. package/speechflow-ui-db/etc/eslint.mjs +106 -0
  32. package/speechflow-ui-db/etc/htmllint.json +55 -0
  33. package/speechflow-ui-db/etc/stx.conf +79 -0
  34. package/speechflow-ui-db/etc/stylelint.js +46 -0
  35. package/speechflow-ui-db/etc/stylelint.yaml +33 -0
  36. package/speechflow-ui-db/etc/tsc-client.json +30 -0
  37. package/speechflow-ui-db/etc/tsc.node.json +9 -0
  38. package/speechflow-ui-db/etc/vite-client.mts +63 -0
  39. package/speechflow-ui-db/package.d/htmllint-cli+0.0.7.patch +20 -0
  40. package/speechflow-ui-db/package.json +75 -0
  41. package/speechflow-ui-db/src/app-icon.ai +1989 -4
  42. package/speechflow-ui-db/src/app-icon.svg +26 -0
  43. package/speechflow-ui-db/src/app.styl +64 -0
  44. package/speechflow-ui-db/src/app.vue +221 -0
  45. package/speechflow-ui-db/src/index.html +23 -0
  46. package/speechflow-ui-db/src/index.ts +26 -0
  47. package/{dst/speechflow.d.ts → speechflow-ui-db/src/lib.d.ts} +5 -3
  48. package/speechflow-ui-db/src/tsconfig.json +3 -0
  49. package/speechflow-ui-st/etc/eslint.mjs +106 -0
  50. package/speechflow-ui-st/etc/htmllint.json +55 -0
  51. package/speechflow-ui-st/etc/stx.conf +79 -0
  52. package/speechflow-ui-st/etc/stylelint.js +46 -0
  53. package/speechflow-ui-st/etc/stylelint.yaml +33 -0
  54. package/speechflow-ui-st/etc/tsc-client.json +30 -0
  55. package/speechflow-ui-st/etc/tsc.node.json +9 -0
  56. package/speechflow-ui-st/etc/vite-client.mts +63 -0
  57. package/speechflow-ui-st/package.d/htmllint-cli+0.0.7.patch +20 -0
  58. package/speechflow-ui-st/package.json +79 -0
  59. package/speechflow-ui-st/src/app-icon.ai +1989 -4
  60. package/speechflow-ui-st/src/app-icon.svg +26 -0
  61. package/speechflow-ui-st/src/app.styl +64 -0
  62. package/speechflow-ui-st/src/app.vue +142 -0
  63. package/speechflow-ui-st/src/index.html +23 -0
  64. package/speechflow-ui-st/src/index.ts +26 -0
  65. package/speechflow-ui-st/src/lib.d.ts +9 -0
  66. package/speechflow-ui-st/src/tsconfig.json +3 -0
  67. package/dst/speechflow-node-a2a-ffmpeg.d.ts +0 -13
  68. package/dst/speechflow-node-a2a-ffmpeg.js +0 -153
  69. package/dst/speechflow-node-a2a-ffmpeg.js.map +0 -1
  70. package/dst/speechflow-node-a2a-gender.d.ts +0 -18
  71. package/dst/speechflow-node-a2a-gender.js +0 -271
  72. package/dst/speechflow-node-a2a-gender.js.map +0 -1
  73. package/dst/speechflow-node-a2a-meter.d.ts +0 -12
  74. package/dst/speechflow-node-a2a-meter.js +0 -155
  75. package/dst/speechflow-node-a2a-meter.js.map +0 -1
  76. package/dst/speechflow-node-a2a-mute.d.ts +0 -16
  77. package/dst/speechflow-node-a2a-mute.js +0 -91
  78. package/dst/speechflow-node-a2a-mute.js.map +0 -1
  79. package/dst/speechflow-node-a2a-vad.d.ts +0 -16
  80. package/dst/speechflow-node-a2a-vad.js +0 -285
  81. package/dst/speechflow-node-a2a-vad.js.map +0 -1
  82. package/dst/speechflow-node-a2a-wav.d.ts +0 -11
  83. package/dst/speechflow-node-a2a-wav.js +0 -195
  84. package/dst/speechflow-node-a2a-wav.js.map +0 -1
  85. package/dst/speechflow-node-a2t-deepgram.d.ts +0 -15
  86. package/dst/speechflow-node-a2t-deepgram.js +0 -255
  87. package/dst/speechflow-node-a2t-deepgram.js.map +0 -1
  88. package/dst/speechflow-node-t2a-elevenlabs.d.ts +0 -16
  89. package/dst/speechflow-node-t2a-elevenlabs.js +0 -195
  90. package/dst/speechflow-node-t2a-elevenlabs.js.map +0 -1
  91. package/dst/speechflow-node-t2a-kokoro.d.ts +0 -13
  92. package/dst/speechflow-node-t2a-kokoro.js +0 -149
  93. package/dst/speechflow-node-t2a-kokoro.js.map +0 -1
  94. package/dst/speechflow-node-t2t-deepl.d.ts +0 -15
  95. package/dst/speechflow-node-t2t-deepl.js +0 -142
  96. package/dst/speechflow-node-t2t-deepl.js.map +0 -1
  97. package/dst/speechflow-node-t2t-format.d.ts +0 -11
  98. package/dst/speechflow-node-t2t-format.js +0 -82
  99. package/dst/speechflow-node-t2t-format.js.map +0 -1
  100. package/dst/speechflow-node-t2t-ollama.d.ts +0 -13
  101. package/dst/speechflow-node-t2t-ollama.js +0 -247
  102. package/dst/speechflow-node-t2t-ollama.js.map +0 -1
  103. package/dst/speechflow-node-t2t-openai.d.ts +0 -13
  104. package/dst/speechflow-node-t2t-openai.js +0 -227
  105. package/dst/speechflow-node-t2t-openai.js.map +0 -1
  106. package/dst/speechflow-node-t2t-sentence.d.ts +0 -17
  107. package/dst/speechflow-node-t2t-sentence.js +0 -234
  108. package/dst/speechflow-node-t2t-sentence.js.map +0 -1
  109. package/dst/speechflow-node-t2t-subtitle.d.ts +0 -13
  110. package/dst/speechflow-node-t2t-subtitle.js +0 -278
  111. package/dst/speechflow-node-t2t-subtitle.js.map +0 -1
  112. package/dst/speechflow-node-t2t-transformers.d.ts +0 -14
  113. package/dst/speechflow-node-t2t-transformers.js +0 -265
  114. package/dst/speechflow-node-t2t-transformers.js.map +0 -1
  115. package/dst/speechflow-node-x2x-filter.d.ts +0 -11
  116. package/dst/speechflow-node-x2x-filter.js +0 -117
  117. package/dst/speechflow-node-x2x-filter.js.map +0 -1
  118. package/dst/speechflow-node-x2x-trace.d.ts +0 -11
  119. package/dst/speechflow-node-x2x-trace.js +0 -111
  120. package/dst/speechflow-node-x2x-trace.js.map +0 -1
  121. package/dst/speechflow-node-xio-device.d.ts +0 -13
  122. package/dst/speechflow-node-xio-device.js +0 -226
  123. package/dst/speechflow-node-xio-device.js.map +0 -1
  124. package/dst/speechflow-node-xio-file.d.ts +0 -11
  125. package/dst/speechflow-node-xio-file.js +0 -210
  126. package/dst/speechflow-node-xio-file.js.map +0 -1
  127. package/dst/speechflow-node-xio-mqtt.d.ts +0 -13
  128. package/dst/speechflow-node-xio-mqtt.js +0 -185
  129. package/dst/speechflow-node-xio-mqtt.js.map +0 -1
  130. package/dst/speechflow-node-xio-websocket.d.ts +0 -13
  131. package/dst/speechflow-node-xio-websocket.js +0 -278
  132. package/dst/speechflow-node-xio-websocket.js.map +0 -1
  133. package/dst/speechflow-node.d.ts +0 -65
  134. package/dst/speechflow-node.js +0 -180
  135. package/dst/speechflow-node.js.map +0 -1
  136. package/dst/speechflow-utils.d.ts +0 -69
  137. package/dst/speechflow-utils.js +0 -486
  138. package/dst/speechflow-utils.js.map +0 -1
  139. package/dst/speechflow.js +0 -768
  140. package/dst/speechflow.js.map +0 -1
  141. package/src/speechflow-node-a2a-meter.ts +0 -130
  142. package/src/speechflow-node-a2a-vad.ts +0 -285
  143. package/src/speechflow-node-a2t-deepgram.ts +0 -234
  144. package/src/speechflow-node-t2t-subtitle.ts +0 -149
  145. /package/{etc → speechflow-cli/etc}/biome.jsonc +0 -0
  146. /package/{etc → speechflow-cli/etc}/oxlint.jsonc +0 -0
  147. /package/{etc → speechflow-cli/etc}/speechflow.bat +0 -0
  148. /package/{etc → speechflow-cli/etc}/speechflow.sh +0 -0
  149. /package/{etc → speechflow-cli/etc}/speechflow.yaml +0 -0
  150. /package/{etc → speechflow-cli/etc}/tsconfig.json +0 -0
  151. /package/{package.d → speechflow-cli/package.d}/@ericedouard+vad-node-realtime+0.2.0.patch +0 -0
  152. /package/{src → speechflow-cli/src}/lib.d.ts +0 -0
  153. /package/{src → speechflow-cli/src}/speechflow-logo.ai +0 -0
  154. /package/{src → speechflow-cli/src}/speechflow-logo.svg +0 -0
  155. /package/{src → speechflow-cli/src}/speechflow-node-a2a-ffmpeg.ts +0 -0
  156. /package/{tsconfig.json → speechflow-cli/tsconfig.json} +0 -0
@@ -1,285 +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 vad_node_realtime_1 = require("@ericedouard/vad-node-realtime");
48
- /* internal dependencies */
49
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
50
- const utils = __importStar(require("./speechflow-utils"));
51
- /* SpeechFlow node for VAD speech-to-speech processing */
52
- class SpeechFlowNodeVAD extends speechflow_node_1.default {
53
- /* declare official node name */
54
- static name = "vad";
55
- /* internal state */
56
- vad = null;
57
- queue = new utils.Queue();
58
- queueRecv = this.queue.pointerUse("recv");
59
- queueVAD = this.queue.pointerUse("vad");
60
- queueSend = this.queue.pointerUse("send");
61
- /* construct node */
62
- constructor(id, cfg, opts, args) {
63
- super(id, cfg, opts, args);
64
- /* declare node configuration parameters */
65
- this.configure({
66
- mode: { type: "string", val: "silenced", match: /^(?:silenced|unplugged)$/ },
67
- posSpeechThreshold: { type: "number", val: 0.50 },
68
- negSpeechThreshold: { type: "number", val: 0.35 },
69
- minSpeechFrames: { type: "number", val: 2 },
70
- redemptionFrames: { type: "number", val: 12 },
71
- preSpeechPadFrames: { type: "number", val: 1 },
72
- postSpeechTail: { type: "number", val: 1500 }
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("VAD node currently supports PCM-S16LE audio only");
83
- /* pass-through logging */
84
- const log = (level, msg) => { this.log(level, msg); };
85
- /* internal processing constants */
86
- const vadSampleRateTarget = 16000; /* internal target of VAD */
87
- const vadSamplesPerFrame = 512; /* required for VAD v5 */
88
- /* establish Voice Activity Detection (VAD) facility */
89
- let tail = false;
90
- let tailTimer = null;
91
- this.vad = await vad_node_realtime_1.RealTimeVAD.new({
92
- model: "v5",
93
- sampleRate: this.config.audioSampleRate, /* before resampling to 16KHz */
94
- frameSamples: vadSamplesPerFrame, /* after resampling to 16KHz */
95
- positiveSpeechThreshold: this.params.posSpeechThreshold,
96
- negativeSpeechThreshold: this.params.negSpeechThreshold,
97
- minSpeechFrames: this.params.minSpeechFrames,
98
- redemptionFrames: this.params.redemptionFrames,
99
- preSpeechPadFrames: this.params.preSpeechPadFrames,
100
- onSpeechStart: () => {
101
- log("info", "VAD: speech start");
102
- if (this.params.mode === "unlugged") {
103
- tail = false;
104
- if (tailTimer !== null) {
105
- clearTimeout(tailTimer);
106
- tailTimer = null;
107
- }
108
- }
109
- },
110
- onSpeechEnd: (audio) => {
111
- const duration = utils.audioArrayDuration(audio, vadSampleRateTarget);
112
- log("info", `VAD: speech end (duration: ${duration.toFixed(2)}s)`);
113
- if (this.params.mode === "unlugged") {
114
- tail = true;
115
- if (tailTimer !== null)
116
- clearTimeout(tailTimer);
117
- tailTimer = setTimeout(() => {
118
- tail = false;
119
- tailTimer = null;
120
- }, this.params.postSpeechTail);
121
- }
122
- },
123
- onVADMisfire: () => {
124
- log("info", "VAD: speech end (segment too short)");
125
- if (this.params.mode === "unlugged") {
126
- tail = true;
127
- if (tailTimer !== null)
128
- clearTimeout(tailTimer);
129
- tailTimer = setTimeout(() => {
130
- tail = false;
131
- tailTimer = null;
132
- }, this.params.postSpeechTail);
133
- }
134
- },
135
- onFrameProcessed: (audio) => {
136
- /* annotate the current audio segment */
137
- const element = this.queueVAD.peek();
138
- if (element === undefined || element.type !== "audio-frame")
139
- throw new Error("internal error which cannot happen: no more queued element");
140
- const segment = element.segmentData[element.segmentIdx++];
141
- segment.isSpeech = (audio.isSpeech > audio.notSpeech) || tail;
142
- /* annotate the entire audio chunk */
143
- if (element.segmentIdx >= element.segmentData.length) {
144
- let isSpeech = false;
145
- for (const segment of element.segmentData) {
146
- if (segment.isSpeech) {
147
- isSpeech = true;
148
- break;
149
- }
150
- }
151
- element.isSpeech = isSpeech;
152
- this.queueVAD.touch();
153
- this.queueVAD.walk(+1);
154
- }
155
- }
156
- });
157
- this.vad.start();
158
- /* provide Duplex stream and internally attach to VAD */
159
- const self = this;
160
- this.stream = new node_stream_1.default.Duplex({
161
- writableObjectMode: true,
162
- readableObjectMode: true,
163
- decodeStrings: false,
164
- highWaterMark: 1,
165
- /* receive audio chunk (writable side of stream) */
166
- write(chunk, encoding, callback) {
167
- if (!Buffer.isBuffer(chunk.payload))
168
- callback(new Error("expected audio input as Buffer chunks"));
169
- else if (chunk.payload.byteLength === 0)
170
- callback();
171
- else {
172
- /* convert audio samples from PCM/I16 to PCM/F32 */
173
- const data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
174
- /* segment audio samples as individual VAD-sized frames */
175
- const segmentData = [];
176
- const chunkSize = vadSamplesPerFrame * (self.config.audioSampleRate / vadSampleRateTarget);
177
- const chunks = Math.trunc(data.length / chunkSize);
178
- for (let i = 0; i < chunks; i++) {
179
- const frame = data.slice(i * chunkSize, (i + 1) * chunkSize);
180
- const segment = { data: frame };
181
- segmentData.push(segment);
182
- }
183
- if ((chunks * chunkSize) < data.length) {
184
- const frame = new Float32Array(chunkSize);
185
- frame.fill(0);
186
- frame.set(data.slice(chunks * chunkSize, data.length));
187
- const segment = { data: frame };
188
- segmentData.push(segment);
189
- }
190
- /* queue the results */
191
- self.queueRecv.append({
192
- type: "audio-frame", chunk,
193
- segmentIdx: 0, segmentData
194
- });
195
- /* push segments through Voice Activity Detection (VAD) */
196
- for (const segment of segmentData)
197
- self.vad.processAudio(segment.data);
198
- callback();
199
- }
200
- },
201
- /* receive no more audio chunks (writable side of stream) */
202
- final(callback) {
203
- /* signal end of file */
204
- self.queueRecv.append({ type: "audio-eof" });
205
- callback();
206
- },
207
- /* send audio chunk(s) (readable side of stream) */
208
- read(_size) {
209
- /* try to perform read operation from scratch */
210
- const tryToRead = () => {
211
- /* flush pending audio chunks */
212
- const flushPendingChunks = () => {
213
- let pushed = 0;
214
- while (true) {
215
- const element = self.queueSend.peek();
216
- if (element === undefined)
217
- break;
218
- else if (element.type === "audio-eof") {
219
- this.push(null);
220
- break;
221
- }
222
- else if (element.type === "audio-frame"
223
- && element.isSpeech === undefined)
224
- break;
225
- self.queueSend.walk(+1);
226
- self.queue.trim();
227
- if (element.isSpeech) {
228
- this.push(element.chunk);
229
- pushed++;
230
- }
231
- else if (self.params.mode === "silenced") {
232
- const chunk = element.chunk.clone();
233
- const buffer = chunk.payload;
234
- buffer.fill(0);
235
- this.push(chunk);
236
- pushed++;
237
- }
238
- else if (self.params.mode === "unplugged" && pushed === 0)
239
- /* we have to await chunks now, as in unplugged
240
- mode we else would be never called again until
241
- we at least once push a new chunk as the result */
242
- tryToRead();
243
- }
244
- };
245
- /* await forthcoming audio chunks */
246
- const awaitForthcomingChunks = () => {
247
- const element = self.queueSend.peek();
248
- if (element !== undefined
249
- && element.type === "audio-frame"
250
- && element.isSpeech !== undefined)
251
- flushPendingChunks();
252
- else
253
- self.queue.once("write", awaitForthcomingChunks);
254
- };
255
- const element = self.queueSend.peek();
256
- if (element !== undefined && element.type === "audio-eof")
257
- this.push(null);
258
- else if (element !== undefined
259
- && element.type === "audio-frame"
260
- && element.isSpeech !== undefined)
261
- flushPendingChunks();
262
- else
263
- self.queue.once("write", awaitForthcomingChunks);
264
- };
265
- tryToRead();
266
- }
267
- });
268
- }
269
- /* close node */
270
- async close() {
271
- /* close stream */
272
- if (this.stream !== null) {
273
- this.stream.destroy();
274
- this.stream = null;
275
- }
276
- /* close VAD */
277
- if (this.vad !== null) {
278
- await this.vad.flush();
279
- this.vad.destroy();
280
- this.vad = null;
281
- }
282
- }
283
- }
284
- exports.default = SpeechFlowNodeVAD;
285
- //# sourceMappingURL=speechflow-node-a2a-vad.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-a2a-vad.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-vad.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeWAV extends SpeechFlowNode {
3
- static name: string;
4
- constructor(id: string, cfg: {
5
- [id: string]: any;
6
- }, opts: {
7
- [id: string]: any;
8
- }, args: any[]);
9
- open(): Promise<void>;
10
- close(): Promise<void>;
11
- }
@@ -1,195 +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 __importDefault = (this && this.__importDefault) || function (mod) {
8
- return (mod && mod.__esModule) ? mod : { "default": mod };
9
- };
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- /* standard dependencies */
12
- const node_stream_1 = __importDefault(require("node:stream"));
13
- /* internal dependencies */
14
- const speechflow_node_1 = __importDefault(require("./speechflow-node"));
15
- /* write WAV header */
16
- const writeWavHeader = (length, options) => {
17
- const audioFormat = options?.audioFormat ?? 0x001; /* PCM */
18
- const channels = options?.channels ?? 1; /* mono */
19
- const sampleRate = options?.sampleRate ?? 44100; /* 44KHz */
20
- const bitDepth = options?.bitDepth ?? 16; /* 16-Bit */
21
- const headerLength = 44;
22
- const dataLength = length || (4294967295 - 100);
23
- const fileSize = dataLength + headerLength;
24
- const header = Buffer.alloc(headerLength);
25
- const RIFF = Buffer.alloc(4, "RIFF");
26
- const WAVE = Buffer.alloc(4, "WAVE");
27
- const fmt = Buffer.alloc(4, "fmt ");
28
- const data = Buffer.alloc(4, "data");
29
- const byteRate = (sampleRate * channels * bitDepth) / 8;
30
- const blockAlign = (channels * bitDepth) / 8;
31
- let offset = 0;
32
- RIFF.copy(header, offset);
33
- offset += RIFF.length;
34
- header.writeUInt32LE(fileSize - 8, offset);
35
- offset += 4;
36
- WAVE.copy(header, offset);
37
- offset += WAVE.length;
38
- fmt.copy(header, offset);
39
- offset += fmt.length;
40
- header.writeUInt32LE(16, offset);
41
- offset += 4;
42
- header.writeUInt16LE(audioFormat, offset);
43
- offset += 2;
44
- header.writeUInt16LE(channels, offset);
45
- offset += 2;
46
- header.writeUInt32LE(sampleRate, offset);
47
- offset += 4;
48
- header.writeUInt32LE(byteRate, offset);
49
- offset += 4;
50
- header.writeUInt16LE(blockAlign, offset);
51
- offset += 2;
52
- header.writeUInt16LE(bitDepth, offset);
53
- offset += 2;
54
- data.copy(header, offset);
55
- offset += data.length;
56
- header.writeUInt32LE(dataLength, offset);
57
- offset += 4;
58
- return header;
59
- };
60
- /* read WAV header */
61
- const readWavHeader = (buffer) => {
62
- let offset = 0;
63
- const riffHead = buffer.subarray(offset, offset + 4).toString();
64
- offset += 4;
65
- const fileSize = buffer.readUInt32LE(offset);
66
- offset += 4;
67
- const waveHead = buffer.subarray(offset, offset + 4).toString();
68
- offset += 4;
69
- const fmtHead = buffer.subarray(offset, offset + 4).toString();
70
- offset += 4;
71
- const formatLength = buffer.readUInt32LE(offset);
72
- offset += 4;
73
- const audioFormat = buffer.readUInt16LE(offset);
74
- offset += 2;
75
- const channels = buffer.readUInt16LE(offset);
76
- offset += 2;
77
- const sampleRate = buffer.readUInt32LE(offset);
78
- offset += 4;
79
- const byteRate = buffer.readUInt32LE(offset);
80
- offset += 4;
81
- const blockAlign = buffer.readUInt16LE(offset);
82
- offset += 2;
83
- const bitDepth = buffer.readUInt16LE(offset);
84
- offset += 2;
85
- const data = buffer.subarray(offset, offset + 4).toString();
86
- offset += 4;
87
- const dataLength = buffer.readUInt32LE(offset);
88
- offset += 4;
89
- return {
90
- riffHead, fileSize, waveHead, fmtHead, formatLength, audioFormat,
91
- channels, sampleRate, byteRate, blockAlign, bitDepth, data, dataLength
92
- };
93
- };
94
- /* SpeechFlow node for WAV format conversion */
95
- class SpeechFlowNodeWAV extends speechflow_node_1.default {
96
- /* declare official node name */
97
- static name = "wav";
98
- /* construct node */
99
- constructor(id, cfg, opts, args) {
100
- super(id, cfg, opts, args);
101
- /* declare node configuration parameters */
102
- this.configure({
103
- mode: { type: "string", pos: 1, val: "encode", match: /^(?:encode|decode)$/ }
104
- });
105
- /* declare node input/output format */
106
- this.input = "audio";
107
- this.output = "audio";
108
- }
109
- /* open node */
110
- async open() {
111
- /* establish a transform stream */
112
- const self = this;
113
- let firstChunk = true;
114
- this.stream = new node_stream_1.default.Transform({
115
- readableObjectMode: true,
116
- writableObjectMode: true,
117
- decodeStrings: false,
118
- highWaterMark: 1,
119
- transform(chunk, encoding, callback) {
120
- if (!Buffer.isBuffer(chunk.payload))
121
- callback(new Error("invalid chunk payload type"));
122
- else if (firstChunk) {
123
- if (self.params.mode === "encode") {
124
- /* convert raw/PCM to WAV/PCM
125
- (NOTICE: as this is a continuous stream, the
126
- resulting WAV header is not 100% conforming
127
- to the WAV standard, as it has to use a zero
128
- duration information. This cannot be changed in
129
- a stream-based processing.) */
130
- const headerBuffer = writeWavHeader(0, {
131
- audioFormat: 0x0001 /* PCM */,
132
- channels: self.config.audioChannels,
133
- sampleRate: self.config.audioSampleRate,
134
- bitDepth: self.config.audioBitDepth
135
- });
136
- const headerChunk = chunk.clone();
137
- headerChunk.payload = headerBuffer;
138
- this.push(headerChunk);
139
- this.push(chunk);
140
- callback();
141
- }
142
- else if (self.params.mode === "decode") {
143
- /* convert WAV/PCM to raw/PCM */
144
- const header = readWavHeader(chunk.payload);
145
- self.log("info", "WAV audio stream: " +
146
- `audioFormat=${header.audioFormat === 0x0001 ? "PCM" :
147
- "0x" + header.audioFormat.toString(16).padStart(4, "0")} ` +
148
- `channels=${header.channels} ` +
149
- `sampleRate=${header.sampleRate} ` +
150
- `bitDepth=${header.bitDepth}`);
151
- if (header.audioFormat !== 0x0001 /* PCM */)
152
- throw new Error("WAV not based on PCM format");
153
- if (header.bitDepth !== 16)
154
- throw new Error("WAV not based on 16 bit samples");
155
- if (header.sampleRate !== 48000)
156
- throw new Error("WAV not based on 48Khz sample rate");
157
- if (header.channels !== 1)
158
- throw new Error("WAV not based on mono channel");
159
- chunk.payload = chunk.payload.subarray(44);
160
- this.push(chunk);
161
- callback();
162
- }
163
- else
164
- throw new Error(`invalid operation mode "${self.params.mode}"`);
165
- }
166
- else {
167
- /* pass-through original chunk */
168
- this.push(chunk);
169
- callback();
170
- }
171
- firstChunk = false;
172
- },
173
- final(callback) {
174
- this.push(null);
175
- callback();
176
- }
177
- });
178
- }
179
- /* close node */
180
- async close() {
181
- /* shutdown stream */
182
- if (this.stream !== null) {
183
- await new Promise((resolve) => {
184
- if (this.stream instanceof node_stream_1.default.Duplex)
185
- this.stream.end(() => { resolve(); });
186
- else
187
- resolve();
188
- });
189
- this.stream.destroy();
190
- this.stream = null;
191
- }
192
- }
193
- }
194
- exports.default = SpeechFlowNodeWAV;
195
- //# sourceMappingURL=speechflow-node-a2a-wav.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"speechflow-node-a2a-wav.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-wav.ts"],"names":[],"mappings":";AAAA;;;;EAIE;;;;;AAEF,6BAA6B;AAC7B,8DAA0C;AAE1C,6BAA6B;AAC7B,wEAAmE;AAEnE,wBAAwB;AACxB,MAAM,cAAc,GAAG,CACnB,MAAc,EACd,OAA6F,EAC/F,EAAE;IACA,MAAM,WAAW,GAAI,OAAO,EAAE,WAAW,IAAI,KAAK,CAAA,CAAC,SAAS;IAC5D,MAAM,QAAQ,GAAO,OAAO,EAAE,QAAQ,IAAO,CAAC,CAAA,CAAK,UAAU;IAC7D,MAAM,UAAU,GAAK,OAAO,EAAE,UAAU,IAAK,KAAK,CAAA,CAAC,WAAW;IAC9D,MAAM,QAAQ,GAAO,OAAO,EAAE,QAAQ,IAAO,EAAE,CAAA,CAAI,YAAY;IAE/D,MAAM,YAAY,GAAG,EAAE,CAAA;IACvB,MAAM,UAAU,GAAK,MAAM,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAO,UAAU,GAAG,YAAY,CAAA;IAC9C,MAAM,MAAM,GAAS,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;IAE/C,MAAM,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,GAAG,GAAY,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAO,CAAC,UAAU,GAAG,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAC3D,MAAM,UAAU,GAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IAE9C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAkB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;IACjE,MAAM,CAAC,aAAa,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;IAAC,MAAM,IAAI,CAAC,CAAA;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAkB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;IACjE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAmB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;IAChE,MAAM,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAAW,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAAE,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAK,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAAG,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAK,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAAG,MAAM,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAAK,MAAM,IAAI,CAAC,CAAA;IACvD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAkB,MAAM,IAAI,IAAI,CAAC,MAAM,CAAA;IACjE,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAAG,MAAM,IAAI,CAAC,CAAA;IAEvD,OAAO,MAAM,CAAA;AACjB,CAAC,CAAA;AAED,uBAAuB;AACvB,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,EAAE;IACrC,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,MAAM,QAAQ,GAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAAC,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAAC,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,OAAO,GAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAAC,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,WAAW,GAAI,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,UAAU,GAAK,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,UAAU,GAAK,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,QAAQ,GAAO,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,IAAI,GAAW,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAAC,MAAM,IAAI,CAAC,CAAA;IAChF,MAAM,UAAU,GAAK,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAAoB,MAAM,IAAI,CAAC,CAAA;IAEhF,OAAO;QACH,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW;QAChE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU;KACzE,CAAA;AACL,CAAC,CAAA;AAED,iDAAiD;AACjD,MAAqB,iBAAkB,SAAQ,yBAAc;IACzD,kCAAkC;IAC3B,MAAM,CAAC,IAAI,GAAG,KAAK,CAAA;IAE1B,sBAAsB;IACtB,YAAa,EAAU,EAAE,GAA4B,EAAE,IAA6B,EAAE,IAAW;QAC7F,KAAK,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;QAE1B,6CAA6C;QAC7C,IAAI,CAAC,SAAS,CAAC;YACX,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE;SAChF,CAAC,CAAA;QAEF,wCAAwC;QACxC,IAAI,CAAC,KAAK,GAAI,OAAO,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;IACzB,CAAC;IAED,iBAAiB;IACjB,KAAK,CAAC,IAAI;QACN,oCAAoC;QACpC,MAAM,IAAI,GAAG,IAAI,CAAA;QACjB,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAM,CAAC,SAAS,CAAC;YAC/B,kBAAkB,EAAE,IAAI;YACxB,kBAAkB,EAAE,IAAI;YACxB,aAAa,EAAO,KAAK;YACzB,aAAa,EAAO,CAAC;YACrB,SAAS,CAAE,KAAsB,EAAE,QAAQ,EAAE,QAAQ;gBACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;oBAC/B,QAAQ,CAAC,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,CAAA;qBAChD,IAAI,UAAU,EAAE,CAAC;oBAClB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAChC;;;;;2DAKmC;wBACnC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,EAAE;4BACnC,WAAW,EAAE,MAAM,CAAC,SAAS;4BAC7B,QAAQ,EAAK,IAAI,CAAC,MAAM,CAAC,aAAa;4BACtC,UAAU,EAAG,IAAI,CAAC,MAAM,CAAC,eAAe;4BACxC,QAAQ,EAAK,IAAI,CAAC,MAAM,CAAC,aAAa;yBACzC,CAAC,CAAA;wBACF,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;wBACjC,WAAW,CAAC,OAAO,GAAG,YAAY,CAAA;wBAClC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;wBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAChB,QAAQ,EAAE,CAAA;oBACd,CAAC;yBACI,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;wBACrC,kCAAkC;wBAClC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;wBAC3C,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB;4BACjC,eAAe,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gCAClD,IAAI,GAAI,MAAM,CAAC,WAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG;4BAC1E,YAAY,MAAM,CAAC,QAAQ,GAAG;4BAC9B,cAAc,MAAM,CAAC,UAAU,GAAG;4BAClC,YAAY,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;wBAClC,IAAI,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,SAAS;4BACvC,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAA;wBAClD,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE;4BACtB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;wBACtD,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK;4BAC3B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;wBACzD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC;4BACrB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;wBACpD,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;wBAC1C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;wBAChB,QAAQ,EAAE,CAAA;oBACd,CAAC;;wBAEG,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAA;gBACvE,CAAC;qBACI,CAAC;oBACF,mCAAmC;oBACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;oBAChB,QAAQ,EAAE,CAAA;gBACd,CAAC;gBACD,UAAU,GAAG,KAAK,CAAA;YACtB,CAAC;YACD,KAAK,CAAE,QAAQ;gBACX,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACf,QAAQ,EAAE,CAAA;YACd,CAAC;SACJ,CAAC,CAAA;IACN,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,KAAK;QACP,uBAAuB;QACvB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAChC,IAAI,IAAI,CAAC,MAAM,YAAY,qBAAM,CAAC,MAAM;oBACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA,CAAC,CAAC,CAAC,CAAA;;oBAEpC,OAAO,EAAE,CAAA;YACjB,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;YACrB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QACtB,CAAC;IACL,CAAC;;AAtGL,oCAuGC"}
@@ -1,15 +0,0 @@
1
- import SpeechFlowNode from "./speechflow-node";
2
- export default class SpeechFlowNodeDeepgram extends SpeechFlowNode {
3
- static name: string;
4
- private dg;
5
- constructor(id: string, cfg: {
6
- [id: string]: any;
7
- }, opts: {
8
- [id: string]: any;
9
- }, args: any[]);
10
- status(): Promise<{
11
- balance: string;
12
- }>;
13
- open(): Promise<void>;
14
- close(): Promise<void>;
15
- }