Files
Hermes-ui/packages/client/src/api/hermes/tts.ts
T

37 lines
1.0 KiB
TypeScript
Raw Normal View History

2026-05-08 15:34:11 +08:00
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"
2026-05-08 15:34:11 +08:00
}
export async function generateSpeech(opts: TtsOptions): Promise<{ audio: Blob; engine: string }> {
const res = await fetch(
`${localStorage.getItem('hermes_server_url') || ''}/api/hermes/tts`,
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${localStorage.getItem('hermes_api_key') || ''}`,
},
body: JSON.stringify(opts),
},
)
if (!res.ok) {
throw new Error(`TTS request failed: ${res.status}`)
}
const audio = await res.blob()
const engine = res.headers.get('X-TTS-Engine') || 'unknown'
return { audio, engine }
}
export function playAudioBlob(blob: Blob): HTMLAudioElement {
const url = URL.createObjectURL(blob)
const audio = new Audio(url)
audio.play()
audio.onended = () => URL.revokeObjectURL(url)
return audio
}