speechflow 1.4.3 → 1.4.4

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 (106) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/package.json +3 -3
  3. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.d.ts +13 -0
  4. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js +153 -0
  5. package/speechflow-cli/dst/speechflow-node-a2a-ffmpeg.js.map +1 -0
  6. package/speechflow-cli/dst/speechflow-node-a2a-gender.d.ts +20 -0
  7. package/speechflow-cli/dst/speechflow-node-a2a-gender.js +349 -0
  8. package/speechflow-cli/dst/speechflow-node-a2a-gender.js.map +1 -0
  9. package/speechflow-cli/dst/speechflow-node-a2a-meter.d.ts +16 -0
  10. package/speechflow-cli/dst/speechflow-node-a2a-meter.js +232 -0
  11. package/speechflow-cli/dst/speechflow-node-a2a-meter.js.map +1 -0
  12. package/speechflow-cli/dst/speechflow-node-a2a-mute.d.ts +17 -0
  13. package/speechflow-cli/dst/speechflow-node-a2a-mute.js +117 -0
  14. package/speechflow-cli/dst/speechflow-node-a2a-mute.js.map +1 -0
  15. package/speechflow-cli/dst/speechflow-node-a2a-vad.d.ts +19 -0
  16. package/speechflow-cli/dst/speechflow-node-a2a-vad.js +374 -0
  17. package/speechflow-cli/dst/speechflow-node-a2a-vad.js.map +1 -0
  18. package/speechflow-cli/dst/speechflow-node-a2a-wav.d.ts +11 -0
  19. package/speechflow-cli/dst/speechflow-node-a2a-wav.js +211 -0
  20. package/speechflow-cli/dst/speechflow-node-a2a-wav.js.map +1 -0
  21. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.d.ts +19 -0
  22. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js +328 -0
  23. package/speechflow-cli/dst/speechflow-node-a2t-deepgram.js.map +1 -0
  24. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.d.ts +18 -0
  25. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js +238 -0
  26. package/speechflow-cli/dst/speechflow-node-t2a-elevenlabs.js.map +1 -0
  27. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.d.ts +14 -0
  28. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js +155 -0
  29. package/speechflow-cli/dst/speechflow-node-t2a-kokoro.js.map +1 -0
  30. package/speechflow-cli/dst/speechflow-node-t2t-deepl.d.ts +15 -0
  31. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js +146 -0
  32. package/speechflow-cli/dst/speechflow-node-t2t-deepl.js.map +1 -0
  33. package/speechflow-cli/dst/speechflow-node-t2t-format.d.ts +11 -0
  34. package/speechflow-cli/dst/speechflow-node-t2t-format.js +82 -0
  35. package/speechflow-cli/dst/speechflow-node-t2t-format.js.map +1 -0
  36. package/speechflow-cli/dst/speechflow-node-t2t-ollama.d.ts +13 -0
  37. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js +247 -0
  38. package/speechflow-cli/dst/speechflow-node-t2t-ollama.js.map +1 -0
  39. package/speechflow-cli/dst/speechflow-node-t2t-openai.d.ts +13 -0
  40. package/speechflow-cli/dst/speechflow-node-t2t-openai.js +227 -0
  41. package/speechflow-cli/dst/speechflow-node-t2t-openai.js.map +1 -0
  42. package/speechflow-cli/dst/speechflow-node-t2t-sentence.d.ts +17 -0
  43. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js +250 -0
  44. package/speechflow-cli/dst/speechflow-node-t2t-sentence.js.map +1 -0
  45. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.d.ts +13 -0
  46. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js +278 -0
  47. package/speechflow-cli/dst/speechflow-node-t2t-subtitle.js.map +1 -0
  48. package/speechflow-cli/dst/speechflow-node-t2t-transformers.d.ts +14 -0
  49. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js +265 -0
  50. package/speechflow-cli/dst/speechflow-node-t2t-transformers.js.map +1 -0
  51. package/speechflow-cli/dst/speechflow-node-x2x-filter.d.ts +11 -0
  52. package/speechflow-cli/dst/speechflow-node-x2x-filter.js +121 -0
  53. package/speechflow-cli/dst/speechflow-node-x2x-filter.js.map +1 -0
  54. package/speechflow-cli/dst/speechflow-node-x2x-trace.d.ts +11 -0
  55. package/speechflow-cli/dst/speechflow-node-x2x-trace.js +111 -0
  56. package/speechflow-cli/dst/speechflow-node-x2x-trace.js.map +1 -0
  57. package/speechflow-cli/dst/speechflow-node-xio-device.d.ts +13 -0
  58. package/speechflow-cli/dst/speechflow-node-xio-device.js +230 -0
  59. package/speechflow-cli/dst/speechflow-node-xio-device.js.map +1 -0
  60. package/speechflow-cli/dst/speechflow-node-xio-file.d.ts +11 -0
  61. package/speechflow-cli/dst/speechflow-node-xio-file.js +216 -0
  62. package/speechflow-cli/dst/speechflow-node-xio-file.js.map +1 -0
  63. package/speechflow-cli/dst/speechflow-node-xio-mqtt.d.ts +13 -0
  64. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js +188 -0
  65. package/speechflow-cli/dst/speechflow-node-xio-mqtt.js.map +1 -0
  66. package/speechflow-cli/dst/speechflow-node-xio-websocket.d.ts +13 -0
  67. package/speechflow-cli/dst/speechflow-node-xio-websocket.js +278 -0
  68. package/speechflow-cli/dst/speechflow-node-xio-websocket.js.map +1 -0
  69. package/speechflow-cli/dst/speechflow-node.d.ts +65 -0
  70. package/speechflow-cli/dst/speechflow-node.js +180 -0
  71. package/speechflow-cli/dst/speechflow-node.js.map +1 -0
  72. package/speechflow-cli/dst/speechflow-utils.d.ts +74 -0
  73. package/speechflow-cli/dst/speechflow-utils.js +519 -0
  74. package/speechflow-cli/dst/speechflow-utils.js.map +1 -0
  75. package/speechflow-cli/dst/speechflow.d.ts +7 -0
  76. package/speechflow-cli/dst/speechflow.js +837 -0
  77. package/speechflow-cli/dst/speechflow.js.map +1 -0
  78. package/speechflow-cli/package.json +1 -1
  79. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Bold.eot +0 -0
  80. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Bold.ttf +0 -0
  81. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Bold.woff +0 -0
  82. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Regular.eot +0 -0
  83. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Regular.ttf +0 -0
  84. package/speechflow-ui-db/dst/app-font-TypoPRO-SourceSansPro-Regular.woff +0 -0
  85. package/speechflow-ui-db/dst/app-font-fa-brands-400.woff2 +0 -0
  86. package/speechflow-ui-db/dst/app-font-fa-regular-400.woff2 +0 -0
  87. package/speechflow-ui-db/dst/app-font-fa-solid-900.woff2 +0 -0
  88. package/speechflow-ui-db/dst/app-font-fa-v4compatibility.woff2 +0 -0
  89. package/speechflow-ui-db/dst/app-icon.svg +26 -0
  90. package/speechflow-ui-db/dst/index.css +5 -0
  91. package/speechflow-ui-db/dst/index.html +24 -0
  92. package/speechflow-ui-db/dst/index.js +616 -0
  93. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Bold.eot +0 -0
  94. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Bold.ttf +0 -0
  95. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Bold.woff +0 -0
  96. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Regular.eot +0 -0
  97. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Regular.ttf +0 -0
  98. package/speechflow-ui-st/dst/app-font-TypoPRO-SourceSansPro-Regular.woff +0 -0
  99. package/speechflow-ui-st/dst/app-font-fa-brands-400.woff2 +0 -0
  100. package/speechflow-ui-st/dst/app-font-fa-regular-400.woff2 +0 -0
  101. package/speechflow-ui-st/dst/app-font-fa-solid-900.woff2 +0 -0
  102. package/speechflow-ui-st/dst/app-font-fa-v4compatibility.woff2 +0 -0
  103. package/speechflow-ui-st/dst/app-icon.svg +26 -0
  104. package/speechflow-ui-st/dst/index.css +5 -0
  105. package/speechflow-ui-st/dst/index.html +24 -0
  106. package/speechflow-ui-st/dst/index.js +610 -0
