Files
FusionAGI/frontend/src/hooks/useVoicePlayback.ts
defiQUG c052b07662
Some checks failed
Tests / test (3.10) (push) Has been cancelled
Tests / test (3.11) (push) Has been cancelled
Tests / test (3.12) (push) Has been cancelled
Tests / lint (push) Has been cancelled
Tests / docker (push) Has been cancelled
Initial commit: add .gitignore and README
2026-02-09 21:51:42 -08:00

31 lines
992 B
TypeScript

import { useState, useCallback } from "react"
export function useVoicePlayback() {
const [speakingHead, setSpeakingHead] = useState<string | null>(null)
const [headSummaries, setHeadSummaries] = useState<Record<string, string>>({})
const onHeadSpeak = useCallback(
(headId: string, summary: string, audioBase64?: string | null) => {
setSpeakingHead(headId)
setHeadSummaries((prev) => ({ ...prev, [headId]: summary }))
if (audioBase64) {
try {
const audio = new Audio(`data:audio/wav;base64,${audioBase64}`)
audio.play().then(() => {
audio.onended = () => setSpeakingHead(null)
}).catch(() => setSpeakingHead(null))
} catch {
setSpeakingHead(null)
}
} else {
setTimeout(() => setSpeakingHead(null), 1500)
}
},
[]
)
const clearSpeaking = useCallback(() => setSpeakingHead(null), [])
return { speakingHead, headSummaries, onHeadSpeak, clearSpeaking }
}