react-voice-to-text
Version:
A small lib to use the speech recognition api in react
69 lines (68 loc) • 2.42 kB
JavaScript
;
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
};
}