package/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
  ChangeLog
3
3
  =========
4
4
 
5
+ 1.4.4 (2025-08-07)
6
+ ------------------
7
+
8
+ - BUGFIX: do not ignore "dst" files in NPM distribution
9
+ - UPGRADE: upgrade NPM dependencies
10
+
5
11
  1.4.3 (2025-08-06)
6
12
  ------------------
7
13
 
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "speechflow",
3
- "version": "1.4.3",
4
- "x-stdver": "1.4.3-GA",
5
- "x-release": "2025-08-06",
3
+ "version": "1.4.4",
4
+ "x-stdver": "1.4.4-GA",
5
+ "x-release": "2025-08-07",
6
6
  "homepage": "https://github.com/rse/speechflow",
7
7
  "description": "Speech Processing Flow Graph",
8
8
  "license": "GPL-3.0-only",
@@ -0,0 +1,13 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeFFmpeg extends SpeechFlowNode {
3
+ static name: string;
4
+ private ffmpegBinary;
5
+ private ffmpeg;
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,153 @@
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 ffmpeg_1 = __importDefault(require("@rse/ffmpeg"));
48
+ const ffmpeg_stream_1 = require("ffmpeg-stream");
49
+ /* internal dependencies */
50
+ const speechflow_node_1 = __importDefault(require("./speechflow-node"));
51
+ const utils = __importStar(require("./speechflow-utils"));
52
+ /* SpeechFlow node for FFmpeg */
53
+ class SpeechFlowNodeFFmpeg extends speechflow_node_1.default {
54
+ /* declare official node name */
55
+ static name = "ffmpeg";
56
+ /* internal state */
57
+ ffmpegBinary = ffmpeg_1.default.supported ? ffmpeg_1.default.binary : "ffmpeg";
58
+ ffmpeg = null;
59
+ /* construct node */
60
+ constructor(id, cfg, opts, args) {
61
+ super(id, cfg, opts, args);
62
+ /* declare node configuration parameters */
63
+ this.configure({
64
+ src: { type: "string", pos: 0, val: "pcm", match: /^(?:pcm|wav|mp3|opus)$/ },
65
+ dst: { type: "string", pos: 1, val: "wav", match: /^(?:pcm|wav|mp3|opus)$/ }
66
+ });
67
+ /* declare node input/output format */
68
+ this.input = "audio";
69
+ this.output = "audio";
70
+ }
71
+ /* open node */
72
+ async open() {
73
+ /* sanity check situation */
74
+ if (this.params.src === this.params.dst)
75
+ throw new Error("source and destination formats should not be the same");
76
+ /* instantiate FFmpeg sub-process */
77
+ this.ffmpeg = new ffmpeg_stream_1.Converter(this.ffmpegBinary);
78
+ const streamInput = this.ffmpeg.createInputStream({
79
+ /* FFmpeg input options */
80
+ "fflags": "nobuffer",
81
+ "flags": "low_delay",
82
+ "probesize": 32,
83
+ "analyzeduration": 0,
84
+ ...(this.params.src === "pcm" ? {
85
+ "f": "s16le",
86
+ "ar": this.config.audioSampleRate,
87
+ "ac": this.config.audioChannels
88
+ } : {}),
89
+ ...(this.params.src === "wav" ? {
90
+ "f": "wav"
91
+ } : {}),
92
+ ...(this.params.src === "mp3" ? {
93
+ "f": "mp3"
94
+ } : {}),
95
+ ...(this.params.src === "opus" ? {
96
+ "f": "opus"
97
+ } : {})
98
+ });
99
+ const streamOutput = this.ffmpeg.createOutputStream({
100
+ /* FFmpeg output options */
101
+ "flush_packets": 1,
102
+ ...(this.params.dst === "pcm" ? {
103
+ "c:a": "pcm_s16le",
104
+ "ar": this.config.audioSampleRate,
105
+ "ac": this.config.audioChannels,
106
+ "f": "s16le",
107
+ } : {}),
108
+ ...(this.params.dst === "wav" ? {
109
+ "f": "wav"
110
+ } : {}),
111
+ ...(this.params.dst === "mp3" ? {
112
+ "c:a": "libmp3lame",
113
+ "b:a": "192k",
114
+ "f": "mp3"
115
+ } : {}),
116
+ ...(this.params.dst === "opus" ? {
117
+ "acodec": "libopus",
118
+ "f": "opus"
119
+ } : {})
120
+ });
121
+ this.ffmpeg.run();
122
+ /* establish a duplex stream and connect it to FFmpeg */
123
+ this.stream = node_stream_1.default.Duplex.from({
124
+ writable: streamInput,
125
+ readable: streamOutput
126
+ });
127
+ /* wrap streams with conversions for chunk vs plain audio */
128
+ const wrapper1 = utils.createTransformStreamForWritableSide();
129
+ const wrapper2 = utils.createTransformStreamForReadableSide("audio", () => this.timeZero);
130
+ this.stream = node_stream_1.default.compose(wrapper1, this.stream, wrapper2);
131
+ }
132
+ /* close node */
133
+ async close() {
134
+ /* close duplex stream */
135
+ if (this.stream !== null) {
136
+ await new Promise((resolve) => {
137
+ if (this.stream instanceof node_stream_1.default.Duplex)
138
+ this.stream.end(() => { resolve(); });
139
+ else
140
+ resolve();
141
+ });
142
+ this.stream.destroy();
143
+ this.stream = null;
144
+ }
145
+ /* shutdown FFmpeg */
146
+ if (this.ffmpeg !== null) {
147
+ this.ffmpeg.kill();
148
+ this.ffmpeg = null;
149
+ }
150
+ }
151
+ }
152
+ exports.default = SpeechFlowNodeFFmpeg;
153
+ //# sourceMappingURL=speechflow-node-a2a-ffmpeg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-ffmpeg.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-ffmpeg.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeGender extends SpeechFlowNode {
3
+ static name: string;
4
+ private static speexInitialized;
5
+ private classifier;
6
+ private queue;
7
+ private queueRecv;
8
+ private queueAC;
9
+ private queueSend;
10
+ private shutdown;
11
+ private workingOffTimer;
12
+ private progressInterval;
13
+ constructor(id: string, cfg: {
14
+ [id: string]: any;
15
+ }, opts: {
16
+ [id: string]: any;
17
+ }, args: any[]);
18
+ open(): Promise<void>;
19
+ close(): Promise<void>;
20
+ }
@@ -0,0 +1,349 @@
1
+ "use strict";
2
+ /*
3
+ ** SpeechFlow - Speech Processing Flow Graph
4
+ ** Copyright (c) 2024-2025 Dr. Ralf S. Engelschall <rse@engelschall.com>
5
+ ** Licensed under GPL 3.0 <https://spdx.org/licenses/GPL-3.0-only>
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ /* standard dependencies */
45
+ const node_path_1 = __importDefault(require("node:path"));
46
+ const node_stream_1 = __importDefault(require("node:stream"));
47
+ /* external dependencies */
48
+ const Transformers = __importStar(require("@huggingface/transformers"));
49
+ const wavefile_1 = require("wavefile");
50
+ /* internal dependencies */
51
+ const speechflow_node_1 = __importDefault(require("./speechflow-node"));
52
+ const utils = __importStar(require("./speechflow-utils"));
53
+ /* SpeechFlow node for Gender recognition */
54
+ class SpeechFlowNodeGender extends speechflow_node_1.default {
55
+ /* declare official node name */
56
+ static name = "gender";
57
+ /* internal state */
58
+ static speexInitialized = false;
59
+ classifier = null;
60
+ queue = new utils.Queue();
61
+ queueRecv = this.queue.pointerUse("recv");
62
+ queueAC = this.queue.pointerUse("ac");
63
+ queueSend = this.queue.pointerUse("send");
64
+ shutdown = false;
65
+ workingOffTimer = null;
66
+ progressInterval = null;
67
+ /* construct node */
68
+ constructor(id, cfg, opts, args) {
69
+ super(id, cfg, opts, args);
70
+ /* declare node configuration parameters */
71
+ this.configure({
72
+ window: { type: "number", pos: 0, val: 500 }
73
+ });
74
+ /* declare node input/output format */
75
+ this.input = "audio";
76
+ this.output = "audio";
77
+ }
78
+ /* open node */
79
+ async open() {
80
+ /* sanity check situation */
81
+ if (this.config.audioBitDepth !== 16 || !this.config.audioLittleEndian)
82
+ throw new Error("Gender node currently supports PCM-S16LE audio only");
83
+ /* clear shutdown flag */
84
+ this.shutdown = false;
85
+ /* pass-through logging */
86
+ const log = (level, msg) => { this.log(level, msg); };
87
+ /* the used model */
88
+ const model = "Xenova/wav2vec2-large-xlsr-53-gender-recognition-librispeech";
89
+ /* track download progress when instantiating Transformers engine and model */
90
+ const progressState = new Map();
91
+ const progressCallback = (progress) => {
92
+ if (this.shutdown)
93
+ return;
94
+ let artifact = model;
95
+ if (typeof progress.file === "string")
96
+ artifact += `:${progress.file}`;
97
+ let percent = 0;
98
+ if (typeof progress.loaded === "number" && typeof progress.total === "number")
99
+ percent = progress.loaded / progress.total * 100;
100
+ else if (typeof progress.progress === "number")
101
+ percent = progress.progress;
102
+ if (percent > 0)
103
+ progressState.set(artifact, percent);
104
+ };
105
+ this.progressInterval = setInterval(() => {
106
+ if (this.shutdown)
107
+ return;
108
+ for (const [artifact, percent] of progressState) {
109
+ this.log("info", `downloaded ${percent.toFixed(2)}% of artifact "${artifact}"`);
110
+ if (percent >= 1.0)
111
+ progressState.delete(artifact);
112
+ }
113
+ }, 1000);
114
+ try {
115
+ const pipelinePromise = Transformers.pipeline("audio-classification", model, {
116
+ cache_dir: node_path_1.default.join(this.config.cacheDir, "gender"),
117
+ dtype: "q4",
118
+ device: "auto",
119
+ progress_callback: progressCallback
120
+ });
121
+ const timeoutPromise = new Promise((resolve, reject) => setTimeout(() => reject(new Error("model initialization timeout")), 30 * 1000));
122
+ this.classifier = await Promise.race([
123
+ pipelinePromise, timeoutPromise
124
+ ]);
125
+ }
126
+ catch (error) {
127
+ if (this.progressInterval) {
128
+ clearInterval(this.progressInterval);
129
+ this.progressInterval = null;
130
+ }
131
+ throw new Error(`failed to initialize classifier pipeline: ${error}`);
132
+ }
133
+ if (this.progressInterval) {
134
+ clearInterval(this.progressInterval);
135
+ this.progressInterval = null;
136
+ }
137
+ if (this.classifier === null)
138
+ throw new Error("failed to instantiate classifier pipeline");
139
+ /* classify a single large-enough concatenated audio frame */
140
+ const classify = async (data) => {
141
+ if (this.shutdown || this.classifier === null)
142
+ throw new Error("classifier shutdown during operation");
143
+ const classifyPromise = this.classifier(data);
144
+ const timeoutPromise = new Promise((resolve, reject) => setTimeout(() => reject(new Error("classification timeout")), 30 * 1000));
145
+ const result = await Promise.race([classifyPromise, timeoutPromise]);
146
+ const classified = Array.isArray(result) ?
147
+ result :
148
+ [result];
149
+ const c1 = classified.find((c) => c.label === "male");
150
+ const c2 = classified.find((c) => c.label === "female");
151
+ const male = c1 ? c1.score : 0.0;
152
+ const female = c2 ? c2.score : 0.0;
153
+ return (male > female ? "male" : "female");
154
+ };
155
+ /* define sample rate required by model */
156
+ const sampleRateTarget = 16000;
157
+ /* work off queued audio frames */
158
+ const frameWindowDuration = 0.5;
159
+ const frameWindowSamples = frameWindowDuration * sampleRateTarget;
160
+ let lastGender = "";
161
+ let workingOff = false;
162
+ const workOffQueue = async () => {
163
+ /* control working off round */
164
+ if (workingOff || this.shutdown)
165
+ return;
166
+ workingOff = true;
167
+ if (this.workingOffTimer !== null) {
168
+ clearTimeout(this.workingOffTimer);
169
+ this.workingOffTimer = null;
170
+ }
171
+ this.queue.off("write", workOffQueue);
172
+ try {
173
+ let pos0 = this.queueAC.position();
174
+ const posL = this.queueAC.maxPosition();
175
+ const data = new Float32Array(frameWindowSamples);
176
+ data.fill(0);
177
+ let samples = 0;
178
+ let pos = pos0;
179
+ while (pos < posL && samples < frameWindowSamples && !this.shutdown) {
180
+ const element = this.queueAC.peek(pos);
181
+ if (element === undefined || element.type !== "audio-frame")
182
+ break;
183
+ if ((samples + element.data.length) < frameWindowSamples) {
184
+ data.set(element.data, samples);
185
+ samples += element.data.length;
186
+ }
187
+ pos++;
188
+ }
189
+ if (pos0 < pos && samples > frameWindowSamples * 0.75 && !this.shutdown) {
190
+ const gender = await classify(data);
191
+ if (this.shutdown)
192
+ return;
193
+ const posM = pos0 + Math.trunc((pos - pos0) * 0.25);
194
+ while (pos0 < posM && pos0 < posL && !this.shutdown) {
195
+ const element = this.queueAC.peek(pos0);
196
+ if (element === undefined || element.type !== "audio-frame")
197
+ break;
198
+ element.gender = gender;
199
+ this.queueAC.touch();
200
+ this.queueAC.walk(+1);
201
+ pos0++;
202
+ }
203
+ if (lastGender !== gender && !this.shutdown) {
204
+ log("info", `gender now recognized as <${gender}>`);
205
+ lastGender = gender;
206
+ }
207
+ }
208
+ }
209
+ catch (error) {
210
+ log("error", `gender classification error: ${error}`);
211
+ }
212
+ /* re-initiate working off round */
213
+ workingOff = false;
214
+ if (!this.shutdown) {
215
+ this.workingOffTimer = setTimeout(workOffQueue, 100);
216
+ this.queue.once("write", workOffQueue);
217
+ }
218
+ };
219
+ this.queue.once("write", workOffQueue);
220
+ /* provide Duplex stream and internally attach to classifier */
221
+ const self = this;
222
+ this.stream = new node_stream_1.default.Duplex({
223
+ writableObjectMode: true,
224
+ readableObjectMode: true,
225
+ decodeStrings: false,
226
+ highWaterMark: 1,
227
+ /* receive audio chunk (writable side of stream) */
228
+ write(chunk, encoding, callback) {
229
+ if (self.shutdown) {
230
+ callback(new Error("stream already destroyed"));
231
+ return;
232
+ }
233
+ if (!Buffer.isBuffer(chunk.payload))
234
+ callback(new Error("expected audio input as Buffer chunks"));
235
+ else if (chunk.payload.byteLength === 0)
236
+ callback();
237
+ else {
238
+ try {
239
+ /* convert audio samples from PCM/I16/48KHz to PCM/F32/16KHz */
240
+ let data = utils.convertBufToF32(chunk.payload, self.config.audioLittleEndian);
241
+ const wav = new wavefile_1.WaveFile();
242
+ wav.fromScratch(self.config.audioChannels, self.config.audioSampleRate, "32f", data);
243
+ wav.toSampleRate(sampleRateTarget, { method: "cubic" });
244
+ data = wav.getSamples(false, (Float32Array));
245
+ /* queue chunk and converted data */
246
+ self.queueRecv.append({ type: "audio-frame", chunk, data });
247
+ callback();
248
+ }
249
+ catch (error) {
250
+ callback(error instanceof Error ? error : new Error("audio processing failed"));
251
+ }
252
+ }
253
+ },
254
+ /* receive no more audio chunks (writable side of stream) */
255
+ final(callback) {
256
+ if (self.shutdown) {
257
+ callback();
258
+ return;
259
+ }
260
+ /* signal end of file */
261
+ self.queueRecv.append({ type: "audio-eof" });
262
+ callback();
263
+ },
264
+ /* send audio chunk(s) (readable side of stream) */
265
+ read(_size) {
266
+ /* flush pending audio chunks */
267
+ const flushPendingChunks = () => {
268
+ if (self.shutdown) {
269
+ this.push(null);
270
+ return;
271
+ }
272
+ const element = self.queueSend.peek();
273
+ if (element !== undefined
274
+ && element.type === "audio-eof")
275
+ this.push(null);
276
+ else if (element !== undefined
277
+ && element.type === "audio-frame"
278
+ && element.gender !== undefined) {
279
+ while (true) {
280
+ if (self.shutdown) {
281
+ this.push(null);
282
+ return;
283
+ }
284
+ const element = self.queueSend.peek();
285
+ if (element === undefined)
286
+ break;
287
+ else if (element.type === "audio-eof") {
288
+ this.push(null);
289
+ break;
290
+ }
291
+ else if (element.type === "audio-frame"
292
+ && element.gender === undefined)
293
+ break;
294
+ const duration = utils.audioArrayDuration(element.data);
295
+ log("debug", `send chunk (${duration.toFixed(3)}s) with gender <${element.gender}>`);
296
+ element.chunk.meta.set("gender", element.gender);
297
+ this.push(element.chunk);
298
+ self.queueSend.walk(+1);
299
+ self.queue.trim();
300
+ }
301
+ }
302
+ else if (!self.shutdown)
303
+ self.queue.once("write", flushPendingChunks);
304
+ };
305
+ flushPendingChunks();
306
+ }
307
+ });
308
+ }
309
+ /* close node */
310
+ async close() {
311
+ /* indicate shutdown */
312
+ this.shutdown = true;
313
+ /* cleanup working-off timer */
314
+ if (this.workingOffTimer !== null) {
315
+ clearTimeout(this.workingOffTimer);
316
+ this.workingOffTimer = null;
317
+ }
318
+ /* cleanup progress interval */
319
+ if (this.progressInterval !== null) {
320
+ clearInterval(this.progressInterval);
321
+ this.progressInterval = null;
322
+ }
323
+ /* remove all event listeners */
324
+ this.queue.removeAllListeners("write");
325
+ /* close stream */
326
+ if (this.stream !== null) {
327
+ this.stream.destroy();
328
+ this.stream = null;
329
+ }
330
+ /* cleanup classifier */
331
+ if (this.classifier !== null) {
332
+ try {
333
+ const disposePromise = this.classifier.dispose();
334
+ const timeoutPromise = new Promise((resolve) => setTimeout(resolve, 5000));
335
+ await Promise.race([disposePromise, timeoutPromise]);
336
+ }
337
+ catch (error) {
338
+ this.log("warning", `error during classifier cleanup: ${error}`);
339
+ }
340
+ this.classifier = null;
341
+ }
342
+ /* cleanup queue pointers */
343
+ this.queue.pointerDelete("recv");
344
+ this.queue.pointerDelete("ac");
345
+ this.queue.pointerDelete("send");
346
+ }
347
+ }
348
+ exports.default = SpeechFlowNodeGender;
349
+ //# sourceMappingURL=speechflow-node-a2a-gender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"speechflow-node-a2a-gender.js","sourceRoot":"","sources":["../src/speechflow-node-a2a-gender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import SpeechFlowNode from "./speechflow-node";
2
+ export default class SpeechFlowNodeMeter extends SpeechFlowNode {
3
+ static name: string;
4
+ private emitInterval;
5
+ private calcInterval;
6
+ private pendingCalculations;
7
+ private chunkBuffer;
8
+ private destroyed;
9
+ constructor(id: string, cfg: {
10
+ [id: string]: any;
11
+ }, opts: {
12
+ [id: string]: any;
13
+ }, args: any[]);
14
+ open(): Promise<void>;
15
+ close(): Promise<void>;
16
+ }