speechflow 1.6.4 → 1.6.6

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 (178) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +28 -3
  3. package/etc/speechflow.yaml +15 -13
  4. package/etc/stx.conf +5 -0
  5. package/package.json +5 -5
  6. package/speechflow-cli/dst/speechflow-main-api.js +3 -7
  7. package/speechflow-cli/dst/speechflow-main-api.js.map +1 -1
  8. package/speechflow-cli/dst/speechflow-main-graph.js +1 -1
  9. package/speechflow-cli/dst/speechflow-main.js +6 -0
  10. package/speechflow-cli/dst/speechflow-main.js.map +1 -1
  11. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js +1 -21
  12. package/speechflow-cli/dst/speechflow-node-a2a-compressor-wt.js.map +1 -1
  13. package/speechflow-cli/dst/speechflow-node-a2a-compressor.d.ts +1 -1
  14. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js +12 -11
  15. package/speechflow-cli/dst/speechflow-node-a2a-compressor.js.map +1 -1
  16. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js +1 -21
  17. package/speechflow-cli/dst/speechflow-node-a2a-expander-wt.js.map +1 -1
  18. package/speechflow-cli/dst/speechflow-node-a2a-expander.d.ts +1 -1
  19. package/speechflow-cli/dst/speechflow-node-a2a-expander.js +12 -11
  20. package/speechflow-cli/dst/speechflow-node-a2a-expander.js.map +1 -1
  21. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +4 -10
  22. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -1
  23. package/speechflow-cli/dst/speechflow-node-a2a-filler.d.ts +1 -1
  24. package/speechflow-cli/dst/speechflow-node-a2a-filler.js +18 -16
  25. package/speechflow-cli/dst/speechflow-node-a2a-filler.js.map +1 -1
  26. package/speechflow-cli/dst/speechflow-node-a2a-gain.d.ts +1 -1
  27. package/speechflow-cli/dst/speechflow-node-a2a-gain.js +8 -8
  28. package/speechflow-cli/dst/speechflow-node-a2a-gain.js.map +1 -1
  29. package/speechflow-cli/dst/speechflow-node-a2a-gender.d.ts +1 -1
  30. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +70 -60
  31. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -1
  32. package/speechflow-cli/dst/speechflow-node-a2a-meter.d.ts +1 -1
  33. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +58 -42
  34. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -1
  35. package/speechflow-cli/dst/speechflow-node-a2a-mute.d.ts +1 -1
  36. package/speechflow-cli/dst/speechflow-node-a2a-mute.js +44 -10
  37. package/speechflow-cli/dst/speechflow-node-a2a-mute.js.map +1 -1
  38. package/speechflow-cli/dst/speechflow-node-a2a-pitch.d.ts +13 -0
  39. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js +213 -0
  40. package/speechflow-cli/dst/speechflow-node-a2a-pitch.js.map +1 -0
  41. package/speechflow-cli/dst/speechflow-node-a2a-pitch2-wt.js +149 -0
  42. package/speechflow-cli/dst/speechflow-node-a2a-pitch2-wt.js.map +1 -0
  43. package/speechflow-cli/dst/speechflow-node-a2a-pitch2.d.ts +13 -0
  44. package/speechflow-cli/dst/speechflow-node-a2a-pitch2.js +202 -0
  45. package/speechflow-cli/dst/speechflow-node-a2a-pitch2.js.map +1 -0
  46. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.d.ts +1 -1
  47. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js +13 -11
  48. package/speechflow-cli/dst/speechflow-node-a2a-rnnoise.js.map +1 -1
  49. package/speechflow-cli/dst/speechflow-node-a2a-speex.d.ts +1 -1
  50. package/speechflow-cli/dst/speechflow-node-a2a-speex.js +13 -12
  51. package/speechflow-cli/dst/speechflow-node-a2a-speex.js.map +1 -1
  52. package/speechflow-cli/dst/speechflow-node-a2a-vad.d.ts +1 -1
  53. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +26 -25
  54. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -1
  55. package/speechflow-cli/dst/speechflow-node-a2a-wav.js +35 -7
  56. package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -1
  57. package/speechflow-cli/dst/speechflow-node-a2t-amazon.d.ts +1 -1
  58. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js +16 -16
  59. package/speechflow-cli/dst/speechflow-node-a2t-amazon.js.map +1 -1
  60. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.d.ts +1 -1
  61. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +16 -16
  62. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -1
  63. package/speechflow-cli/dst/speechflow-node-a2t-openai.d.ts +1 -2
  64. package/speechflow-cli/dst/speechflow-node-a2t-openai.js +15 -21
  65. package/speechflow-cli/dst/speechflow-node-a2t-openai.js.map +1 -1
  66. package/speechflow-cli/dst/speechflow-node-t2a-amazon.d.ts +1 -2
  67. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js +9 -15
  68. package/speechflow-cli/dst/speechflow-node-t2a-amazon.js.map +1 -1
  69. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.d.ts +1 -2
  70. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +13 -18
  71. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -1
  72. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.d.ts +0 -1
  73. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +4 -10
  74. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -1
  75. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js +3 -3
  76. package/speechflow-cli/dst/speechflow-node-t2t-amazon.js.map +1 -1
  77. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +2 -2
  78. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -1
  79. package/speechflow-cli/dst/speechflow-node-t2t-format.js +36 -2
  80. package/speechflow-cli/dst/speechflow-node-t2t-format.js.map +1 -1
  81. package/speechflow-cli/dst/speechflow-node-t2t-google.js +2 -2
  82. package/speechflow-cli/dst/speechflow-node-t2t-google.js.map +1 -1
  83. package/speechflow-cli/dst/speechflow-node-t2t-modify.js +5 -5
  84. package/speechflow-cli/dst/speechflow-node-t2t-modify.js.map +1 -1
  85. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +3 -3
  86. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -1
  87. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +2 -2
  88. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -1
  89. package/speechflow-cli/dst/speechflow-node-t2t-sentence.d.ts +1 -1
  90. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +13 -13
  91. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -1
  92. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +8 -8
  93. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -1
  94. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +2 -2
  95. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -1
  96. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +2 -2
  97. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -1
  98. package/speechflow-cli/dst/speechflow-node-x2x-trace.d.ts +1 -1
  99. package/speechflow-cli/dst/speechflow-node-x2x-trace.js +42 -8
  100. package/speechflow-cli/dst/speechflow-node-x2x-trace.js.map +1 -1
  101. package/speechflow-cli/dst/speechflow-node-xio-device.js +6 -4
  102. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -1
  103. package/speechflow-cli/dst/speechflow-node-xio-file.js +19 -18
  104. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -1
  105. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +13 -13
  106. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -1
  107. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +8 -8
  108. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -1
  109. package/speechflow-cli/dst/speechflow-node.js +6 -6
  110. package/speechflow-cli/dst/speechflow-node.js.map +1 -1
  111. package/speechflow-cli/dst/speechflow-util-audio.d.ts +1 -0
  112. package/speechflow-cli/dst/speechflow-util-audio.js +22 -1
  113. package/speechflow-cli/dst/speechflow-util-audio.js.map +1 -1
  114. package/speechflow-cli/dst/speechflow-util-error.d.ts +1 -1
  115. package/speechflow-cli/dst/speechflow-util-error.js +7 -1
  116. package/speechflow-cli/dst/speechflow-util-error.js.map +1 -1
  117. package/speechflow-cli/dst/speechflow-util-stream.d.ts +2 -1
  118. package/speechflow-cli/dst/speechflow-util-stream.js +23 -3
  119. package/speechflow-cli/dst/speechflow-util-stream.js.map +1 -1
  120. package/speechflow-cli/etc/oxlint.jsonc +2 -1
  121. package/speechflow-cli/etc/tsconfig.json +1 -0
  122. package/speechflow-cli/package.json +20 -20
  123. package/speechflow-cli/src/speechflow-main-api.ts +6 -13
  124. package/speechflow-cli/src/speechflow-main-graph.ts +1 -1
  125. package/speechflow-cli/src/speechflow-main.ts +4 -0
  126. package/speechflow-cli/src/speechflow-node-a2a-compressor-wt.ts +1 -29
  127. package/speechflow-cli/src/speechflow-node-a2a-compressor.ts +13 -12
  128. package/speechflow-cli/src/speechflow-node-a2a-expander-wt.ts +1 -29
  129. package/speechflow-cli/src/speechflow-node-a2a-expander.ts +13 -12
  130. package/speechflow-cli/src/speechflow-node-a2a-ffmpeg.ts +4 -10
  131. package/speechflow-cli/src/speechflow-node-a2a-filler.ts +19 -17
  132. package/speechflow-cli/src/speechflow-node-a2a-gain.ts +8 -8
  133. package/speechflow-cli/src/speechflow-node-a2a-gender.ts +83 -72
  134. package/speechflow-cli/src/speechflow-node-a2a-meter.ts +66 -46
  135. package/speechflow-cli/src/speechflow-node-a2a-mute.ts +11 -10
  136. package/speechflow-cli/src/speechflow-node-a2a-pitch.ts +221 -0
  137. package/speechflow-cli/src/speechflow-node-a2a-rnnoise.ts +14 -12
  138. package/speechflow-cli/src/speechflow-node-a2a-speex.ts +14 -13
  139. package/speechflow-cli/src/speechflow-node-a2a-vad.ts +26 -25
  140. package/speechflow-cli/src/speechflow-node-a2a-wav.ts +2 -7
  141. package/speechflow-cli/src/speechflow-node-a2t-amazon.ts +16 -16
  142. package/speechflow-cli/src/speechflow-node-a2t-deepgram.ts +16 -16
  143. package/speechflow-cli/src/speechflow-node-a2t-openai.ts +15 -21
  144. package/speechflow-cli/src/speechflow-node-t2a-amazon.ts +9 -15
  145. package/speechflow-cli/src/speechflow-node-t2a-elevenlabs.ts +13 -18
  146. package/speechflow-cli/src/speechflow-node-t2a-kokoro.ts +4 -10
  147. package/speechflow-cli/src/speechflow-node-t2t-amazon.ts +3 -3
  148. package/speechflow-cli/src/speechflow-node-t2t-deepl.ts +2 -2
  149. package/speechflow-cli/src/speechflow-node-t2t-format.ts +3 -2
  150. package/speechflow-cli/src/speechflow-node-t2t-google.ts +2 -2
  151. package/speechflow-cli/src/speechflow-node-t2t-modify.ts +6 -6
  152. package/speechflow-cli/src/speechflow-node-t2t-ollama.ts +3 -3
  153. package/speechflow-cli/src/speechflow-node-t2t-openai.ts +2 -2
  154. package/speechflow-cli/src/speechflow-node-t2t-sentence.ts +13 -13
  155. package/speechflow-cli/src/speechflow-node-t2t-subtitle.ts +12 -16
  156. package/speechflow-cli/src/speechflow-node-t2t-transformers.ts +2 -2
  157. package/speechflow-cli/src/speechflow-node-x2x-filter.ts +2 -2
  158. package/speechflow-cli/src/speechflow-node-x2x-trace.ts +10 -9
  159. package/speechflow-cli/src/speechflow-node-xio-device.ts +7 -5
  160. package/speechflow-cli/src/speechflow-node-xio-file.ts +20 -19
  161. package/speechflow-cli/src/speechflow-node-xio-mqtt.ts +14 -14
  162. package/speechflow-cli/src/speechflow-node-xio-websocket.ts +11 -11
  163. package/speechflow-cli/src/speechflow-node.ts +6 -6
  164. package/speechflow-cli/src/speechflow-util-audio.ts +31 -1
  165. package/speechflow-cli/src/speechflow-util-error.ts +9 -3
  166. package/speechflow-cli/src/speechflow-util-stream.ts +31 -6
  167. package/speechflow-ui-db/dst/index.js +25 -25
  168. package/speechflow-ui-db/package.json +11 -11
  169. package/speechflow-ui-db/src/app.vue +14 -5
  170. package/speechflow-ui-st/dst/index.js +460 -25
  171. package/speechflow-ui-st/package.json +13 -13
  172. package/speechflow-ui-st/src/app.vue +8 -3
  173. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js +0 -124
  174. package/speechflow-cli/dst/speechflow-util-webaudio-wt.js.map +0 -1
  175. package/speechflow-cli/dst/speechflow-util-webaudio.d.ts +0 -13
  176. package/speechflow-cli/dst/speechflow-util-webaudio.js +0 -137
  177. package/speechflow-cli/dst/speechflow-util-webaudio.js.map +0 -1
  178. /package/speechflow-cli/dst/{speechflow-util-webaudio-wt.d.ts → speechflow-node-a2a-pitch2-wt.d.ts} +0 -0
