




















@@ -12,6 +12,7 @@ import type {
1212SpeechProviderConfig,
1313SpeechProviderOverrides,
1414SpeechProviderPlugin,
15+SpeechSynthesisRequest,
1516} from "openclaw/plugin-sdk/speech-core";
1617import { asObject, trimToUndefined } from "openclaw/plugin-sdk/speech-core";
1718import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
@@ -537,6 +538,34 @@ async function synthesizeGoogleTtsPcm(params: {
537538throw lastError instanceof Error ? lastError : new Error(String(lastError));
538539}
539540541+type GoogleTtsSynthesisRequest = Pick<
542+SpeechSynthesisRequest,
543+"cfg" | "providerConfig" | "providerOverrides" | "text" | "timeoutMs"
544+>;
545+546+async function synthesizeConfiguredGoogleTts(req: GoogleTtsSynthesisRequest): Promise<Buffer> {
547+const config = readGoogleTtsProviderConfig(req.providerConfig);
548+const overrides = readGoogleTtsOverrides(req.providerOverrides);
549+const apiKey = resolveGoogleTtsApiKey({
550+cfg: req.cfg,
551+providerConfig: req.providerConfig,
552+});
553+if (!apiKey) {
554+throw new Error("Google API key missing");
555+}
556+return synthesizeGoogleTtsPcm({
557+text: req.text,
558+ apiKey,
559+baseUrl: resolveGoogleTtsBaseUrl({ cfg: req.cfg, providerConfig: config }),
560+request: sanitizeConfiguredModelProviderRequest(req.cfg?.models?.providers?.google?.request),
561+model: normalizeGoogleTtsModel(overrides.model ?? config.model),
562+voiceName: normalizeGoogleTtsVoiceName(overrides.voiceName ?? config.voiceName),
563+audioProfile: overrides.audioProfile ?? config.audioProfile,
564+speakerName: overrides.speakerName ?? config.speakerName,
565+timeoutMs: req.timeoutMs,
566+});
567+}
568+540569export function buildGoogleSpeechProvider(): SpeechProviderPlugin {
541570return {
542571id: "google",
@@ -598,28 +627,7 @@ export function buildGoogleSpeechProvider(): SpeechProviderPlugin {
598627};
599628},
600629synthesize: async (req) => {
601-const config = readGoogleTtsProviderConfig(req.providerConfig);
602-const overrides = readGoogleTtsOverrides(req.providerOverrides);
603-const apiKey = resolveGoogleTtsApiKey({
604-cfg: req.cfg,
605-providerConfig: req.providerConfig,
606-});
607-if (!apiKey) {
608-throw new Error("Google API key missing");
609-}
610-const pcm = await synthesizeGoogleTtsPcm({
611-text: req.text,
612- apiKey,
613-baseUrl: resolveGoogleTtsBaseUrl({ cfg: req.cfg, providerConfig: config }),
614-request: sanitizeConfiguredModelProviderRequest(
615-req.cfg?.models?.providers?.google?.request,
616-),
617-model: normalizeGoogleTtsModel(overrides.model ?? config.model),
618-voiceName: normalizeGoogleTtsVoiceName(overrides.voiceName ?? config.voiceName),
619-audioProfile: overrides.audioProfile ?? config.audioProfile,
620-speakerName: overrides.speakerName ?? config.speakerName,
621-timeoutMs: req.timeoutMs,
622-});
630+const pcm = await synthesizeConfiguredGoogleTts(req);
623631if (req.target === "voice-note") {
624632return {
625633audioBuffer: await transcodeAudioBufferToOpus({
@@ -641,28 +649,7 @@ export function buildGoogleSpeechProvider(): SpeechProviderPlugin {
641649};
642650},
643651synthesizeTelephony: async (req) => {
644-const config = readGoogleTtsProviderConfig(req.providerConfig);
645-const overrides = readGoogleTtsOverrides(req.providerOverrides);
646-const apiKey = resolveGoogleTtsApiKey({
647-cfg: req.cfg,
648-providerConfig: req.providerConfig,
649-});
650-if (!apiKey) {
651-throw new Error("Google API key missing");
652-}
653-const pcm = await synthesizeGoogleTtsPcm({
654-text: req.text,
655- apiKey,
656-baseUrl: resolveGoogleTtsBaseUrl({ cfg: req.cfg, providerConfig: config }),
657-request: sanitizeConfiguredModelProviderRequest(
658-req.cfg?.models?.providers?.google?.request,
659-),
660-model: normalizeGoogleTtsModel(overrides.model ?? config.model),
661-voiceName: normalizeGoogleTtsVoiceName(overrides.voiceName ?? config.voiceName),
662-audioProfile: overrides.audioProfile ?? config.audioProfile,
663-speakerName: overrides.speakerName ?? config.speakerName,
664-timeoutMs: req.timeoutMs,
665-});
652+const pcm = await synthesizeConfiguredGoogleTts(req);
666653return {
667654audioBuffer: pcm,
668655outputFormat: "pcm",
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。