11
This commit is contained in:
46
src/services/voiceCloneEnroll.js
Normal file
46
src/services/voiceCloneEnroll.js
Normal file
@@ -0,0 +1,46 @@
|
||||
import { invoke } from "@tauri-apps/api/core";
|
||||
|
||||
import { ensureAppConfigReady } from "../config/videoPipeline.js";
|
||||
import { formatVoiceIdWithPrefix } from "../utils/voiceIdPrefix.js";
|
||||
|
||||
const VOICE_CLONE_ENROLL_SCRIPT = "voice_clone_enroll.js";
|
||||
|
||||
/**
|
||||
* @param {{ name: string, audioPath: string, existingVoiceId?: string }} opts
|
||||
*/
|
||||
export async function enrollCloneVoice(opts) {
|
||||
const name = String(opts.name || "").trim();
|
||||
const audioPath = String(opts.audioPath || "").trim();
|
||||
if (!name) return { ok: false, message: "请先输入音色名称" };
|
||||
if (!audioPath) return { ok: false, message: "请先录制或上传参考声音" };
|
||||
|
||||
const cfg = await ensureAppConfigReady();
|
||||
if (!cfg.ok) return { ok: false, message: cfg.message };
|
||||
|
||||
try {
|
||||
const result = await invoke("run_nodejs_script", {
|
||||
scriptName: VOICE_CLONE_ENROLL_SCRIPT,
|
||||
params: { audioPath, name },
|
||||
});
|
||||
|
||||
if (!result?.success || !result?.voiceId) {
|
||||
return {
|
||||
ok: false,
|
||||
message: String(result?.error || "复刻失败,请重试"),
|
||||
};
|
||||
}
|
||||
|
||||
const voiceId = formatVoiceIdWithPrefix(
|
||||
result.voiceId,
|
||||
opts.existingVoiceId || result.voiceId,
|
||||
);
|
||||
return {
|
||||
ok: true,
|
||||
voiceId,
|
||||
message: "复刻成功!音色 ID 已自动填入",
|
||||
};
|
||||
} catch (err) {
|
||||
const msg = err instanceof Error ? err.message : String(err || "未知错误");
|
||||
return { ok: false, message: `调用复刻服务异常:${msg}` };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user