speechflow 1.4.5 → 1.5.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 (166) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +220 -7
  3. package/etc/claude.md +70 -0
  4. package/etc/speechflow.yaml +5 -3
  5. package/etc/stx.conf +7 -0
  6. package/package.json +7 -6
  7. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.d.ts +1 -0
  8. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +155 -0
  9. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -0
  10. package/speechflow-cli/dst/speechflow-node-a2a-compressor.d.ts +15 -0
  11. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +287 -0
  12. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -0
  13. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.d.ts +1 -0
  14. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js +208 -0
  15. package/speechflow-cli/dst/speechflow-node-a2a-dynamics-wt.js.map +1 -0
  16. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.d.ts +15 -0
  17. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js +312 -0
  18. package/speechflow-cli/dst/speechflow-node-a2a-dynamics.js.map +1 -0
  19. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.d.ts +1 -0
  20. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +161 -0
  21. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -0
  22. package/speechflow-cli/dst/speechflow-node-a2a-expander.d.ts +13 -0
  23. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +208 -0
  24. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -0
  25. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +13 -3
  26. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  27. package/speechflow-cli/dst/speechflow-node-a2a-filler.d.ts +14 -0
  28. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +233 -0
  29. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -0
  30. package/speechflow-cli/dst/speechflow-node-a2a-gain.d.ts +12 -0
  31. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +125 -0
  32. package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -0
  33. package/speechflow-cli/dst/speechflow-node-a2a-gender.d.ts +0 -1
  34. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +28 -12
  35. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  36. package/speechflow-cli/dst/speechflow-node-a2a-meter.d.ts +1 -0
  37. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +12 -8
  38. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  39. package/speechflow-cli/dst/speechflow-node-a2a-mute.js +2 -1
  40. package/speechflow-cli/dst/speechflow-node-a2a-mute.js.map +1 -1
  41. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.d.ts +1 -0
  42. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js +55 -0
  43. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise-wt.js.map +1 -0
  44. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.d.ts +14 -0
  45. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +184 -0
  46. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -0
  47. package/speechflow-cli/dst/speechflow-node-a2a-speex.d.ts +14 -0
  48. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +156 -0
  49. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -0
  50. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +3 -3
  51. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  52. package/speechflow-cli/dst/speechflow-node-a2a-wav.js +22 -17
  53. package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
  54. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.d.ts +18 -0
  55. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js +317 -0
  56. package/speechflow-cli/dst/speechflow-node-a2t-awstranscribe.js.map +1 -0
  57. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +15 -13
  58. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  59. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.d.ts +19 -0
  60. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js +351 -0
  61. package/speechflow-cli/dst/speechflow-node-a2t-openaitranscribe.js.map +1 -0
  62. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.d.ts +16 -0
  63. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js +171 -0
  64. package/speechflow-cli/dst/speechflow-node-t2a-awspolly.js.map +1 -0
  65. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +19 -14
  66. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  67. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +11 -6
  68. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  69. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.d.ts +13 -0
  70. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js +141 -0
  71. package/speechflow-cli/dst/speechflow-node-t2t-awstranslate.js.map +1 -0
  72. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +13 -15
  73. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
  74. package/speechflow-cli/dst/speechflow-node-t2t-format.js +10 -15
  75. package/speechflow-cli/dst/speechflow-node-t2t-format.js.map +1 -1
  76. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +44 -31
  77. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
  78. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +44 -45
  79. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
  80. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +8 -8
  81. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  82. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +10 -12
  83. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  84. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +22 -27
  85. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
  86. package/speechflow-cli/dst/speechflow-node-x2x-filter.d.ts +1 -0
  87. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +50 -15
  88. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  89. package/speechflow-cli/dst/speechflow-node-x2x-trace.js +17 -18
  90. package/speechflow-cli/dst/speechflow-node-x2x-trace.js.map +1 -1
  91. package/speechflow-cli/dst/speechflow-node-xio-device.js +13 -21
  92. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  93. package/speechflow-cli/dst/speechflow-node-xio-mqtt.d.ts +1 -0
  94. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +22 -16
  95. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  96. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +19 -19
  97. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  98. package/speechflow-cli/dst/speechflow-node.d.ts +6 -3
  99. package/speechflow-cli/dst/speechflow-node.js +13 -2
  100. package/speechflow-cli/dst/speechflow-node.js.map +1 -1
  101. package/speechflow-cli/dst/speechflow-utils-audio-wt.d.ts +1 -0
  102. package/speechflow-cli/dst/speechflow-utils-audio-wt.js +124 -0
  103. package/speechflow-cli/dst/speechflow-utils-audio-wt.js.map +1 -0
  104. package/speechflow-cli/dst/speechflow-utils-audio.d.ts +13 -0
  105. package/speechflow-cli/dst/speechflow-utils-audio.js +137 -0
  106. package/speechflow-cli/dst/speechflow-utils-audio.js.map +1 -0
  107. package/speechflow-cli/dst/speechflow-utils.d.ts +18 -0
  108. package/speechflow-cli/dst/speechflow-utils.js +123 -35
  109. package/speechflow-cli/dst/speechflow-utils.js.map +1 -1
  110. package/speechflow-cli/dst/speechflow.js +69 -14
  111. package/speechflow-cli/dst/speechflow.js.map +1 -1
  112. package/speechflow-cli/etc/oxlint.jsonc +112 -11
  113. package/speechflow-cli/etc/stx.conf +2 -2
  114. package/speechflow-cli/etc/tsconfig.json +1 -1
  115. package/speechflow-cli/package.d/@shiguredo+rnnoise-wasm+2025.1.5.patch +25 -0
  116. package/speechflow-cli/package.json +102 -94
  117. package/speechflow-cli/src/lib.d.ts +24 -0
  118. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +151 -0
  119. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +303 -0
  120. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +158 -0
  121. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +212 -0
  122. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +13 -3
  123. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +223 -0
  124. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +98 -0
  125. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +31 -17
  126. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +13 -9
  127. package/speechflow-cli/src/speechflow-node-a2a-mute.ts +3 -2
  128. package/speechflow-cli/src/speechflow-node-a2a-rnnoise-wt.ts +62 -0
  129. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +164 -0
  130. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +137 -0
  131. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +3 -3
  132. package/speechflow-cli/src/speechflow-node-a2a-wav.ts +20 -13
  133. package/speechflow-cli/src/speechflow-node-a2t-awstranscribe.ts +308 -0
  134. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +15 -13
  135. package/speechflow-cli/src/speechflow-node-a2t-openaitranscribe.ts +337 -0
  136. package/speechflow-cli/src/speechflow-node-t2a-awspolly.ts +187 -0
  137. package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +19 -14
  138. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +12 -7
  139. package/speechflow-cli/src/speechflow-node-t2t-awstranslate.ts +152 -0
  140. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +13 -15
  141. package/speechflow-cli/src/speechflow-node-t2t-format.ts +10 -15
  142. package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +55 -42
  143. package/speechflow-cli/src/speechflow-node-t2t-openai.ts +58 -58
  144. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +10 -10
  145. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +15 -16
  146. package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +27 -32
  147. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +20 -16
  148. package/speechflow-cli/src/speechflow-node-x2x-trace.ts +20 -19
  149. package/speechflow-cli/src/speechflow-node-xio-device.ts +15 -23
  150. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +23 -16
  151. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +19 -19
  152. package/speechflow-cli/src/speechflow-node.ts +21 -8
  153. package/speechflow-cli/src/speechflow-utils-audio-wt.ts +172 -0
  154. package/speechflow-cli/src/speechflow-utils-audio.ts +147 -0
  155. package/speechflow-cli/src/speechflow-utils.ts +125 -32
  156. package/speechflow-cli/src/speechflow.ts +74 -17
  157. package/speechflow-ui-db/dst/index.js +31 -31
  158. package/speechflow-ui-db/etc/eslint.mjs +0 -1
  159. package/speechflow-ui-db/etc/tsc-client.json +3 -3
  160. package/speechflow-ui-db/package.json +11 -10
  161. package/speechflow-ui-db/src/app.vue +20 -6
  162. package/speechflow-ui-st/dst/index.js +26 -26
  163. package/speechflow-ui-st/etc/eslint.mjs +0 -1
  164. package/speechflow-ui-st/etc/tsc-client.json +3 -3
  165. package/speechflow-ui-st/package.json +11 -10
  166. package/speechflow-ui-st/src/app.vue +5 -12
