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