@@ -4,6 +4,39 @@
4
4
  ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
5
  ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
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
+ })();
7
40
  var __importDefault = (this && this.__importDefault) || function (mod) {
8
41
  return (mod && mod.__esModule) ? mod : { "default": mod };
9
42
  };
@@ -12,13 +45,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
45
  const node_stream_1 = __importDefault(require("node:stream"));
13
46
  /* internal dependencies */
14
47
  const speechflow_node_1 = __importDefault(require("./speechflow-node"));
48
+ const util = __importStar(require("./speechflow-util"));
15
49
  /* SpeechFlow node for muting in audio-to-audio passing */
16
50
  class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
17
51
  /* declare official node name */
18
52
  static name = "a2a-mute";
19
53
  /* internal state */
20
54
  muteMode = "none";
21
- destroyed = false;
55
+ closing = false;
22
56
  /* construct node */
23
57
  constructor(id, cfg, opts, args) {
24
58
  super(id, cfg, opts, args);
@@ -30,7 +64,7 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
30
64
  }
31
65
  /* receive external request */
32
66
  async receiveRequest(params) {
33
- if (this.destroyed)
67
+ if (this.closing)
34
68
  throw new Error("mute: node already destroyed");
35
69
  try {
36
70
  if (params.length === 2 && params[0] === "mode") {
@@ -51,7 +85,7 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
51
85
  }
52
86
  /* change mute mode */
53
87
  setMuteMode(mode) {
54
- if (this.destroyed) {
88
+ if (this.closing) {
55
89
  this.log("warning", "attempted to set mute mode on destroyed node");
56
90
  return;
57
91
  }
@@ -61,7 +95,7 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
61
95
  /* open node */
62
96
  async open() {
63
97
  /* clear destruction flag */
64
- this.destroyed = false;
98
+ this.closing = false;
65
99
  /* establish a transform stream */
66
100
  const self = this;
67
101
  this.stream = new node_stream_1.default.Transform({
@@ -69,7 +103,7 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
69
103
  writableObjectMode: true,
70
104
  decodeStrings: false,
71
105
  transform(chunk, encoding, callback) {
72
- if (self.destroyed) {
106
+ if (self.closing) {
73
107
  callback(new Error("stream already destroyed"));
74
108
  return;
75
109
  }
@@ -94,7 +128,7 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
94
128
  }
95
129
  },
96
130
  final(callback) {
97
- if (self.destroyed) {
131
+ if (self.closing) {
98
132
  callback();
99
133
  return;
100
134
  }
@@ -105,11 +139,11 @@ class SpeechFlowNodeA2AMute extends speechflow_node_1.default {
105
139
  }
106
140
  /* close node */
107
141
  async close() {
108
- /* indicate destruction */
109
- this.destroyed = true;
110
- /* close stream */
142
+ /* indicate closing */
143
+ this.closing = true;
144
+ /* shutdown stream */
111
145
  if (this.stream !== null) {
112
- this.stream.destroy();
146
+ await util.destroyStream(this.stream);
113
147
  this.stream = null;
114
148
  }
115
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"speechflow-node-a2a-mute.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-mute.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"speechflow-node-a2a-mute.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-mute.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeA2APitch extends SpeechFlowNode {
3
+ static name: string;
4
+ private closing;
5
+ private pitchShifter;
6
+ constructor(id: string, cfg: {
7
+ [id: string]: any;
8
+ }, opts: {
9
+ [id: string]: any;
10
+ }, args: any[]);
11
+ open(): Promise<void>;
12
+ close(): Promise<void>;
13
+ }
@@ -0,0 +1,213 @@
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 util = __importStar(require("./speechflow-util"));
52
+ /* audio pitch shifter class using SoundTouch WebAudio worklet */
53
+ class AudioPitchShifter extends util.WebAudio {
54
+ /* internal state */
55
+ pitchNode = null;
56
+ config;
57
+ /* construct object */
58
+ constructor(sampleRate, channels, config = {}) {
59
+ super(sampleRate, channels);
60
+ this.config = {
61
+ rate: config.rate ?? 1.0,
62
+ tempo: config.tempo ?? 1.0,
63
+ pitch: config.pitch ?? 1.0,
64
+ semitones: config.semitones ?? 0.0
65
+ };
66
+ }
67
+ /* setup object */
68
+ async setup() {
69
+ await super.setup();
70
+ /* add SoundTouch worklet module */
71
+ const packagePath = node_path_1.default.join(__dirname, "../node_modules/@soundtouchjs/audio-worklet");
72
+ const workletPath = node_path_1.default.join(packagePath, "dist/soundtouch-worklet.js");
73
+ await this.audioContext.audioWorklet.addModule(workletPath);
74
+ /* create SoundTouch worklet node */
75
+ this.pitchNode = new node_web_audio_api_1.AudioWorkletNode(this.audioContext, "soundtouch-processor", {
76
+ numberOfInputs: 1,
77
+ numberOfOutputs: 1,
78
+ outputChannelCount: [this.channels]
79
+ });
80
+ /* set initial parameter values */
81
+ const params = this.pitchNode.parameters;
82
+ params.get("rate").value = this.config.rate;
83
+ params.get("tempo").value = this.config.tempo;
84
+ params.get("pitch").value = this.config.pitch;
85
+ params.get("pitchSemitones").value = this.config.semitones;
86
+ /* connect nodes: source -> pitch -> capture */
87
+ this.sourceNode.connect(this.pitchNode);
88
+ this.pitchNode.connect(this.captureNode);
89
+ }
90
+ /* update an audio parameter value */
91
+ updateParameter(paramName, value, configField) {
92
+ const params = this.pitchNode?.parameters;
93
+ params?.get(paramName)?.setValueAtTime(value, this.audioContext.currentTime);
94
+ this.config[configField] = value;
95
+ }
96
+ /* update rate value */
97
+ setRate(rate) {
98
+ this.updateParameter("rate", rate, "rate");
99
+ }
100
+ /* update tempo value */
101
+ setTempo(tempo) {
102
+ this.updateParameter("tempo", tempo, "tempo");
103
+ }
104
+ /* update pitch shift value */
105
+ setPitch(pitch) {
106
+ this.updateParameter("pitch", pitch, "pitch");
107
+ }
108
+ /* update pitch semitones setting */
109
+ setSemitones(semitones) {
110
+ this.updateParameter("pitchSemitones", semitones, "semitones");
111
+ }
112
+ /* destroy the pitch shifter */
113
+ async destroy() {
114
+ /* disconnect pitch node */
115
+ if (this.pitchNode !== null) {
116
+ this.pitchNode.disconnect();
117
+ this.pitchNode = null;
118
+ }
119
+ /* destroy parent */
120
+ await super.destroy();
121
+ }
122
+ }
123
+ /* SpeechFlow node for pitch adjustment using SoundTouch WebAudio */
124
+ class SpeechFlowNodeA2APitch extends speechflow_node_1.default {
125
+ /* declare official node name */
126
+ static name = "a2a-pitch";
127
+ /* internal state */
128
+ closing = false;
129
+ pitchShifter = null;
130
+ /* construct node */
131
+ constructor(id, cfg, opts, args) {
132
+ super(id, cfg, opts, args);
133
+ /* declare node configuration parameters */
134
+ this.configure({
135
+ rate: { type: "number", val: 1.0, match: (n) => n >= 0.25 && n <= 4.0 },
136
+ tempo: { type: "number", val: 1.0, match: (n) => n >= 0.25 && n <= 4.0 },
137
+ pitch: { type: "number", val: 1.0, match: (n) => n >= 0.25 && n <= 4.0 },
138
+ semitones: { type: "number", val: 0.0, match: (n) => n >= -24 && n <= 24 }
139
+ });
140
+ /* declare node input/output format */
141
+ this.input = "audio";
142
+ this.output = "audio";
143
+ }
144
+ /* open node */
145
+ async open() {
146
+ /* clear destruction flag */
147
+ this.closing = false;
148
+ /* setup pitch shifter */
149
+ this.pitchShifter = new AudioPitchShifter(this.config.audioSampleRate, this.config.audioChannels, {
150
+ rate: this.params.rate,
151
+ tempo: this.params.tempo,
152
+ pitch: this.params.pitch,
153
+ semitones: this.params.semitones
154
+ });
155
+ await this.pitchShifter.setup();
156
+ /* establish a transform stream */
157
+ const self = this;
158
+ this.stream = new node_stream_1.default.Transform({
159
+ readableObjectMode: true,
160
+ writableObjectMode: true,
161
+ decodeStrings: false,
162
+ transform(chunk, encoding, callback) {
163
+ if (self.closing) {
164
+ callback(new Error("stream already destroyed"));
165
+ return;
166
+ }
167
+ if (!Buffer.isBuffer(chunk.payload))
168
+ callback(new Error("invalid chunk payload type"));
169
+ else {
170
+ /* shift pitch of audio chunk */
171
+ const payload = util.convertBufToI16(chunk.payload, self.config.audioLittleEndian);
172
+ self.pitchShifter?.process(payload).then((result) => {
173
+ if (self.closing)
174
+ throw new Error("stream already destroyed");
175
+ /* take over pitch-shifted data */
176
+ const payload = util.convertI16ToBuf(result, self.config.audioLittleEndian);
177
+ chunk.payload = payload;
178
+ this.push(chunk);
179
+ callback();
180
+ }).catch((error) => {
181
+ if (!self.closing)
182
+ callback(util.ensureError(error, "pitch shifting failed"));
183
+ });
184
+ }
185
+ },
186
+ final(callback) {
187
+ if (self.closing) {
188
+ callback();
189
+ return;
190
+ }
191
+ this.push(null);
192
+ callback();
193
+ }
194
+ });
195
+ }
196
+ /* close node */
197
+ async close() {
198
+ /* indicate closing */
199
+ this.closing = true;
200
+ /* destroy pitch shifter */
201
+ if (this.pitchShifter !== null) {
202
+ await this.pitchShifter.destroy();
203
+ this.pitchShifter = null;
204
+ }
205
+ /* shutdown stream */
206
+ if (this.stream !== null) {
207
+ await util.destroyStream(this.stream);
208
+ this.stream = null;
209
+ }
210
+ }
211
+ }
212
+ exports.default = SpeechFlowNodeA2APitch;
213
+ //# sourceMappingURL=speechflow-node-a2a-pitch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-pitch.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-pitch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ /* pitch shifter audio worklet processor */
9
+ class PitchShifterProcessor extends AudioWorkletProcessor {
10
+ /* internal state */
11
+ shift;
12
+ frameSize;
13
+ overlap;
14
+ hopSize;
15
+ inputBuffer;
16
+ outputBuffer;
17
+ overlapBuffer;
18
+ windowFunction;
19
+ windowedBuffer;
20
+ shiftedBuffer;
21
+ inputPos = 0;
22
+ outputPos = 0;
23
+ /* worklet construction */
24
+ constructor(options) {
25
+ super();
26
+ /* get configuration from options */
27
+ const processorOptions = options.processorOptions ?? {};
28
+ this.shift = processorOptions.shift ?? 1.0;
29
+ this.frameSize = processorOptions.frameSize ?? 2048;
30
+ this.overlap = processorOptions.overlap ?? 0.5;
31
+ this.hopSize = Math.floor(this.frameSize * (1 - this.overlap));
32
+ /* initialize buffers */
33
+ this.inputBuffer = new Float32Array(this.frameSize * 2);
34
+ this.outputBuffer = new Float32Array(this.frameSize * 2);
35
+ this.overlapBuffer = new Float32Array(this.frameSize);
36
+ this.windowFunction = new Float32Array(this.frameSize);
37
+ this.windowedBuffer = new Float32Array(this.frameSize);
38
+ this.shiftedBuffer = new Float32Array(this.frameSize);
39
+ /* initialize Hann window */
40
+ for (let i = 0; i < this.frameSize; i++)
41
+ this.windowFunction[i] = 0.5 * (1 - Math.cos(2 * Math.PI * i / (this.frameSize - 1)));
42
+ }
43
+ /* static parameter descriptors */
44
+ static get parameterDescriptors() {
45
+ return [{
46
+ name: "shift",
47
+ defaultValue: 1.0,
48
+ minValue: 0.25,
49
+ maxValue: 4.0
50
+ }];
51
+ }
52
+ /* process audio frame */
53
+ process(inputs, outputs, parameters) {
54
+ /* get input and output arrays */
55
+ const input = inputs[0];
56
+ const output = outputs[0];
57
+ if (!input || !output || input.length === 0 || output.length === 0)
58
+ return true;
59
+ /* update shift parameter if provided */
60
+ const shiftParam = parameters.shift;
61
+ if (shiftParam && shiftParam.length > 0)
62
+ this.shift = shiftParam[0];
63
+ /* determine sizes */
64
+ const frameCount = input[0]?.length ?? 0;
65
+ const channelCount = Math.min(input.length, output.length);
66
+ if (frameCount === 0)
67
+ return true;
68
+ /* process each channel independently */
69
+ for (let ch = 0; ch < channelCount; ch++) {
70
+ const inputChannel = input[ch];
71
+ const outputChannel = output[ch];
72
+ /* bypass processing if no pitch shift needed */
73
+ /*
74
+ if (Math.abs(this.shift - 1.0) < 0.001) {
75
+ for (let i = 0; i < frameCount; i++)
76
+ outputChannel[i] = inputChannel[i]
77
+ continue
78
+ }
79
+ */
80
+ /* process each sample */
81
+ for (let i = 0; i < frameCount; i++) {
82
+ /* accumulate input samples */
83
+ this.inputBuffer[this.inputPos++] = inputChannel[i];
84
+ /* process when we have enough input */
85
+ if (this.inputPos >= this.frameSize) {
86
+ this.processFrame();
87
+ /* shift input buffer by hop size */
88
+ for (let j = 0; j < this.frameSize - this.hopSize; j++)
89
+ this.inputBuffer[j] = this.inputBuffer[j + this.hopSize];
90
+ this.inputPos -= this.hopSize;
91
+ }
92
+ /* output processed samples */
93
+ if (this.outputPos < this.hopSize)
94
+ outputChannel[i] = this.outputBuffer[this.outputPos++];
95
+ else
96
+ outputChannel[i] = 0;
97
+ }
98
+ }
99
+ return true;
100
+ }
101
+ /* process a single frame with pitch shifting */
102
+ processFrame() {
103
+ /* apply window to input */
104
+ for (let i = 0; i < this.frameSize; i++)
105
+ this.windowedBuffer[i] = this.inputBuffer[i] * this.windowFunction[i];
106
+ /* pitch shift using time-domain resampling */
107
+ const shifted = this.pitchShiftTimeDomain(this.windowedBuffer);
108
+ /* overlap-add synthesis - copy current overlap buffer to output */
109
+ for (let i = 0; i < this.hopSize; i++)
110
+ this.outputBuffer[i] = this.overlapBuffer[i];
111
+ /* add new frame contribution to overlap buffer */
112
+ for (let i = 0; i < this.frameSize; i++) {
113
+ if (i < this.hopSize)
114
+ this.outputBuffer[i] += shifted[i];
115
+ else
116
+ this.overlapBuffer[i - this.hopSize] = shifted[i];
117
+ }
118
+ /* reset output position */
119
+ this.outputPos = 0;
120
+ }
121
+ /* time-domain pitch shifting using resampling */
122
+ pitchShiftTimeDomain(frame) {
123
+ const output = this.shiftedBuffer;
124
+ if (Math.abs(this.shift - 1.0) < 0.001)
125
+ /* no pitch shift needed */
126
+ output.set(frame);
127
+ else {
128
+ /* resample with linear interpolation */
129
+ const stretchFactor = 1.0 / this.shift;
130
+ for (let i = 0; i < this.frameSize; i++) {
131
+ const sourcePos = i * stretchFactor;
132
+ const idx0 = Math.floor(sourcePos);
133
+ const idx1 = Math.min(idx0 + 1, this.frameSize - 1);
134
+ const frac = sourcePos - idx0;
135
+ if (idx0 < this.frameSize)
136
+ output[i] = frame[idx0] * (1 - frac) + frame[idx1] * frac;
137
+ else
138
+ output[i] = 0;
139
+ }
140
+ }
141
+ /* apply window to output */
142
+ for (let i = 0; i < this.frameSize; i++)
143
+ output[i] *= this.windowFunction[i];
144
+ return output;
145
+ }
146
+ }
147
+ /* register the processor */
148
+ registerProcessor("pitch-shifter", PitchShifterProcessor);
149
+ //# sourceMappingURL=speechflow-node-a2a-pitch2-wt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-pitch2-wt.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-pitch2-wt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeA2APitch2 extends SpeechFlowNode {
3
+ static name: string;
4
+ private closing;
5
+ private pitchShifter;
6
+ constructor(id: string, cfg: {
7
+ [id: string]: any;
8
+ }, opts: {
9
+ [id: string]: any;
10
+ }, args: any[]);
11
+ open(): Promise<void>;
12
+ close(): Promise<void>;
13
+ }