@argo-video/cli 0.5.0 → 0.7.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/README.md +38 -4
- package/dist/camera.d.ts +30 -0
- package/dist/camera.d.ts.map +1 -0
- package/dist/camera.js +299 -0
- package/dist/camera.js.map +1 -0
- package/dist/chapters.d.ts +7 -0
- package/dist/chapters.d.ts.map +1 -0
- package/dist/chapters.js +22 -0
- package/dist/chapters.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -1
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +9 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +119 -0
- package/dist/doctor.js.map +1 -0
- package/dist/export.d.ts +4 -0
- package/dist/export.d.ts.map +1 -1
- package/dist/export.js +51 -5
- package/dist/export.js.map +1 -1
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/pipeline.d.ts +4 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +37 -3
- package/dist/pipeline.js.map +1 -1
- package/dist/record.d.ts +1 -0
- package/dist/record.d.ts.map +1 -1
- package/dist/record.js +1 -0
- package/dist/record.js.map +1 -1
- package/dist/report.d.ts +16 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +33 -0
- package/dist/report.js.map +1 -0
- package/dist/subtitles.d.ts +4 -0
- package/dist/subtitles.d.ts.map +1 -0
- package/dist/subtitles.js +34 -0
- package/dist/subtitles.js.map +1 -0
- package/dist/tts/cache.d.ts +1 -0
- package/dist/tts/cache.d.ts.map +1 -1
- package/dist/tts/cache.js +2 -2
- package/dist/tts/cache.js.map +1 -1
- package/dist/tts/engine.d.ts +5 -0
- package/dist/tts/engine.d.ts.map +1 -1
- package/dist/tts/engine.js +22 -0
- package/dist/tts/engine.js.map +1 -1
- package/dist/tts/engines/elevenlabs.d.ts +17 -0
- package/dist/tts/engines/elevenlabs.d.ts.map +1 -0
- package/dist/tts/engines/elevenlabs.js +52 -0
- package/dist/tts/engines/elevenlabs.js.map +1 -0
- package/dist/tts/engines/gemini.d.ts +13 -0
- package/dist/tts/engines/gemini.d.ts.map +1 -0
- package/dist/tts/engines/gemini.js +53 -0
- package/dist/tts/engines/gemini.js.map +1 -0
- package/dist/tts/engines/index.d.ts +28 -0
- package/dist/tts/engines/index.d.ts.map +1 -0
- package/dist/tts/engines/index.js +21 -0
- package/dist/tts/engines/index.js.map +1 -0
- package/dist/tts/engines/kokoro.d.ts +27 -0
- package/dist/tts/engines/kokoro.d.ts.map +1 -0
- package/dist/tts/engines/kokoro.js +76 -0
- package/dist/tts/engines/kokoro.js.map +1 -0
- package/dist/tts/engines/mlx-audio.d.ts +14 -0
- package/dist/tts/engines/mlx-audio.d.ts.map +1 -0
- package/dist/tts/engines/mlx-audio.js +40 -0
- package/dist/tts/engines/mlx-audio.js.map +1 -0
- package/dist/tts/engines/openai.d.ts +13 -0
- package/dist/tts/engines/openai.d.ts.map +1 -0
- package/dist/tts/engines/openai.js +50 -0
- package/dist/tts/engines/openai.js.map +1 -0
- package/dist/tts/engines/sarvam.d.ts +13 -0
- package/dist/tts/engines/sarvam.d.ts.map +1 -0
- package/dist/tts/engines/sarvam.js +51 -0
- package/dist/tts/engines/sarvam.js.map +1 -0
- package/dist/tts/generate.d.ts.map +1 -1
- package/dist/tts/generate.js +22 -16
- package/dist/tts/generate.js.map +1 -1
- package/dist/tts/kokoro.d.ts +1 -29
- package/dist/tts/kokoro.d.ts.map +1 -1
- package/dist/tts/kokoro.js +2 -72
- package/dist/tts/kokoro.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
export class SarvamEngine {
|
|
2
|
+
apiKey;
|
|
3
|
+
model;
|
|
4
|
+
constructor(options) {
|
|
5
|
+
this.apiKey = options?.apiKey ?? '';
|
|
6
|
+
this.model = options?.model ?? 'bulbul:v2';
|
|
7
|
+
}
|
|
8
|
+
resolveApiKey() {
|
|
9
|
+
const key = this.apiKey || process.env.SARVAM_API_KEY || '';
|
|
10
|
+
if (!key) {
|
|
11
|
+
throw new Error('Sarvam TTS engine requires an API key. ' +
|
|
12
|
+
'Set SARVAM_API_KEY environment variable or pass apiKey option.');
|
|
13
|
+
}
|
|
14
|
+
return key;
|
|
15
|
+
}
|
|
16
|
+
async generate(text, options) {
|
|
17
|
+
if (!text?.trim())
|
|
18
|
+
throw new Error('TTS text must not be empty');
|
|
19
|
+
const response = await fetch('https://api.sarvam.ai/text-to-speech', {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
headers: {
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
'API-Subscription-Key': this.resolveApiKey(),
|
|
24
|
+
},
|
|
25
|
+
body: JSON.stringify({
|
|
26
|
+
inputs: [text],
|
|
27
|
+
target_language_code: options.lang ?? 'hi-IN',
|
|
28
|
+
speaker: options.voice ?? 'meera',
|
|
29
|
+
model: this.model,
|
|
30
|
+
pitch: 0,
|
|
31
|
+
pace: options.speed ?? 1.0,
|
|
32
|
+
loudness: 1.5,
|
|
33
|
+
enable_preprocessing: true,
|
|
34
|
+
}),
|
|
35
|
+
});
|
|
36
|
+
if (!response.ok) {
|
|
37
|
+
const body = await response.text();
|
|
38
|
+
throw new Error(`Sarvam TTS API error ${response.status}: ${body}`);
|
|
39
|
+
}
|
|
40
|
+
const json = await response.json();
|
|
41
|
+
if (!json.audios?.[0]) {
|
|
42
|
+
throw new Error('Sarvam TTS returned no audio data');
|
|
43
|
+
}
|
|
44
|
+
// Sarvam returns base64-encoded WAV
|
|
45
|
+
const audioBuffer = Buffer.from(json.audios[0], 'base64');
|
|
46
|
+
// Convert to Argo WAV format (mono Float32 24kHz)
|
|
47
|
+
const { convertToWav } = await import('../engine.js');
|
|
48
|
+
return convertToWav(audioBuffer);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=sarvam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sarvam.js","sourceRoot":"","sources":["../../../src/tts/engines/sarvam.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,YAAY;IACf,MAAM,CAAS;IACf,KAAK,CAAS;IAEtB,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,WAAW,CAAC;IAC7C,CAAC;IAEO,aAAa;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,yCAAyC;gBACzC,gEAAgE,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,OAAyB;QACpD,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAEjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,EAAE;YACnE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE;aAC7C;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,MAAM,EAAE,CAAC,IAAI,CAAC;gBACd,oBAAoB,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;gBAC7C,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;gBACjC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,CAAC;gBACR,IAAI,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG;gBAC1B,QAAQ,EAAE,GAAG;gBACb,oBAAoB,EAAE,IAAI;aAC3B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA2B,CAAC;QAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,oCAAoC;QACpC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAE1D,kDAAkD;QAClD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;QACtD,OAAO,YAAY,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAkExF"}
|
package/dist/tts/generate.js
CHANGED
|
@@ -33,29 +33,35 @@ export async function generateClips(options) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
const cache = new ClipCache(projectRoot);
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
// Build manifest entries with defaults
|
|
37
|
+
const entries = rawEntries.map((raw) => {
|
|
38
38
|
const r = raw;
|
|
39
|
-
|
|
40
|
-
const manifestEntry = {
|
|
39
|
+
const entry = {
|
|
41
40
|
scene: r.scene,
|
|
42
41
|
text: r.text,
|
|
43
42
|
voice: r.voice ?? defaults?.voice,
|
|
44
43
|
speed: r.speed ?? defaults?.speed,
|
|
44
|
+
lang: r.lang,
|
|
45
45
|
};
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
46
|
+
return { entry, clipPath: cache.getClipPath(demoName, entry) };
|
|
47
|
+
});
|
|
48
|
+
// Generate uncached clips sequentially — Kokoro's ONNX runtime is not
|
|
49
|
+
// safe for concurrent generate() calls (mutex errors). The shared init
|
|
50
|
+
// promise prevents duplicate model downloads, but generation must serialize.
|
|
51
|
+
const uncached = entries.filter(({ entry }) => !cache.isCached(demoName, entry));
|
|
52
|
+
for (const { entry } of uncached) {
|
|
53
|
+
const wavBuffer = await engine.generate(entry.text, {
|
|
54
|
+
voice: entry.voice,
|
|
55
|
+
speed: entry.speed,
|
|
56
|
+
lang: entry.lang,
|
|
57
|
+
});
|
|
58
|
+
cache.cacheClip(demoName, entry, wavBuffer);
|
|
59
|
+
}
|
|
60
|
+
// Read results (all clips now cached)
|
|
61
|
+
return entries.map(({ entry, clipPath }) => {
|
|
55
62
|
const wavBuf = fs.readFileSync(clipPath);
|
|
56
63
|
const { durationMs } = parseWavHeader(wavBuf);
|
|
57
|
-
|
|
58
|
-
}
|
|
59
|
-
return results;
|
|
64
|
+
return { scene: entry.scene, clipPath, durationMs };
|
|
65
|
+
});
|
|
60
66
|
}
|
|
61
67
|
//# sourceMappingURL=generate.js.map
|
package/dist/tts/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAsB,MAAM,YAAY,CAAC;AAgB3D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE1E,2BAA2B;IAC3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,yBAAyB;IACzB,IAAI,UAAqB,CAAC;IAC1B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,GAAG,YAAY,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,YAAY,YAAY,4BAA4B,CAAC,CAAC;IACxE,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,CAAC,GAAG,KAAgC,CAAC;QAC3C,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,oEAAoE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/tts/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/tts/kokoro.d.ts
CHANGED
|
@@ -1,30 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export interface KokoroEngineOptions {
|
|
3
|
-
modelId?: string;
|
|
4
|
-
dtype?: 'fp32' | 'fp16' | 'q8' | 'q4' | 'q4f16';
|
|
5
|
-
device?: 'wasm' | 'webgpu' | 'cpu' | null;
|
|
6
|
-
onProgress?: (progress: {
|
|
7
|
-
status: string;
|
|
8
|
-
progress?: number;
|
|
9
|
-
file?: string;
|
|
10
|
-
}) => void;
|
|
11
|
-
}
|
|
12
|
-
export declare class KokoroEngine implements TTSEngine {
|
|
13
|
-
private tts;
|
|
14
|
-
private modelId;
|
|
15
|
-
private dtype;
|
|
16
|
-
private device;
|
|
17
|
-
private onProgress?;
|
|
18
|
-
constructor(options?: KokoroEngineOptions);
|
|
19
|
-
private getTTS;
|
|
20
|
-
generate(text: string, options: TTSEngineOptions): Promise<Buffer>;
|
|
21
|
-
/**
|
|
22
|
-
* Stream audio generation sentence-by-sentence.
|
|
23
|
-
* Yields WAV buffers for each sentence as they're generated.
|
|
24
|
-
*/
|
|
25
|
-
stream(text: string, options: TTSEngineOptions): AsyncGenerator<{
|
|
26
|
-
text: string;
|
|
27
|
-
audio: Buffer;
|
|
28
|
-
}>;
|
|
29
|
-
}
|
|
1
|
+
export { KokoroEngine, type KokoroEngineOptions } from './engines/kokoro.js';
|
|
30
2
|
//# sourceMappingURL=kokoro.d.ts.map
|
package/dist/tts/kokoro.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kokoro.d.ts","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kokoro.d.ts","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/tts/kokoro.js
CHANGED
|
@@ -1,73 +1,3 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
modelId;
|
|
4
|
-
dtype;
|
|
5
|
-
device;
|
|
6
|
-
onProgress;
|
|
7
|
-
constructor(options) {
|
|
8
|
-
this.modelId = options?.modelId ?? 'onnx-community/Kokoro-82M-v1.0-ONNX';
|
|
9
|
-
this.dtype = options?.dtype ?? 'q8';
|
|
10
|
-
this.device = options?.device ?? null;
|
|
11
|
-
this.onProgress = options?.onProgress;
|
|
12
|
-
}
|
|
13
|
-
async getTTS() {
|
|
14
|
-
if (this.tts)
|
|
15
|
-
return this.tts;
|
|
16
|
-
try {
|
|
17
|
-
const { KokoroTTS } = await import('kokoro-js');
|
|
18
|
-
this.tts = await KokoroTTS.from_pretrained(this.modelId, {
|
|
19
|
-
dtype: this.dtype,
|
|
20
|
-
device: this.device,
|
|
21
|
-
progress_callback: this.onProgress ?? undefined,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
catch (err) {
|
|
25
|
-
throw new Error(`Failed to initialize Kokoro TTS (model: ${this.modelId}, dtype: ${this.dtype}). ` +
|
|
26
|
-
`This may require an internet connection for first-time model download. ` +
|
|
27
|
-
`Original error: ${err.message}`);
|
|
28
|
-
}
|
|
29
|
-
return this.tts;
|
|
30
|
-
}
|
|
31
|
-
async generate(text, options) {
|
|
32
|
-
if (!text?.trim())
|
|
33
|
-
throw new Error('TTS text must not be empty');
|
|
34
|
-
const tts = await this.getTTS();
|
|
35
|
-
let audio;
|
|
36
|
-
try {
|
|
37
|
-
audio = await tts.generate(text, {
|
|
38
|
-
voice: options.voice ?? 'af_heart',
|
|
39
|
-
speed: options.speed ?? 1.0,
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
throw new Error(`Kokoro TTS failed to generate audio for text "${text.substring(0, 80)}..." ` +
|
|
44
|
-
`(voice: ${options.voice ?? 'af_heart'}). Original error: ${err.message}`);
|
|
45
|
-
}
|
|
46
|
-
const samples = audio.data ?? audio.audio;
|
|
47
|
-
if (!samples || !(samples instanceof Float32Array)) {
|
|
48
|
-
throw new Error('kokoro-js returned unexpected audio format. Check kokoro-js version.');
|
|
49
|
-
}
|
|
50
|
-
const sampleRate = audio.sampling_rate;
|
|
51
|
-
const { createWavBuffer } = await import('./engine.js');
|
|
52
|
-
return createWavBuffer(samples, sampleRate);
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Stream audio generation sentence-by-sentence.
|
|
56
|
-
* Yields WAV buffers for each sentence as they're generated.
|
|
57
|
-
*/
|
|
58
|
-
async *stream(text, options) {
|
|
59
|
-
if (!text?.trim())
|
|
60
|
-
throw new Error('TTS text must not be empty');
|
|
61
|
-
const tts = await this.getTTS();
|
|
62
|
-
const { createWavBuffer } = await import('./engine.js');
|
|
63
|
-
for await (const chunk of tts.stream(text, {
|
|
64
|
-
voice: options.voice ?? 'af_heart',
|
|
65
|
-
speed: options.speed ?? 1.0,
|
|
66
|
-
})) {
|
|
67
|
-
const samples = chunk.audio.data ?? chunk.audio.audio;
|
|
68
|
-
const sampleRate = chunk.audio.sampling_rate;
|
|
69
|
-
yield { text: chunk.text, audio: createWavBuffer(samples, sampleRate) };
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
1
|
+
// Re-export from new location for backward compatibility
|
|
2
|
+
export { KokoroEngine } from './engines/kokoro.js';
|
|
73
3
|
//# sourceMappingURL=kokoro.js.map
|
package/dist/tts/kokoro.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kokoro.js","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"kokoro.js","sourceRoot":"","sources":["../../src/tts/kokoro.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,OAAO,EAAE,YAAY,EAA4B,MAAM,qBAAqB,CAAC"}
|