react-transcribe
Version:
React component for speech-to-text transcription with silence detection
3 lines (2 loc) • 3.52 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),n=require("react-speech-recognition");function t(e){var n=Object.create(null);return e&&Object.keys(e).forEach((function(t){if("default"!==t){var r=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(n,t,r.get?r:{enumerable:!0,get:function(){return e[t]}})}})),n.default=e,Object.freeze(n)}var r=t(e);function i(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function c(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,i,c,u,o=[],l=!0,a=!1;try{if(c=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;l=!1}else for(;!(l=(r=c.call(t)).done)&&(o.push(r.value),o.length!==n);l=!0);}catch(e){a=!0,i=e}finally{try{if(!l&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(a)throw i}}return o}}(e,n)||function(e,n){if(e){if("string"==typeof e)return i(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?i(e,n):void 0}}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}var u=function(t){var i=t.onSpeech,u=t.onSpeechToggle,o=t.children,l=t.silenceDuration,a=void 0===l?1e3:l,s=t.maxSilenceDuration,f=void 0===s?6e4:s,p=t.countdownThreshold,g=void 0===p?1e4:p,v=t.language,h=void 0===v?"en-US":v,b=n.useSpeechRecognition({transcribing:!0,clearTranscriptOnListen:!1}),d=b.transcript,y=b.listening,m=b.resetTranscript,S=b.browserSupportsSpeechRecognition,T=b.interimTranscript,O=c(e.useState(!1),2),j=O[0],w=O[1],L=c(e.useState(null),2),k=L[0],A=L[1],C=e.useRef(null),E=e.useRef(!1),R=e.useRef(null),x=e.useRef(null),I=r.useCallback((function(){n.stopListening().then((function(){null==u||u({isListening:!1,type:"device"})})).catch((function(e){console.error("Error stopping speech recognition:",e)}))}),[u]),D=r.useCallback((function(){if(E.current&&(E.current=!1,w(!1),!R.current)){var e=Date.now();R.current=setTimeout((function(){I()}),f),x.current=setInterval((function(){var n=Date.now()-e,t=Math.ceil((f-n)/1e3);t<=g/1e3&&A(t),n>=f&&(x.current&&clearInterval(x.current),A(null))}),1e3)}}),[g,f,I]),M=r.useCallback((function(){C.current&&clearTimeout(C.current),C.current=setTimeout(D,a),R.current&&(clearTimeout(R.current),R.current=null),x.current&&(clearInterval(x.current),x.current=null,A(null))}),[a,D]),P=r.useCallback((function(){n.startListening({continuous:!0,language:h}).then((function(){null==u||u({isListening:!0,type:"device"})})).catch((function(e){console.error("Error starting speech recognition:",e)}))}),[h,u]),q=r.useCallback((function(){y?I():P()}),[y,P,I]);if(e.useEffect((function(){d&&!E.current?(E.current=!0,w(!0),M()):d&&M(),(T||d)&&(null==i||i({transcript:d,interimTranscript:T,resetTranscript:m}))}),[d,T,m,i,M]),e.useEffect((function(){return function(){I()}}),[I]),!S)return null;var U={listening:y,isActivelySpeaking:j,silenceCountdown:k,transcript:d,interimTranscript:T,browserSupportsSpeechRecognition:S,resetTranscript:m,startListening:P,stopListening:I,toggleListening:q};return o?r.createElement(r.Fragment,null,"function"==typeof o?o(U):o):null};exports.SpeechToText=u,exports.default=u;
//# sourceMappingURL=index.js.map