@auxiora/tts 1.10.0 → 1.10.5
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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/piper-tts.d.ts +18 -0
- package/dist/piper-tts.d.ts.map +1 -0
- package/dist/piper-tts.js +62 -0
- package/dist/piper-tts.js.map +1 -0
- package/package.json +2 -2
package/dist/index.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ export type { AudioFormat, TTSOptions, TTSProvider } from './types.js';
|
|
|
2
2
|
export { MAX_TTS_TEXT_LENGTH } from './types.js';
|
|
3
3
|
export { OpenAITTS, type OpenAITTSConfig } from './openai-tts.js';
|
|
4
4
|
export { ElevenLabsTTS, type ElevenLabsTTSConfig } from './elevenlabs-tts.js';
|
|
5
|
+
export { PiperTTS, type PiperTTSConfig } from './piper-tts.js';
|
|
5
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,SAAS,EAAwB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,aAAa,EAA4B,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAuB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { TTSProvider, TTSOptions } from './types.js';
|
|
2
|
+
export interface PiperTTSConfig {
|
|
3
|
+
binaryPath: string;
|
|
4
|
+
modelPath: string;
|
|
5
|
+
sampleRate?: number;
|
|
6
|
+
timeoutMs?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class PiperTTS implements TTSProvider {
|
|
9
|
+
readonly name = "piper-local";
|
|
10
|
+
private binaryPath;
|
|
11
|
+
private modelPath;
|
|
12
|
+
private sampleRate;
|
|
13
|
+
private timeoutMs;
|
|
14
|
+
constructor(config: PiperTTSConfig);
|
|
15
|
+
synthesize(text: string, options?: TTSOptions): Promise<Buffer>;
|
|
16
|
+
stream(text: string, _options?: TTSOptions): AsyncGenerator<Buffer>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=piper-tts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piper-tts.d.ts","sourceRoot":"","sources":["../src/piper-tts.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK1D,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,QAAS,YAAW,WAAW;IAC1C,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,cAAc;IAO5B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC;CA8C3E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { spawn } from 'node:child_process';
|
|
2
|
+
import { getLogger } from '@auxiora/logger';
|
|
3
|
+
import { MAX_TTS_TEXT_LENGTH } from './types.js';
|
|
4
|
+
const logger = getLogger('tts:piper');
|
|
5
|
+
export class PiperTTS {
|
|
6
|
+
name = 'piper-local';
|
|
7
|
+
binaryPath;
|
|
8
|
+
modelPath;
|
|
9
|
+
sampleRate;
|
|
10
|
+
timeoutMs;
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.binaryPath = config.binaryPath;
|
|
13
|
+
this.modelPath = config.modelPath;
|
|
14
|
+
this.sampleRate = config.sampleRate ?? 22050;
|
|
15
|
+
this.timeoutMs = config.timeoutMs ?? 30_000;
|
|
16
|
+
}
|
|
17
|
+
async synthesize(text, options) {
|
|
18
|
+
const chunks = [];
|
|
19
|
+
for await (const chunk of this.stream(text, options)) {
|
|
20
|
+
chunks.push(chunk);
|
|
21
|
+
}
|
|
22
|
+
return Buffer.concat(chunks);
|
|
23
|
+
}
|
|
24
|
+
async *stream(text, _options) {
|
|
25
|
+
if (text.length > MAX_TTS_TEXT_LENGTH) {
|
|
26
|
+
throw new Error(`Text length (${text.length}) exceeds maximum (${MAX_TTS_TEXT_LENGTH})`);
|
|
27
|
+
}
|
|
28
|
+
logger.info('Spawning piper process', { textLength: text.length, model: this.modelPath });
|
|
29
|
+
const proc = spawn(this.binaryPath, ['--model', this.modelPath, '--output-raw'], {
|
|
30
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
31
|
+
});
|
|
32
|
+
proc.stdin.write(text);
|
|
33
|
+
proc.stdin.end();
|
|
34
|
+
const stderrChunks = [];
|
|
35
|
+
proc.stderr.on('data', (chunk) => {
|
|
36
|
+
stderrChunks.push(chunk);
|
|
37
|
+
});
|
|
38
|
+
for await (const chunk of proc.stdout) {
|
|
39
|
+
yield Buffer.from(chunk);
|
|
40
|
+
}
|
|
41
|
+
const exitCode = await new Promise((resolve, reject) => {
|
|
42
|
+
const timer = setTimeout(() => {
|
|
43
|
+
proc.kill();
|
|
44
|
+
reject(new Error(`Piper process timed out after ${this.timeoutMs}ms`));
|
|
45
|
+
}, this.timeoutMs);
|
|
46
|
+
proc.on('close', (code) => {
|
|
47
|
+
clearTimeout(timer);
|
|
48
|
+
resolve(code);
|
|
49
|
+
});
|
|
50
|
+
proc.on('error', (err) => {
|
|
51
|
+
clearTimeout(timer);
|
|
52
|
+
reject(err);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
if (exitCode !== 0) {
|
|
56
|
+
const stderr = Buffer.concat(stderrChunks).toString();
|
|
57
|
+
logger.error('Piper process failed', { error: new Error(stderr), exitCode });
|
|
58
|
+
throw new Error(`Piper exited with code ${exitCode}: ${stderr}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=piper-tts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piper-tts.js","sourceRoot":"","sources":["../src/piper-tts.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@auxiora/tts",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.5",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"node": ">=22.0.0"
|
|
15
15
|
},
|
|
16
16
|
"dependencies": {
|
|
17
|
-
"@auxiora/logger": "1.10.
|
|
17
|
+
"@auxiora/logger": "1.10.5"
|
|
18
18
|
},
|
|
19
19
|
"publishConfig": {
|
|
20
20
|
"access": "public"
|