@leiboss/dsh-tts 0.0.0-stage → 0.3.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.
- package/CHANGELOG.md +111 -0
- package/LICENSE +21 -0
- package/README.md +374 -2
- package/cordis.patch.yml +4 -0
- package/dist/audio/mp3-duration.d.ts +23 -0
- package/dist/audio/mp3-duration.d.ts.map +1 -0
- package/dist/audio/mp3-duration.js +140 -0
- package/dist/audio/mp3-duration.js.map +1 -0
- package/dist/audio-route.d.ts +122 -0
- package/dist/audio-route.d.ts.map +1 -0
- package/dist/audio-route.js +408 -0
- package/dist/audio-route.js.map +1 -0
- package/dist/cache.d.ts +50 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +105 -0
- package/dist/cache.js.map +1 -0
- package/dist/chunked-tts.d.ts +34 -0
- package/dist/chunked-tts.d.ts.map +1 -0
- package/dist/chunked-tts.js +121 -0
- package/dist/chunked-tts.js.map +1 -0
- package/dist/chunker.d.ts +19 -0
- package/dist/chunker.d.ts.map +1 -0
- package/dist/chunker.js +98 -0
- package/dist/chunker.js.map +1 -0
- package/dist/client.js +90 -0
- package/dist/concurrency.d.ts +33 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +95 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/config.d.ts +174 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +186 -0
- package/dist/config.js.map +1 -0
- package/dist/edge-tts.d.ts +74 -0
- package/dist/edge-tts.d.ts.map +1 -0
- package/dist/edge-tts.js +161 -0
- package/dist/edge-tts.js.map +1 -0
- package/dist/engine-health.d.ts +108 -0
- package/dist/engine-health.d.ts.map +1 -0
- package/dist/engine-health.js +170 -0
- package/dist/engine-health.js.map +1 -0
- package/dist/engines/edge-js.d.ts +51 -0
- package/dist/engines/edge-js.d.ts.map +1 -0
- package/dist/engines/edge-js.js +98 -0
- package/dist/engines/edge-js.js.map +1 -0
- package/dist/errors.d.ts +66 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +110 -0
- package/dist/errors.js.map +1 -0
- package/dist/fallback.d.ts +69 -0
- package/dist/fallback.d.ts.map +1 -0
- package/dist/fallback.js +89 -0
- package/dist/fallback.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +723 -0
- package/dist/index.js.map +1 -0
- package/dist/probe.d.ts +42 -0
- package/dist/probe.d.ts.map +1 -0
- package/dist/probe.js +63 -0
- package/dist/probe.js.map +1 -0
- package/dist/provider.d.ts +33 -0
- package/dist/provider.d.ts.map +1 -0
- package/dist/provider.js +7 -0
- package/dist/provider.js.map +1 -0
- package/dist/register-service.d.ts +25 -0
- package/dist/register-service.d.ts.map +1 -0
- package/dist/register-service.js +33 -0
- package/dist/register-service.js.map +1 -0
- package/dist/sapi-tts.d.ts +29 -0
- package/dist/sapi-tts.d.ts.map +1 -0
- package/dist/sapi-tts.js +131 -0
- package/dist/sapi-tts.js.map +1 -0
- package/dist/self-check.d.ts +32 -0
- package/dist/self-check.d.ts.map +1 -0
- package/dist/self-check.js +75 -0
- package/dist/self-check.js.map +1 -0
- package/dist/service.d.ts +119 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +404 -0
- package/dist/service.js.map +1 -0
- package/dist/voices.d.ts +21 -0
- package/dist/voices.d.ts.map +1 -0
- package/dist/voices.js +74 -0
- package/dist/voices.js.map +1 -0
- package/icon.svg +6 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +93 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/probe.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional network diagnostic: a single TCP connection to the Edge-TTS
|
|
3
|
+
* endpoint. It never synthesizes audio and never performs a WebSocket
|
|
4
|
+
* handshake, so it is cheap and does not consume service quota.
|
|
5
|
+
*
|
|
6
|
+
* This deliberately lives outside `tts_self_check`, which must stay offline.
|
|
7
|
+
*/
|
|
8
|
+
import { type Socket } from 'node:net';
|
|
9
|
+
/** The only endpoint shipped by edge-tts 7.3.1. */
|
|
10
|
+
export declare const PROBE_HOST = "speech.platform.bing.com";
|
|
11
|
+
export declare const PROBE_PORT = 443;
|
|
12
|
+
/** Default and hard upper bound for one probe. */
|
|
13
|
+
export declare const DEFAULT_PROBE_TIMEOUT_MS = 1500;
|
|
14
|
+
export declare const MAX_PROBE_TIMEOUT_MS = 5000;
|
|
15
|
+
export type ProbeConnector = (options: {
|
|
16
|
+
host: string;
|
|
17
|
+
port: number;
|
|
18
|
+
}) => Socket;
|
|
19
|
+
export interface ProbeOptions {
|
|
20
|
+
/** Defaults to {@link PROBE_HOST}; tests use a local listener. */
|
|
21
|
+
host?: string;
|
|
22
|
+
/** Defaults to {@link PROBE_PORT}. */
|
|
23
|
+
port?: number;
|
|
24
|
+
/** Clamped to [1, {@link MAX_PROBE_TIMEOUT_MS}]; defaults to 1500. */
|
|
25
|
+
timeoutMs?: number;
|
|
26
|
+
signal?: AbortSignal;
|
|
27
|
+
/** Injected connector, so tests never touch the real network. */
|
|
28
|
+
connectImpl?: ProbeConnector;
|
|
29
|
+
}
|
|
30
|
+
export interface ProbeResult {
|
|
31
|
+
host: string;
|
|
32
|
+
port: number;
|
|
33
|
+
/** True only when the TCP handshake completed before the timeout. */
|
|
34
|
+
reachable: boolean;
|
|
35
|
+
elapsedMs: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Attempt one TCP connection and report reachability. Failures — timeouts,
|
|
39
|
+
* refusals, DNS errors — resolve with `reachable: false` instead of throwing.
|
|
40
|
+
*/
|
|
41
|
+
export declare function probeEndpoint(options?: ProbeOptions): Promise<ProbeResult>;
|
|
42
|
+
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AAE/C,mDAAmD;AACnD,eAAO,MAAM,UAAU,6BAA6B,CAAA;AACpD,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B,kDAAkD;AAClD,eAAO,MAAM,wBAAwB,OAAQ,CAAA;AAC7C,eAAO,MAAM,oBAAoB,OAAQ,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,KAAK,MAAM,CAAA;AAEhF,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,sEAAsE;IACtE,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,iEAAiE;IACjE,WAAW,CAAC,EAAE,cAAc,CAAA;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,qEAAqE;IACrE,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB;AASD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,WAAW,CAAC,CAuC9E"}
|
package/dist/probe.js
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional network diagnostic: a single TCP connection to the Edge-TTS
|
|
3
|
+
* endpoint. It never synthesizes audio and never performs a WebSocket
|
|
4
|
+
* handshake, so it is cheap and does not consume service quota.
|
|
5
|
+
*
|
|
6
|
+
* This deliberately lives outside `tts_self_check`, which must stay offline.
|
|
7
|
+
*/
|
|
8
|
+
import { connect } from 'node:net';
|
|
9
|
+
/** The only endpoint shipped by edge-tts 7.3.1. */
|
|
10
|
+
export const PROBE_HOST = 'speech.platform.bing.com';
|
|
11
|
+
export const PROBE_PORT = 443;
|
|
12
|
+
/** Default and hard upper bound for one probe. */
|
|
13
|
+
export const DEFAULT_PROBE_TIMEOUT_MS = 1_500;
|
|
14
|
+
export const MAX_PROBE_TIMEOUT_MS = 5_000;
|
|
15
|
+
function clampTimeout(value) {
|
|
16
|
+
if (value === undefined || !Number.isFinite(value)) {
|
|
17
|
+
return DEFAULT_PROBE_TIMEOUT_MS;
|
|
18
|
+
}
|
|
19
|
+
return Math.max(1, Math.min(Math.trunc(value), MAX_PROBE_TIMEOUT_MS));
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Attempt one TCP connection and report reachability. Failures — timeouts,
|
|
23
|
+
* refusals, DNS errors — resolve with `reachable: false` instead of throwing.
|
|
24
|
+
*/
|
|
25
|
+
export function probeEndpoint(options = {}) {
|
|
26
|
+
const host = options.host ?? PROBE_HOST;
|
|
27
|
+
const port = options.port ?? PROBE_PORT;
|
|
28
|
+
const timeoutMs = clampTimeout(options.timeoutMs);
|
|
29
|
+
const connector = options.connectImpl ?? ((address) => connect(address));
|
|
30
|
+
const startedAt = Date.now();
|
|
31
|
+
return new Promise((resolve) => {
|
|
32
|
+
let settled = false;
|
|
33
|
+
let timer;
|
|
34
|
+
let socket;
|
|
35
|
+
const finish = (reachable) => {
|
|
36
|
+
if (settled)
|
|
37
|
+
return;
|
|
38
|
+
settled = true;
|
|
39
|
+
if (timer !== undefined)
|
|
40
|
+
clearTimeout(timer);
|
|
41
|
+
options.signal?.removeEventListener('abort', onAbort);
|
|
42
|
+
socket?.destroy();
|
|
43
|
+
resolve({ host, port, reachable, elapsedMs: Date.now() - startedAt });
|
|
44
|
+
};
|
|
45
|
+
const onAbort = () => finish(false);
|
|
46
|
+
try {
|
|
47
|
+
socket = connector({ host, port });
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
finish(false);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
timer = setTimeout(() => finish(false), timeoutMs);
|
|
54
|
+
socket.once('connect', () => finish(true));
|
|
55
|
+
socket.once('error', () => finish(false));
|
|
56
|
+
if (options.signal?.aborted) {
|
|
57
|
+
finish(false);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
options.signal?.addEventListener('abort', onAbort, { once: true });
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.js","sourceRoot":"","sources":["../src/probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Public contract for callers that want to own the playback UX.
|
|
3
|
+
*
|
|
4
|
+
* This file is types only: no runtime logic, no imports, no constants.
|
|
5
|
+
*/
|
|
6
|
+
export interface TTSProvider {
|
|
7
|
+
readonly name: string;
|
|
8
|
+
isAvailable(): Promise<boolean>;
|
|
9
|
+
synthesize(text: string, options: SynthesizeOptions): Promise<SynthesizeResult>;
|
|
10
|
+
}
|
|
11
|
+
export interface SynthesizeOptions {
|
|
12
|
+
voice?: string;
|
|
13
|
+
rate?: string;
|
|
14
|
+
pitch?: string;
|
|
15
|
+
volume?: string;
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Matches the `tts_generate` output. `filePath`/`format` are present only for
|
|
20
|
+
* real audio; the `fallback: 'speechSynthesis'` shape carries the original
|
|
21
|
+
* text instead and leaves the reading to the caller.
|
|
22
|
+
*/
|
|
23
|
+
export interface SynthesizeResult {
|
|
24
|
+
filePath?: string;
|
|
25
|
+
format?: string;
|
|
26
|
+
browserUrl?: string;
|
|
27
|
+
engine?: string;
|
|
28
|
+
fallback?: 'speechSynthesis';
|
|
29
|
+
text?: string;
|
|
30
|
+
voice?: string;
|
|
31
|
+
rate?: string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;IAC/B,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAChF;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd"}
|
package/dist/provider.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Publish the engine as an injectable cordis service (`ctx.tts`).
|
|
3
|
+
*
|
|
4
|
+
* Cordis contract (verified against @deepseek-ai/cordis 4.1.0):
|
|
5
|
+
* - `ctx.provide(name, value)` registers an implementation owned by the current
|
|
6
|
+
* fiber; it becomes visible as soon as the fiber is active and is removed when
|
|
7
|
+
* the fiber unloads. No explicit cleanup is needed on the plugin side.
|
|
8
|
+
* - `ctx.get(name)` reads it back, including from the same fiber.
|
|
9
|
+
* - `provide` throws if the name is already provided in this isolation scope
|
|
10
|
+
* (e.g. the user installed both the standalone `@leiboss/dsh-tts` and the
|
|
11
|
+
* engine mounted by `@leiboss/dsh-voiceover`). The first provider wins.
|
|
12
|
+
*
|
|
13
|
+
* Registration is best-effort by design: a host that cannot provide a service
|
|
14
|
+
* must still get the tools, so a failure here is logged and swallowed rather
|
|
15
|
+
* than thrown at mount time.
|
|
16
|
+
*/
|
|
17
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
18
|
+
import type { ResolvedConfig } from './config.ts';
|
|
19
|
+
import { TtsService } from './service.ts';
|
|
20
|
+
/**
|
|
21
|
+
* Mount `ctx.tts`. Returns the service when it was registered, or undefined
|
|
22
|
+
* when the host has no service seam or the name was already taken.
|
|
23
|
+
*/
|
|
24
|
+
export declare function mountTtsService(ctx: Context, config: ResolvedConfig): TtsService | undefined;
|
|
25
|
+
//# sourceMappingURL=register-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-service.d.ts","sourceRoot":"","sources":["../src/register-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAQzC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,GAAG,UAAU,GAAG,SAAS,CA4B5F"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { TtsService } from "./service.js";
|
|
2
|
+
/**
|
|
3
|
+
* Mount `ctx.tts`. Returns the service when it was registered, or undefined
|
|
4
|
+
* when the host has no service seam or the name was already taken.
|
|
5
|
+
*/
|
|
6
|
+
export function mountTtsService(ctx, config) {
|
|
7
|
+
const service = new TtsService(config, {
|
|
8
|
+
log: (message) => {
|
|
9
|
+
const logger = typeof ctx.logger === 'function' ? ctx.logger('@leiboss/dsh-tts') : undefined;
|
|
10
|
+
logger?.debug?.(message);
|
|
11
|
+
},
|
|
12
|
+
});
|
|
13
|
+
const host = ctx;
|
|
14
|
+
try {
|
|
15
|
+
if (typeof host.provide === 'function') {
|
|
16
|
+
host.provide('tts', service);
|
|
17
|
+
return service;
|
|
18
|
+
}
|
|
19
|
+
if (typeof host.set === 'function') {
|
|
20
|
+
// Legacy fallback: only valid when a prior provider already registered
|
|
21
|
+
// the name. Never used on cordis 4.x, which always has `provide`.
|
|
22
|
+
host.set('tts', service);
|
|
23
|
+
return service;
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const logger = typeof ctx.logger === 'function' ? ctx.logger('@leiboss/dsh-tts') : undefined;
|
|
29
|
+
logger?.warn?.(`Could not expose ctx.tts (${error instanceof Error ? error.message : String(error)}); the tools are still registered.`);
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=register-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-service.js","sourceRoot":"","sources":["../src/register-service.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAQzC;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY,EAAE,MAAsB;IAClE,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE;QACrC,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;YACf,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5F,MAAM,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAA;QAC1B,CAAC;KACF,CAAC,CAAA;IACF,MAAM,IAAI,GAAG,GAA6B,CAAA;IAE1C,IAAI,CAAC;QACH,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC5B,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YACnC,uEAAuE;YACvE,kEAAkE;YAClE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACxB,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAC5F,MAAM,EAAE,IAAI,EAAE,CACZ,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,CACxH,CAAA;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type SpawnFunction } from './edge-tts.ts';
|
|
2
|
+
export declare const DEFAULT_POWERSHELL_BINARY = "powershell.exe";
|
|
3
|
+
export declare const DEFAULT_FFMPEG_BINARY = "ffmpeg";
|
|
4
|
+
export interface SapiOptions {
|
|
5
|
+
/** Edge-style rate such as `+0%`; mapped onto SAPI's -10..10 scale. */
|
|
6
|
+
rate: string;
|
|
7
|
+
outputDir: string;
|
|
8
|
+
hash: string;
|
|
9
|
+
timeoutMs: number;
|
|
10
|
+
signal?: AbortSignal;
|
|
11
|
+
spawnImpl?: SpawnFunction;
|
|
12
|
+
now?: Date;
|
|
13
|
+
platform?: NodeJS.Platform;
|
|
14
|
+
powershellBinary?: string;
|
|
15
|
+
ffmpegBinary?: string;
|
|
16
|
+
}
|
|
17
|
+
/** SAPI only exists on Windows; every other platform skips this engine. */
|
|
18
|
+
export declare function isSapiSupported(platform?: NodeJS.Platform): boolean;
|
|
19
|
+
/** Map `+25%` / `-10%` onto SAPI's integer -10..10 rate scale. */
|
|
20
|
+
export declare function sapiRate(rate: string): number;
|
|
21
|
+
/**
|
|
22
|
+
* Synthesize `text` with the system voice. Produces the same dated `.mp3` cache
|
|
23
|
+
* path as Edge-TTS, so a successful fallback is cached like any other result.
|
|
24
|
+
*/
|
|
25
|
+
export declare function synthesizeSapi(text: string, options: SapiOptions): Promise<{
|
|
26
|
+
filePath: string;
|
|
27
|
+
format: string;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=sapi-tts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sapi-tts.d.ts","sourceRoot":"","sources":["../src/sapi-tts.ts"],"names":[],"mappings":"AAYA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAG9D,eAAO,MAAM,yBAAyB,mBAAmB,CAAA;AACzD,eAAO,MAAM,qBAAqB,WAAW,CAAA;AAE7C,MAAM,WAAW,WAAW;IAC1B,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,GAAG,CAAC,EAAE,IAAI,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAA;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,OAAO,CAErF;AAED,kEAAkE;AAClE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM7C;AAuBD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqG/C"}
|
package/dist/sapi-tts.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windows SAPI fallback, driven through `powershell.exe`.
|
|
3
|
+
*
|
|
4
|
+
* `System.Speech.Synthesis.SpeechSynthesizer` can only write WAV, while the
|
|
5
|
+
* cache and route own `.mp3` files. The WAV is therefore converted with
|
|
6
|
+
* `ffmpeg`; when ffmpeg is unavailable this engine reports failure and the
|
|
7
|
+
* chain continues to the browser `speechSynthesis` marker.
|
|
8
|
+
*/
|
|
9
|
+
import { mkdir, mkdtemp, rename, rm, stat, writeFile } from 'node:fs/promises';
|
|
10
|
+
import { tmpdir } from 'node:os';
|
|
11
|
+
import { dirname, join } from 'node:path';
|
|
12
|
+
import { AUDIO_FORMAT, outputFilePath } from "./cache.js";
|
|
13
|
+
import { runProcess } from "./edge-tts.js";
|
|
14
|
+
import { ErrorCode, TtsError } from "./errors.js";
|
|
15
|
+
export const DEFAULT_POWERSHELL_BINARY = 'powershell.exe';
|
|
16
|
+
export const DEFAULT_FFMPEG_BINARY = 'ffmpeg';
|
|
17
|
+
/** SAPI only exists on Windows; every other platform skips this engine. */
|
|
18
|
+
export function isSapiSupported(platform = process.platform) {
|
|
19
|
+
return platform === 'win32';
|
|
20
|
+
}
|
|
21
|
+
/** Map `+25%` / `-10%` onto SAPI's integer -10..10 rate scale. */
|
|
22
|
+
export function sapiRate(rate) {
|
|
23
|
+
const match = /^([+-])(\d{1,3})%$/.exec(rate.trim());
|
|
24
|
+
if (!match)
|
|
25
|
+
return 0;
|
|
26
|
+
const magnitude = Math.round(Number(match[2]) / 10);
|
|
27
|
+
const signed = match[1] === '-' ? -magnitude : magnitude;
|
|
28
|
+
return Math.max(-10, Math.min(10, signed));
|
|
29
|
+
}
|
|
30
|
+
/** PowerShell single-quoted literal escaping. */
|
|
31
|
+
function quote(value) {
|
|
32
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
33
|
+
}
|
|
34
|
+
async function run(command, args, options, label) {
|
|
35
|
+
try {
|
|
36
|
+
const result = await runProcess(command, args, options);
|
|
37
|
+
return { code: result.code, stderr: result.stderr };
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error instanceof TtsError && error.code === ErrorCode.Aborted)
|
|
41
|
+
throw error;
|
|
42
|
+
const detail = error instanceof Error ? error.message : String(error);
|
|
43
|
+
throw new Error(`${label} could not run: ${detail}`, { cause: error });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Synthesize `text` with the system voice. Produces the same dated `.mp3` cache
|
|
48
|
+
* path as Edge-TTS, so a successful fallback is cached like any other result.
|
|
49
|
+
*/
|
|
50
|
+
export async function synthesizeSapi(text, options) {
|
|
51
|
+
const platform = options.platform ?? process.platform;
|
|
52
|
+
if (!isSapiSupported(platform)) {
|
|
53
|
+
throw new Error('SAPI synthesis is only available on Windows.');
|
|
54
|
+
}
|
|
55
|
+
const target = outputFilePath(options.outputDir, options.hash, options.now);
|
|
56
|
+
const tempDir = await mkdtemp(join(tmpdir(), 'dsh-tts-sapi-'));
|
|
57
|
+
const wavPath = join(tempDir, 'speech.wav');
|
|
58
|
+
const textPath = join(tempDir, 'input.txt');
|
|
59
|
+
// Keep an `.mp3` suffix: ffmpeg infers the muxer from the extension, and the
|
|
60
|
+
// target is only published by the final atomic rename.
|
|
61
|
+
const partialPath = `${target}.partial.mp3`;
|
|
62
|
+
try {
|
|
63
|
+
await writeFile(textPath, text, 'utf8');
|
|
64
|
+
const script = [
|
|
65
|
+
"$ErrorActionPreference = 'Stop'",
|
|
66
|
+
'Add-Type -AssemblyName System.Speech',
|
|
67
|
+
'$engine = New-Object System.Speech.Synthesis.SpeechSynthesizer',
|
|
68
|
+
`$engine.Rate = ${sapiRate(options.rate)}`,
|
|
69
|
+
`$engine.SetOutputToWaveFile(${quote(wavPath)})`,
|
|
70
|
+
`$dshText = Get-Content -Raw -LiteralPath ${quote(textPath)} -Encoding UTF8`,
|
|
71
|
+
'$engine.Speak($dshText)',
|
|
72
|
+
'$engine.Dispose()',
|
|
73
|
+
].join('; ');
|
|
74
|
+
const powershell = options.powershellBinary ?? DEFAULT_POWERSHELL_BINARY;
|
|
75
|
+
const sapi = await run(powershell, [
|
|
76
|
+
'-NoProfile',
|
|
77
|
+
'-NonInteractive',
|
|
78
|
+
'-ExecutionPolicy',
|
|
79
|
+
'Bypass',
|
|
80
|
+
'-Command',
|
|
81
|
+
script,
|
|
82
|
+
], {
|
|
83
|
+
timeoutMs: options.timeoutMs,
|
|
84
|
+
signal: options.signal,
|
|
85
|
+
spawnImpl: options.spawnImpl,
|
|
86
|
+
}, 'powershell.exe');
|
|
87
|
+
if (sapi.code !== 0) {
|
|
88
|
+
throw new Error(`powershell.exe exited with code ${sapi.code ?? 'null'}: ${sapi.stderr.trim()}`);
|
|
89
|
+
}
|
|
90
|
+
const wav = await stat(wavPath).catch(() => undefined);
|
|
91
|
+
if (!wav?.isFile() || wav.size === 0) {
|
|
92
|
+
throw new Error('SAPI produced an empty WAV file.');
|
|
93
|
+
}
|
|
94
|
+
const ffmpeg = options.ffmpegBinary ?? DEFAULT_FFMPEG_BINARY;
|
|
95
|
+
await mkdir(dirname(target), { recursive: true });
|
|
96
|
+
const converted = await run(ffmpeg, [
|
|
97
|
+
'-hide_banner',
|
|
98
|
+
'-loglevel',
|
|
99
|
+
'error',
|
|
100
|
+
'-y',
|
|
101
|
+
'-i',
|
|
102
|
+
wavPath,
|
|
103
|
+
'-codec:a',
|
|
104
|
+
'libmp3lame',
|
|
105
|
+
'-q:a',
|
|
106
|
+
'4',
|
|
107
|
+
partialPath,
|
|
108
|
+
], {
|
|
109
|
+
timeoutMs: options.timeoutMs,
|
|
110
|
+
signal: options.signal,
|
|
111
|
+
spawnImpl: options.spawnImpl,
|
|
112
|
+
}, 'ffmpeg');
|
|
113
|
+
if (converted.code !== 0) {
|
|
114
|
+
throw new Error(`ffmpeg exited with code ${converted.code ?? 'null'}: ${converted.stderr.trim()}`);
|
|
115
|
+
}
|
|
116
|
+
const mp3 = await stat(partialPath).catch(() => undefined);
|
|
117
|
+
if (!mp3?.isFile() || mp3.size === 0) {
|
|
118
|
+
throw new Error('ffmpeg produced an empty MP3 file.');
|
|
119
|
+
}
|
|
120
|
+
await rename(partialPath, target);
|
|
121
|
+
return { filePath: target, format: AUDIO_FORMAT };
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
await rm(partialPath, { force: true }).catch(() => { });
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
finally {
|
|
128
|
+
await rm(tempDir, { recursive: true, force: true }).catch(() => { });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=sapi-tts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sapi-tts.js","sourceRoot":"","sources":["../src/sapi-tts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type SpawnFunction } from './edge-tts.ts';
|
|
2
|
+
import type { EngineHealthSnapshot } from './engine-health.ts';
|
|
3
|
+
import type { ResolvedConfig } from './config.ts';
|
|
4
|
+
/** Canonical result of the environment self-check. */
|
|
5
|
+
export interface SelfCheckResult {
|
|
6
|
+
edgeTtsAvailable: boolean;
|
|
7
|
+
edgeTtsVersion?: string;
|
|
8
|
+
spawnAllowed: boolean;
|
|
9
|
+
outputDirWritable: boolean;
|
|
10
|
+
dshHome: string;
|
|
11
|
+
/** Whether a proxy is configured for the Edge-TTS subprocess. */
|
|
12
|
+
proxyConfigured: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* In-memory engine health snapshot. Present only when the caller supplies a
|
|
15
|
+
* provider; it is never produced by probing the network here.
|
|
16
|
+
*/
|
|
17
|
+
engineHealth?: Record<string, EngineHealthSnapshot>;
|
|
18
|
+
}
|
|
19
|
+
/** Injection points for the self-check. */
|
|
20
|
+
export interface SelfCheckOptions {
|
|
21
|
+
config: ResolvedConfig;
|
|
22
|
+
signal?: AbortSignal;
|
|
23
|
+
spawnImpl?: SpawnFunction;
|
|
24
|
+
/** Pure snapshot provider; must not perform I/O. */
|
|
25
|
+
engineHealth?: () => Record<string, EngineHealthSnapshot>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Probe the local runtime without synthesizing audio: binary availability,
|
|
29
|
+
* permission to create the subprocess, and output-directory writability.
|
|
30
|
+
*/
|
|
31
|
+
export declare function selfCheck(options: SelfCheckOptions): Promise<SelfCheckResult>;
|
|
32
|
+
//# sourceMappingURL=self-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-check.d.ts","sourceRoot":"","sources":["../src/self-check.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAEjD,sDAAsD;AACtD,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,OAAO,CAAA;IACzB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,YAAY,EAAE,OAAO,CAAA;IACrB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,iEAAiE;IACjE,eAAe,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;CACpD;AAED,2CAA2C;AAC3C,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,SAAS,CAAC,EAAE,aAAa,CAAA;IACzB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;CAC1D;AAoBD;;;GAGG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAkDnF"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { access, mkdir } from 'node:fs/promises';
|
|
3
|
+
import { runProcess } from "./edge-tts.js";
|
|
4
|
+
import { ErrorCode, TtsError } from "./errors.js";
|
|
5
|
+
/** Version-looking token printed by `edge-tts --version`. */
|
|
6
|
+
const VERSION_PATTERN = /\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?/;
|
|
7
|
+
function parseVersion(output) {
|
|
8
|
+
return VERSION_PATTERN.exec(output)?.[0];
|
|
9
|
+
}
|
|
10
|
+
async function directoryWritable(outputDir) {
|
|
11
|
+
if (!outputDir)
|
|
12
|
+
return false;
|
|
13
|
+
try {
|
|
14
|
+
await mkdir(outputDir, { recursive: true });
|
|
15
|
+
await access(outputDir, constants.W_OK);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Probe the local runtime without synthesizing audio: binary availability,
|
|
24
|
+
* permission to create the subprocess, and output-directory writability.
|
|
25
|
+
*/
|
|
26
|
+
export async function selfCheck(options) {
|
|
27
|
+
const { config } = options;
|
|
28
|
+
const outputDirWritable = await directoryWritable(config.outputDir);
|
|
29
|
+
let edgeTtsAvailable = false;
|
|
30
|
+
let edgeTtsVersion;
|
|
31
|
+
let spawnAllowed = true;
|
|
32
|
+
try {
|
|
33
|
+
const probe = await runProcess(config.edgeTtsBinary, ['--version'], {
|
|
34
|
+
timeoutMs: Math.min(config.timeoutMs, 5_000),
|
|
35
|
+
signal: options.signal,
|
|
36
|
+
spawnImpl: options.spawnImpl,
|
|
37
|
+
});
|
|
38
|
+
// The process started, so Edge-TTS exists even when it rejects a
|
|
39
|
+
// `--version` flag with a usage exit status.
|
|
40
|
+
edgeTtsAvailable = true;
|
|
41
|
+
edgeTtsVersion = parseVersion(probe.stdout) ?? parseVersion(probe.stderr);
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
if (error instanceof TtsError) {
|
|
45
|
+
switch (error.code) {
|
|
46
|
+
case ErrorCode.Aborted:
|
|
47
|
+
throw error;
|
|
48
|
+
case ErrorCode.SpawnEperm:
|
|
49
|
+
spawnAllowed = false;
|
|
50
|
+
break;
|
|
51
|
+
case ErrorCode.EdgeTtsNotFound:
|
|
52
|
+
spawnAllowed = true;
|
|
53
|
+
break;
|
|
54
|
+
case ErrorCode.SynthesisTimeout:
|
|
55
|
+
// The binary started but the version probe hung.
|
|
56
|
+
edgeTtsAvailable = true;
|
|
57
|
+
break;
|
|
58
|
+
default:
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return {
|
|
64
|
+
edgeTtsAvailable,
|
|
65
|
+
...(edgeTtsVersion === undefined ? {} : { edgeTtsVersion }),
|
|
66
|
+
spawnAllowed,
|
|
67
|
+
outputDirWritable,
|
|
68
|
+
dshHome: config.dshHome,
|
|
69
|
+
proxyConfigured: config.proxy !== undefined,
|
|
70
|
+
...(options.engineHealth === undefined
|
|
71
|
+
? {}
|
|
72
|
+
: { engineHealth: options.engineHealth() }),
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=self-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-check.js","sourceRoot":"","sources":["../src/self-check.ts"],"names":[],"mappings":"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"}
|