@@ -0,0 +1,287 @@
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 node_web_audio_api_1 = require("node-web-audio-api");
49
+ /* internal dependencies */
50
+ const speechflow_node_1 = __importDefault(require("./speechflow-node"));
51
+ const utils = __importStar(require("./speechflow-utils"));
52
+ const speechflow_utils_audio_1 = require("./speechflow-utils-audio");
53
+ /* audio compressor class */
54
+ class AudioCompressor extends speechflow_utils_audio_1.WebAudio {
55
+ /* internal state */
56
+ type;
57
+ mode;
58
+ config;
59
+ compressorNode = null;
60
+ gainNode = null;
61
+ /* construct object */
62
+ constructor(sampleRate, channels, type = "standalone", mode = "compress", config = {}) {
63
+ super(sampleRate, channels);
64
+ /* store type and mode */
65
+ this.type = type;
66
+ this.mode = mode;
67
+ /* store configuration */
68
+ this.config = {
69
+ thresholdDb: config.thresholdDb ?? -23,
70
+ ratio: config.ratio ?? 4.0,
71
+ attackMs: config.attackMs ?? 10,
72
+ releaseMs: config.releaseMs ?? 50,
73
+ kneeDb: config.kneeDb ?? 6.0,
74
+ makeupDb: config.makeupDb ?? 0
75
+ };
76
+ }
77
+ /* setup object */
78
+ async setup() {
79
+ await super.setup();
80
+ /* add audio worklet module */
81
+ const url = node_path_1.default.resolve(__dirname, "speechflow-node-a2a-compressor-wt.js");
82
+ await this.audioContext.audioWorklet.addModule(url);
83
+ /* determine operation modes */
84
+ const needsCompressor = (this.type === "standalone" && this.mode === "compress") ||
85
+ (this.type === "sidechain" && this.mode === "measure");
86
+ const needsGain = (this.type === "standalone" && this.mode === "compress") ||
87
+ (this.type === "sidechain" && this.mode === "adjust");
88
+ /* create compressor worklet node */
89
+ if (needsCompressor) {
90
+ this.compressorNode = new node_web_audio_api_1.AudioWorkletNode(this.audioContext, "compressor", {
91
+ numberOfInputs: 1,
92
+ numberOfOutputs: 1,
93
+ processorOptions: {
94
+ sampleRate: this.audioContext.sampleRate
95
+ }
96
+ });
97
+ }
98
+ /* create gain node */
99
+ if (needsGain)
100
+ this.gainNode = this.audioContext.createGain();
101
+ /* connect nodes (according to type and mode) */
102
+ if (this.type === "standalone" && this.mode === "compress") {
103
+ this.sourceNode.connect(this.compressorNode);
104
+ this.compressorNode.connect(this.gainNode);
105
+ this.gainNode.connect(this.captureNode);
106
+ }
107
+ else if (this.type === "sidechain" && this.mode === "measure") {
108
+ this.sourceNode.connect(this.compressorNode);
109
+ }
110
+ else if (this.type === "sidechain" && this.mode === "adjust") {
111
+ this.sourceNode.connect(this.gainNode);
112
+ this.gainNode.connect(this.captureNode);
113
+ }
114
+ /* configure compressor worklet node */
115
+ const currentTime = this.audioContext.currentTime;
116
+ if (needsCompressor) {
117
+ const node = this.compressorNode;
118
+ const params = node.parameters;
119
+ params.get("threshold").setValueAtTime(this.config.thresholdDb, currentTime);
120
+ params.get("ratio").setValueAtTime(this.config.ratio, currentTime);
121
+ params.get("attack").setValueAtTime(this.config.attackMs / 1000, currentTime);
122
+ params.get("release").setValueAtTime(this.config.releaseMs / 1000, currentTime);
123
+ params.get("knee").setValueAtTime(this.config.kneeDb, currentTime);
124
+ params.get("makeup").setValueAtTime(this.config.makeupDb, currentTime);
125
+ }
126
+ /* configure gain node */
127
+ if (needsGain) {
128
+ const gain = Math.pow(10, this.config.makeupDb / 20);
129
+ this.gainNode.gain.setValueAtTime(gain, currentTime);
130
+ }
131
+ }
132
+ /* get the current gain reduction */
133
+ getGainReduction() {
134
+ const processor = this.compressorNode?.port?.processor;
135
+ return processor?.reduction ?? 0;
136
+ }
137
+ /* set the current gain */
138
+ setGain(decibel) {
139
+ const gain = Math.pow(10, decibel / 20);
140
+ this.gainNode?.gain.setTargetAtTime(gain, this.audioContext.currentTime, 0.002);
141
+ }
142
+ /* destroy the compressor */
143
+ async destroy() {
144
+ await super.destroy();
145
+ /* destroy nodes */
146
+ if (this.compressorNode !== null) {
147
+ this.compressorNode.disconnect();
148
+ this.compressorNode = null;
149
+ }
150
+ if (this.gainNode !== null) {
151
+ this.gainNode.disconnect();
152
+ this.gainNode = null;
153
+ }
154
+ }
155
+ }
156
+ /* SpeechFlow node for compression in audio-to-audio passing */
157
+ class SpeechFlowNodeCompressor extends speechflow_node_1.default {
158
+ /* declare official node name */
159
+ static name = "compressor";
160
+ /* internal state */
161
+ destroyed = false;
162
+ compressor = null;
163
+ bus = null;
164
+ intervalId = null;
165
+ /* construct node */
166
+ constructor(id, cfg, opts, args) {
167
+ super(id, cfg, opts, args);
168
+ /* declare node configuration parameters */
169
+ this.configure({
170
+ type: { type: "string", val: "standalone", match: /^(?:standalone|sidechain)$/ },
171
+ mode: { type: "string", val: "compress", match: /^(?:compress|measure|adjust)$/ },
172
+ bus: { type: "string", val: "compressor", match: /^.+$/ },
173
+ thresholdDb: { type: "number", val: -23, match: (n) => n <= 0 && n >= -100 },
174
+ ratio: { type: "number", val: 4.0, match: (n) => n >= 1 && n <= 20 },
175
+ attackMs: { type: "number", val: 10, match: (n) => n >= 0 && n <= 1000 },
176
+ releaseMs: { type: "number", val: 50, match: (n) => n >= 0 && n <= 1000 },
177
+ kneeDb: { type: "number", val: 6.0, match: (n) => n >= 0 && n <= 40 },
178
+ makeupDb: { type: "number", val: 0, match: (n) => n >= -24 && n <= 24 }
179
+ });
180
+ /* sanity check mode and role */
181
+ if (this.params.type === "standalone" && this.params.mode !== "compress")
182
+ throw new Error("type \"standalone\" implies mode \"compress\"");
183
+ if (this.params.type === "sidechain" && this.params.mode === "compress")
184
+ throw new Error("type \"sidechain\" implies mode \"measure\" or \"adjust\"");
185
+ /* declare node input/output format */
186
+ this.input = "audio";
187
+ this.output = "audio";
188
+ }
189
+ /* open node */
190
+ async open() {
191
+ /* clear destruction flag */
192
+ this.destroyed = false;
193
+ /* setup compressor */
194
+ this.compressor = new AudioCompressor(this.config.audioSampleRate, this.config.audioChannels, this.params.type, this.params.mode, {
195
+ thresholdDb: this.params.thresholdDb,
196
+ ratio: this.params.ratio,
197
+ attackMs: this.params.attackMs,
198
+ releaseMs: this.params.releaseMs,
199
+ kneeDb: this.params.kneeDb,
200
+ makeupDb: this.params.makeupDb
201
+ });
202
+ await this.compressor.setup();
203
+ /* optionally establish sidechain processing */
204
+ if (this.params.type === "sidechain") {
205
+ this.bus = this.accessBus(this.params.bus);
206
+ if (this.params.mode === "measure") {
207
+ this.intervalId = setInterval(() => {
208
+ const decibel = this.compressor?.getGainReduction();
209
+ this.bus?.emit("sidechain-decibel", decibel);
210
+ }, 10);
211
+ }
212
+ else if (this.params.mode === "adjust") {
213
+ this.bus.on("sidechain-decibel", (decibel) => {
214
+ this.compressor?.setGain(decibel);
215
+ });
216
+ }
217
+ }
218
+ /* establish a transform stream */
219
+ const self = this;
220
+ this.stream = new node_stream_1.default.Transform({
221
+ readableObjectMode: true,
222
+ writableObjectMode: true,
223
+ decodeStrings: false,
224
+ transform(chunk, encoding, callback) {
225
+ if (self.destroyed) {
226
+ callback(new Error("stream already destroyed"));
227
+ return;
228
+ }
229
+ if (!Buffer.isBuffer(chunk.payload))
230
+ callback(new Error("invalid chunk payload type"));
231
+ else {
232
+ /* compress chunk */
233
+ const payload = utils.convertBufToI16(chunk.payload);
234
+ self.compressor?.process(payload).then((result) => {
235
+ if (self.destroyed)
236
+ throw new Error("stream already destroyed");
237
+ if ((self.params.type === "standalone" && self.params.mode === "compress") ||
238
+ (self.params.type === "sidechain" && self.params.mode === "adjust")) {
239
+ /* take over compressed data */
240
+ const payload = utils.convertI16ToBuf(result);
241
+ chunk.payload = payload;
242
+ }
243
+ this.push(chunk);
244
+ callback();
245
+ }).catch((error) => {
246
+ callback(new Error(`compression failed: ${error}`));
247
+ });
248
+ }
249
+ },
250
+ final(callback) {
251
+ if (self.destroyed) {
252
+ callback();
253
+ return;
254
+ }
255
+ this.push(null);
256
+ callback();
257
+ }
258
+ });
259
+ }
260
+ /* close node */
261
+ async close() {
262
+ /* indicate destruction */
263
+ this.destroyed = true;
264
+ /* clear interval */
265
+ if (this.intervalId !== null) {
266
+ clearInterval(this.intervalId);
267
+ this.intervalId = null;
268
+ }
269
+ /* destroy bus */
270
+ if (this.bus !== null) {
271
+ this.bus.removeAllListeners();
272
+ this.bus = null;
273
+ }
274
+ /* destroy compressor */
275
+ if (this.compressor !== null) {
276
+ await this.compressor.destroy();
277
+ this.compressor = null;
278
+ }
279
+ /* close stream */
280
+ if (this.stream !== null) {
281
+ this.stream.destroy();
282
+ this.stream = null;
283
+ }
284
+ }
285
+ }
286
+ exports.default = SpeechFlowNodeCompressor;
287
+ //# sourceMappingURL=speechflow-node-a2a-compressor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-compressor.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-compressor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,208 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ const utils = __importStar(require("./speechflow-utils"));
42
+ /* unified dynamics processor with compression and expansion */
43
+ class DynamicsProcessor extends AudioWorkletProcessor {
44
+ /* internal state */
45
+ env = [];
46
+ sampleRate;
47
+ reduction = 0;
48
+ /* eslint no-undef: off */
49
+ static get parameterDescriptors() {
50
+ return [
51
+ { name: "mode", defaultValue: 0, minValue: 0, maxValue: 2, automationRate: "k-rate" }, // 0=compress, 1=expand, 2=both
52
+ { name: "threshold", defaultValue: -23, minValue: -100, maxValue: 0, automationRate: "k-rate" }, // dBFS
53
+ { name: "ratio", defaultValue: 4.0, minValue: 1.0, maxValue: 20, automationRate: "k-rate" }, // compression/expansion ratio
54
+ { name: "attack", defaultValue: 0.010, minValue: 0.0, maxValue: 1, automationRate: "k-rate" }, // seconds
55
+ { name: "release", defaultValue: 0.050, minValue: 0.0, maxValue: 1, automationRate: "k-rate" }, // seconds
56
+ { name: "knee", defaultValue: 6.0, minValue: 0.0, maxValue: 40, automationRate: "k-rate" }, // dB
57
+ { name: "makeup", defaultValue: 0.0, minValue: -24, maxValue: 24, automationRate: "k-rate" }, // dB
58
+ { name: "expandThreshold", defaultValue: -45, minValue: -100, maxValue: 0, automationRate: "k-rate" }, // dBFS for expansion
59
+ { name: "expandRatio", defaultValue: 4.0, minValue: 1.0, maxValue: 20, automationRate: "k-rate" }, // expansion ratio
60
+ { name: "floor", defaultValue: -64, minValue: -100, maxValue: 0, automationRate: "k-rate" } // dBFS minimum output level
61
+ ];
62
+ }
63
+ /* class constructor for custom option processing */
64
+ constructor(options) {
65
+ super();
66
+ const { sampleRate } = options.processorOptions;
67
+ this.sampleRate = sampleRate;
68
+ }
69
+ /* determine compression gain difference */
70
+ compressGainDBFor(levelDB, thresholdDB, ratio, kneeDB) {
71
+ /* short-circuit for unreasonable ratio */
72
+ if (ratio <= 1.0)
73
+ return 0;
74
+ /* determine thresholds */
75
+ const halfKnee = kneeDB * 0.5;
76
+ const belowThr = levelDB < thresholdDB;
77
+ const aboveKnee = levelDB >= (thresholdDB + halfKnee);
78
+ /* short-circuit for no compression (below threshold) */
79
+ if (belowThr)
80
+ return 0;
81
+ /* apply soft-knee */
82
+ if (kneeDB > 0 && !aboveKnee) {
83
+ const x = (levelDB - thresholdDB) / kneeDB;
84
+ const idealGainDB = (thresholdDB + (levelDB - thresholdDB) / ratio) - levelDB;
85
+ return idealGainDB * x * x;
86
+ }
87
+ /* determine target level */
88
+ const targetOut = thresholdDB + (levelDB - thresholdDB) / ratio;
89
+ /* return gain difference */
90
+ return targetOut - levelDB;
91
+ }
92
+ /* determine expansion gain difference */
93
+ expandGainDBFor(levelDB, thresholdDB, ratio, kneeDB) {
94
+ /* short-circuit for unreasonable ratio */
95
+ if (ratio <= 1.0)
96
+ return 0;
97
+ /* determine thresholds */
98
+ const halfKnee = kneeDB * 0.5;
99
+ const belowKnee = levelDB < (thresholdDB - halfKnee);
100
+ const aboveThr = levelDB >= thresholdDB;
101
+ /* short-circuit for no expansion (above threshold) */
102
+ if (aboveThr)
103
+ return 0;
104
+ /* apply soft-knee */
105
+ if (kneeDB > 0 && !belowKnee) {
106
+ const x = (levelDB - (thresholdDB - halfKnee)) / kneeDB;
107
+ const idealGainDB = (thresholdDB + (levelDB - thresholdDB) * ratio) - levelDB;
108
+ return idealGainDB * x * x;
109
+ }
110
+ /* determine target level */
111
+ const targetOut = thresholdDB + (levelDB - thresholdDB) / ratio;
112
+ /* return gain difference */
113
+ return targetOut - levelDB;
114
+ }
115
+ /* update envelope (smoothed amplitude contour) for single channel */
116
+ updateEnvelopeForChannel(chan, samples, attack, release) {
117
+ /* fetch old envelope value */
118
+ if (this.env[chan] === undefined)
119
+ this.env[chan] = 1e-12;
120
+ let env = this.env[chan];
121
+ /* calculate attack/release alpha values */
122
+ const alphaA = Math.exp(-1 / (attack * this.sampleRate));
123
+ const alphaR = Math.exp(-1 / (release * this.sampleRate));
124
+ /* iterate over all samples and calculate RMS */
125
+ for (const s of samples) {
126
+ const x = Math.abs(s);
127
+ const det = x * x;
128
+ if (det > env)
129
+ env = alphaA * env + (1 - alphaA) * det;
130
+ else
131
+ env = alphaR * env + (1 - alphaR) * det;
132
+ }
133
+ this.env[chan] = Math.sqrt(Math.max(env, 1e-12));
134
+ }
135
+ /* process a single sample frame */
136
+ process(inputs, outputs, parameters) {
137
+ /* sanity check */
138
+ const input = inputs[0];
139
+ const output = outputs[0];
140
+ if (!input || input.length === 0 || !output)
141
+ return true;
142
+ /* determine number of channels */
143
+ const nCh = input.length;
144
+ /* reset envelope array if channel count changed */
145
+ if (nCh !== this.env.length)
146
+ this.env = [];
147
+ /* initially just copy input to output (pass-through) */
148
+ for (let c = 0; c < output.length; c++) {
149
+ if (!output[c] || !input[c])
150
+ continue;
151
+ output[c].set(input[c]);
152
+ }
153
+ /* fetch parameters */
154
+ const mode = Math.round(parameters["mode"][0]);
155
+ const thresholdDB = parameters["threshold"][0];
156
+ const ratio = parameters["ratio"][0];
157
+ const kneeDB = parameters["knee"][0];
158
+ const attackS = Math.max(parameters["attack"][0], 1 / this.sampleRate);
159
+ const releaseS = Math.max(parameters["release"][0], 1 / this.sampleRate);
160
+ const makeupDB = parameters["makeup"][0];
161
+ const expandThresholdDB = parameters["expandThreshold"][0];
162
+ const expandRatio = parameters["expandRatio"][0];
163
+ const floorDB = parameters["floor"][0];
164
+ /* update envelope per channel */
165
+ for (let ch = 0; ch < nCh; ch++)
166
+ this.updateEnvelopeForChannel(ch, input[ch], attackS, releaseS);
167
+ /* determine linear value from decibel makeup value */
168
+ const makeUpLin = utils.dB2lin(makeupDB);
169
+ /* iterate over all channels */
170
+ this.reduction = 0;
171
+ for (let ch = 0; ch < nCh; ch++) {
172
+ const levelDB = utils.lin2dB(this.env[ch]);
173
+ let totalGainDB = 0;
174
+ /* apply compression if needed */
175
+ if (mode === 0 || mode === 2) {
176
+ const compressGainDB = this.compressGainDBFor(levelDB, thresholdDB, ratio, kneeDB);
177
+ totalGainDB += compressGainDB;
178
+ /* on first channel, calculate reduction for compression */
179
+ if (ch === 0)
180
+ this.reduction = Math.min(0, compressGainDB);
181
+ }
182
+ /* apply expansion if needed */
183
+ if (mode === 1 || mode === 2) {
184
+ const expandGainDB = this.expandGainDBFor(levelDB, expandThresholdDB, expandRatio, kneeDB);
185
+ totalGainDB += expandGainDB;
186
+ }
187
+ /* calculate total gain with makeup */
188
+ let gainLin = utils.dB2lin(totalGainDB) * makeUpLin;
189
+ /* do not attenuate below floor (for expansion) */
190
+ if (mode === 1 || mode === 2) {
191
+ const expectedOutLevelDB = levelDB + totalGainDB + makeupDB;
192
+ if (expectedOutLevelDB < floorDB) {
193
+ const neededLiftDB = floorDB - expectedOutLevelDB;
194
+ gainLin /= utils.dB2lin(neededLiftDB);
195
+ }
196
+ }
197
+ /* apply gain change to channel */
198
+ const inp = input[ch];
199
+ const out = output[ch];
200
+ for (let i = 0; i < inp.length; i++)
201
+ out[i] = inp[i] * gainLin;
202
+ }
203
+ return true;
204
+ }
205
+ }
206
+ /* register the new audio nodes */
207
+ registerProcessor("dynamics", DynamicsProcessor);
208
+ //# sourceMappingURL=speechflow-node-a2a-dynamics-wt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-dynamics-wt.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-dynamics-wt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeDynamics extends SpeechFlowNode {
3
+ static name: string;
4
+ private destroyed;
5
+ private dynamics;
6
+ private bus;
7
+ private intervalId;
8
+ constructor(id: string, cfg: {
9
+ [id: string]: any;
10
+ }, opts: {
11
+ [id: string]: any;
12
+ }, args: any[]);
13
+ open(): Promise<void>;
14
+ close(): Promise<void>;
15
+ }