diff --git a/packages/client/src/api/hermes/tts.ts b/packages/client/src/api/hermes/tts.ts index c22d28d..581dabc 100644 --- a/packages/client/src/api/hermes/tts.ts +++ b/packages/client/src/api/hermes/tts.ts @@ -1,6 +1,8 @@ export interface TtsOptions { text: string lang?: string + rate?: string // Edge TTS rate format: "+NN%" or "-NN%" + pitch?: string // Edge TTS pitch format: "+NNHz" or "-NNHz" } export async function generateSpeech(opts: TtsOptions): Promise<{ audio: Blob; engine: string }> { diff --git a/packages/client/src/components/hermes/chat/MessageItem.vue b/packages/client/src/components/hermes/chat/MessageItem.vue index 502f703..111d525 100644 --- a/packages/client/src/components/hermes/chat/MessageItem.vue +++ b/packages/client/src/components/hermes/chat/MessageItem.vue @@ -17,6 +17,7 @@ import { } from "./highlight"; import { useGlobalSpeech } from "@/composables/useSpeech"; import { useVoiceSettings } from "@/composables/useVoiceSettings"; +import { speedToEdgeRate, hzToEdgePitch } from "@/utils/ttsHelpers"; const TOOL_PAYLOAD_DISPLAY_LIMIT = 2000; @@ -420,6 +421,8 @@ function handleSpeechToggle() { speech.openaiToggle(props.message.id, content, { baseUrl: apiUrl, voice: voiceSettings.edgeVoice.value, + rate: speedToEdgeRate(voiceSettings.edgeRate.value), + pitch: hzToEdgePitch(voiceSettings.edgePitchHz.value), }) return } @@ -466,6 +469,8 @@ onMounted(() => { speech.openaiPlay(props.message.id, content, { baseUrl: '/api/tts/proxy', voice: voiceSettings.edgeVoice.value, + rate: speedToEdgeRate(voiceSettings.edgeRate.value), + pitch: hzToEdgePitch(voiceSettings.edgePitchHz.value), }) } else if (voiceSettings.provider.value === 'webspeech') { const text = speech.extractReadableText(content) diff --git a/packages/client/src/components/hermes/settings/VoiceSettings.vue b/packages/client/src/components/hermes/settings/VoiceSettings.vue index 42d1686..5b406b4 100644 --- a/packages/client/src/components/hermes/settings/VoiceSettings.vue +++ b/packages/client/src/components/hermes/settings/VoiceSettings.vue @@ -1,9 +1,10 @@