UNPKG

react-voice-to-text

Version:

A small lib to use the speech recognition api in react

69 lines (68 loc) 2.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isSpeechRecognitionSupported = isSpeechRecognitionSupported; exports.useSpeechRecognition = useSpeechRecognition; function isSpeechRecognitionSupported() { if (!('SpeechRecognition' in window) && !('webkitSpeechRecognition' in window)) { return false; } const SpeechRecognition = (window['SpeechRecognition'] || window['webkitSpeechRecognition']); if (!SpeechRecognition) { return false; } return true; } function useSpeechRecognition({ throwOnUnsupported, onStart = () => { }, onResult = () => { }, onEnd = () => { }, onStop = () => { }, onError = () => { }, lang = 'fr-FR', interimResults = false, maxAlternatives = 1 } = {}) { if (!('SpeechRecognition' in window) && !('webkitSpeechRecognition' in window)) { if (throwOnUnsupported) { throw new Error("Browser doesn't support the Web Speech API"); } else { console.error("Browser doesn't support the Web Speech API"); return; } } const SpeechRecognition = (window['SpeechRecognition'] || window['webkitSpeechRecognition']); if (!SpeechRecognition) { if (throwOnUnsupported) { throw new Error("Browser doesn't support the Web Speech API"); } else { console.error("Browser doesn't support the Web Speech API"); return; } } const recognition = new SpeechRecognition(); recognition.lang = lang; recognition.interimResults = interimResults; recognition.maxAlternatives = maxAlternatives; const transcriptHistory = []; let lastText = ''; recognition.addEventListener('start', () => { onStart(); }); recognition.addEventListener('result', (event) => { const transcript = event.results[0][0].transcript; lastText = transcript; transcriptHistory.push(transcript); onResult(event); }); recognition.addEventListener('error', (event) => { onError(event); }); recognition.addEventListener('end', () => { onEnd(lastText, transcriptHistory); }); const startRecording = () => { recognition.start(); }; const stopRecording = () => { onStop(); recognition.stop(); }; return { startRecording, stopRecording, recognition }; }