






















@@ -152,6 +152,31 @@ function mergeVoiceSettingsOverride(
152152};
153153}
154154155+function resolveVoiceSettingsOverride(
156+base: ElevenLabsProviderConfig["voiceSettings"],
157+overrides: unknown,
158+): ElevenLabsProviderConfig["voiceSettings"] {
159+const voiceSettings = asObject(overrides);
160+return {
161+ ...base,
162+ ...(asFiniteNumber(voiceSettings?.stability) == null
163+ ? {}
164+ : { stability: asFiniteNumber(voiceSettings?.stability) }),
165+ ...(asFiniteNumber(voiceSettings?.similarityBoost) == null
166+ ? {}
167+ : { similarityBoost: asFiniteNumber(voiceSettings?.similarityBoost) }),
168+ ...(asFiniteNumber(voiceSettings?.style) == null
169+ ? {}
170+ : { style: asFiniteNumber(voiceSettings?.style) }),
171+ ...(asBoolean(voiceSettings?.useSpeakerBoost) == null
172+ ? {}
173+ : { useSpeakerBoost: asBoolean(voiceSettings?.useSpeakerBoost) }),
174+ ...(asFiniteNumber(voiceSettings?.speed) == null
175+ ? {}
176+ : { speed: asFiniteNumber(voiceSettings?.speed) }),
177+};
178+}
179+155180function parseDirectiveToken(ctx: SpeechDirectiveTokenParseContext) {
156181try {
157182switch (ctx.key) {
@@ -469,7 +494,6 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
469494const outputFormat =
470495trimToUndefined(overrides.outputFormat) ??
471496(req.target === "voice-note" ? "opus_48000_64" : "mp3_44100_128");
472-const overrideVoiceSettings = asObject(overrides.voiceSettings);
473497const latencyTier = asFiniteNumber(overrides.latencyTier);
474498const audioBuffer = await elevenLabsTTS({
475499text: req.text,
@@ -487,24 +511,7 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
487511| undefined) ?? config.applyTextNormalization,
488512languageCode: trimToUndefined(overrides.languageCode) ?? config.languageCode,
489513 latencyTier,
490-voiceSettings: {
491- ...config.voiceSettings,
492- ...(asFiniteNumber(overrideVoiceSettings?.stability) == null
493- ? {}
494- : { stability: asFiniteNumber(overrideVoiceSettings?.stability) }),
495- ...(asFiniteNumber(overrideVoiceSettings?.similarityBoost) == null
496- ? {}
497- : { similarityBoost: asFiniteNumber(overrideVoiceSettings?.similarityBoost) }),
498- ...(asFiniteNumber(overrideVoiceSettings?.style) == null
499- ? {}
500- : { style: asFiniteNumber(overrideVoiceSettings?.style) }),
501- ...(asBoolean(overrideVoiceSettings?.useSpeakerBoost) == null
502- ? {}
503- : { useSpeakerBoost: asBoolean(overrideVoiceSettings?.useSpeakerBoost) }),
504- ...(asFiniteNumber(overrideVoiceSettings?.speed) == null
505- ? {}
506- : { speed: asFiniteNumber(overrideVoiceSettings?.speed) }),
507-},
514+voiceSettings: resolveVoiceSettingsOverride(config.voiceSettings, overrides.voiceSettings),
508515timeoutMs: req.timeoutMs,
509516});
510517return {
@@ -516,6 +523,7 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
516523},
517524synthesizeTelephony: async (req) => {
518525const config = readElevenLabsProviderConfig(req.providerConfig);
526+const overrides = req.providerOverrides ?? {};
519527const apiKey =
520528config.apiKey || resolveElevenLabsApiKeyWithProfileFallback() || process.env.XI_API_KEY;
521529if (!apiKey) {
@@ -527,13 +535,18 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
527535text: req.text,
528536 apiKey,
529537baseUrl: config.baseUrl,
530-voiceId: config.voiceId,
531-modelId: config.modelId,
538+voiceId: trimToUndefined(overrides.voiceId) ?? config.voiceId,
539+modelId: trimToUndefined(overrides.modelId) ?? config.modelId,
532540 outputFormat,
533-seed: config.seed,
534-applyTextNormalization: config.applyTextNormalization,
535-languageCode: config.languageCode,
536-voiceSettings: config.voiceSettings,
541+seed: asFiniteNumber(overrides.seed) ?? config.seed,
542+applyTextNormalization:
543+(trimToUndefined(overrides.applyTextNormalization) as
544+| "auto"
545+| "on"
546+| "off"
547+| undefined) ?? config.applyTextNormalization,
548+languageCode: trimToUndefined(overrides.languageCode) ?? config.languageCode,
549+voiceSettings: resolveVoiceSettingsOverride(config.voiceSettings, overrides.voiceSettings),
537550timeoutMs: req.timeoutMs,
538551});
539552return { audioBuffer, outputFormat, sampleRate };
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。