





























@@ -78,6 +78,33 @@ function parseNumberValue(value: string): number | undefined {
78787979export const isValidVoiceId = isValidElevenLabsVoiceId;
808081+function normalizeVoiceSetting(value: unknown, min: number, max: number): number | undefined {
82+const number = asFiniteNumber(value);
83+return number !== undefined && number >= min && number <= max ? number : undefined;
84+}
85+86+function normalizeVoiceSettings(
87+rawVoiceSettings: Record<string, unknown> | undefined,
88+): Partial<ElevenLabsProviderConfig["voiceSettings"]> {
89+return {
90+ ...(normalizeVoiceSetting(rawVoiceSettings?.stability, 0, 1) == null
91+ ? {}
92+ : { stability: normalizeVoiceSetting(rawVoiceSettings?.stability, 0, 1) }),
93+ ...(normalizeVoiceSetting(rawVoiceSettings?.similarityBoost, 0, 1) == null
94+ ? {}
95+ : { similarityBoost: normalizeVoiceSetting(rawVoiceSettings?.similarityBoost, 0, 1) }),
96+ ...(normalizeVoiceSetting(rawVoiceSettings?.style, 0, 1) == null
97+ ? {}
98+ : { style: normalizeVoiceSetting(rawVoiceSettings?.style, 0, 1) }),
99+ ...(asBoolean(rawVoiceSettings?.useSpeakerBoost) == null
100+ ? {}
101+ : { useSpeakerBoost: asBoolean(rawVoiceSettings?.useSpeakerBoost) }),
102+ ...(normalizeVoiceSetting(rawVoiceSettings?.speed, 0.5, 2) == null
103+ ? {}
104+ : { speed: normalizeVoiceSetting(rawVoiceSettings?.speed, 0.5, 2) }),
105+};
106+}
107+81108function normalizeElevenLabsProviderConfig(
82109rawConfig: Record<string, unknown>,
83110): ElevenLabsProviderConfig {
@@ -100,16 +127,8 @@ function normalizeElevenLabsProviderConfig(
100127| undefined,
101128languageCode: trimToUndefined(raw?.languageCode),
102129voiceSettings: {
103-stability:
104-asFiniteNumber(rawVoiceSettings?.stability) ?? DEFAULT_ELEVENLABS_VOICE_SETTINGS.stability,
105-similarityBoost:
106-asFiniteNumber(rawVoiceSettings?.similarityBoost) ??
107-DEFAULT_ELEVENLABS_VOICE_SETTINGS.similarityBoost,
108-style: asFiniteNumber(rawVoiceSettings?.style) ?? DEFAULT_ELEVENLABS_VOICE_SETTINGS.style,
109-useSpeakerBoost:
110-asBoolean(rawVoiceSettings?.useSpeakerBoost) ??
111-DEFAULT_ELEVENLABS_VOICE_SETTINGS.useSpeakerBoost,
112-speed: asFiniteNumber(rawVoiceSettings?.speed) ?? DEFAULT_ELEVENLABS_VOICE_SETTINGS.speed,
130+ ...DEFAULT_ELEVENLABS_VOICE_SETTINGS,
131+ ...normalizeVoiceSettings(rawVoiceSettings),
113132},
114133};
115134}
@@ -128,13 +147,8 @@ function readElevenLabsProviderConfig(config: SpeechProviderConfig): ElevenLabsP
128147defaults.applyTextNormalization,
129148languageCode: trimToUndefined(config.languageCode) ?? defaults.languageCode,
130149voiceSettings: {
131-stability: asFiniteNumber(voiceSettings?.stability) ?? defaults.voiceSettings.stability,
132-similarityBoost:
133-asFiniteNumber(voiceSettings?.similarityBoost) ?? defaults.voiceSettings.similarityBoost,
134-style: asFiniteNumber(voiceSettings?.style) ?? defaults.voiceSettings.style,
135-useSpeakerBoost:
136-asBoolean(voiceSettings?.useSpeakerBoost) ?? defaults.voiceSettings.useSpeakerBoost,
137-speed: asFiniteNumber(voiceSettings?.speed) ?? defaults.voiceSettings.speed,
150+ ...defaults.voiceSettings,
151+ ...normalizeVoiceSettings(voiceSettings),
138152},
139153};
140154}
@@ -159,21 +173,7 @@ function resolveVoiceSettingsOverride(
159173const voiceSettings = asObject(overrides);
160174return {
161175 ...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) }),
176+ ...normalizeVoiceSettings(voiceSettings),
177177};
178178}
179179@@ -406,21 +406,7 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
406406}),
407407voiceSettings: {
408408 ...base.voiceSettings,
409- ...(asFiniteNumber(talkVoiceSettings?.stability) == null
410- ? {}
411- : { stability: asFiniteNumber(talkVoiceSettings?.stability) }),
412- ...(asFiniteNumber(talkVoiceSettings?.similarityBoost) == null
413- ? {}
414- : { similarityBoost: asFiniteNumber(talkVoiceSettings?.similarityBoost) }),
415- ...(asFiniteNumber(talkVoiceSettings?.style) == null
416- ? {}
417- : { style: asFiniteNumber(talkVoiceSettings?.style) }),
418- ...(asBoolean(talkVoiceSettings?.useSpeakerBoost) == null
419- ? {}
420- : { useSpeakerBoost: asBoolean(talkVoiceSettings?.useSpeakerBoost) }),
421- ...(asFiniteNumber(talkVoiceSettings?.speed) == null
422- ? {}
423- : { speed: asFiniteNumber(talkVoiceSettings?.speed) }),
409+ ...normalizeVoiceSettings(talkVoiceSettings),
424410},
425411};
426412},
@@ -429,14 +415,18 @@ export function buildElevenLabsSpeechProvider(): SpeechProviderPlugin {
429415const language = normalizeLowercaseStringOrEmpty(trimToUndefined(params.language));
430416const latencyTier = asFiniteNumber(params.latencyTier);
431417const voiceSettings = {
432- ...(asFiniteNumber(params.speed) == null ? {} : { speed: asFiniteNumber(params.speed) }),
433- ...(asFiniteNumber(params.stability) == null
418+ ...(normalizeVoiceSetting(params.speed, 0.5, 2) == null
419+ ? {}
420+ : { speed: normalizeVoiceSetting(params.speed, 0.5, 2) }),
421+ ...(normalizeVoiceSetting(params.stability, 0, 1) == null
422+ ? {}
423+ : { stability: normalizeVoiceSetting(params.stability, 0, 1) }),
424+ ...(normalizeVoiceSetting(params.similarity, 0, 1) == null
434425 ? {}
435- : { stability: asFiniteNumber(params.stability) }),
436- ...(asFiniteNumber(params.similarity) == null
426+ : { similarityBoost: normalizeVoiceSetting(params.similarity, 0, 1) }),
427+ ...(normalizeVoiceSetting(params.style, 0, 1) == null
437428 ? {}
438- : { similarityBoost: asFiniteNumber(params.similarity) }),
439- ...(asFiniteNumber(params.style) == null ? {} : { style: asFiniteNumber(params.style) }),
429+ : { style: normalizeVoiceSetting(params.style, 0, 1) }),
440430 ...(asBoolean(params.speakerBoost) == null
441431 ? {}
442432 : { useSpeakerBoost: asBoolean(params.speakerBoost) }),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。