Stabilize interim speech capture
This commit is contained in:
@@ -37,6 +37,7 @@ function App() {
|
||||
const isRecordingRef = useRef(false)
|
||||
const lastResultAtRef = useRef<number>(Date.now())
|
||||
const restartLockRef = useRef(false)
|
||||
const finalizeTimerRef = useRef<number | null>(null)
|
||||
|
||||
const hasSpeechRecognition = useMemo(() => {
|
||||
return 'SpeechRecognition' in window || 'webkitSpeechRecognition' in window
|
||||
@@ -117,6 +118,7 @@ function App() {
|
||||
recognition.lang = 'ko-KR'
|
||||
recognition.interimResults = true
|
||||
recognition.continuous = true
|
||||
recognition.maxAlternatives = 3
|
||||
|
||||
recognition.onresult = (event) => {
|
||||
lastResultAtRef.current = Date.now()
|
||||
@@ -148,6 +150,13 @@ function App() {
|
||||
},
|
||||
]
|
||||
})
|
||||
if (finalizeTimerRef.current) {
|
||||
window.clearTimeout(finalizeTimerRef.current)
|
||||
}
|
||||
finalizeTimerRef.current = window.setTimeout(() => {
|
||||
void commitLiveIfAny()
|
||||
finalizeTimerRef.current = null
|
||||
}, 1200)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,6 +165,10 @@ function App() {
|
||||
}
|
||||
|
||||
recognition.onend = () => {
|
||||
if (finalizeTimerRef.current) {
|
||||
window.clearTimeout(finalizeTimerRef.current)
|
||||
finalizeTimerRef.current = null
|
||||
}
|
||||
void commitLiveIfAny()
|
||||
liveTextRef.current = ''
|
||||
if (isRecordingRef.current) {
|
||||
@@ -175,6 +188,10 @@ function App() {
|
||||
if (!meetingIdRef.current) return
|
||||
const trimmed = text.trim()
|
||||
if (!trimmed) return
|
||||
if (finalizeTimerRef.current) {
|
||||
window.clearTimeout(finalizeTimerRef.current)
|
||||
finalizeTimerRef.current = null
|
||||
}
|
||||
lastResultAtRef.current = Date.now()
|
||||
const ts = new Date().toISOString()
|
||||
liveTextRef.current = ''
|
||||
|
||||
Reference in New Issue
Block a user