transcord
Version:
A simple recording and transcription module.
1 lines • 16.6 kB
JavaScript
!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t("object"==typeof exports?require("jquery"):jQuery)}(function(t){"use strict";function i(t,i){var A=[];return A.push(i),A.slice.apply(t,A)}function A(i,n){this.$element=t(i),this.options=t.extend({},A.DEFAULTS,t.isPlainObject(n)&&n),this.recognizing=!1,this.stream=null,this.speechRecognitionIsSupported=!1,this.context=null,this.recordingLength=0,this.leftchannel=[],this.rightchannel=[],this.sampleRate=2048,this.transcriptBuffer="",this.blobsURL=[],this.blobs=[],this.init()}var n=window.AudioContext||window.webkitAudioContext;navigator.getUserMedia||(navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia);var e="transcord",o="init."+e,s="start."+e,r="stop."+e,h="blob."+e;A.prototype={constructor:A,init:function(){this.bind(),this.$element.trigger(o);var i=this;return this.options.record&&navigator.getUserMedia?(navigator.getUserMedia({audio:!0},function(t){i.stream=t},function(){console.log("No audio device detected")}),"boolean"===t.type(this.options.showMicIconNode)&&this.options.showMicIconNode?this.displayMic(this.$element.parent()):this.options.showMicIconNode instanceof jQuery&&this.displayMic(this.options.showMicIconNode),void(this.options.transcript&&"webkitSpeechRecognition"in window?(this.speechRecognitionIsSupported=!0,this.recognition=new webkitSpeechRecognition,this.recognition.continuous=!0,this.recognition.interimResults=this.options.transcriptInterimResults,this.recognition.lang=this.options.transcriptLanguage,this.recognition.maxAlternatives=1,this.options.grammar&&(this.recognition.grammar=this.options.transcriptgrammar),this.recognition.onresult=function(t){if("undefined"==typeof t.results)return i.recognition.stop(),void console.error("Results are undefined, stopping recognition");for(var A=t.resultIndex;A<t.results.length;++A)t.results[A].isFinal?(i.options.isTranscriptPersistent&&(i.transcriptBuffer+=t.results[A][0].transcript),i.$element.text(i.transcriptBuffer||t.results[A][0].transcript)):i.$element.text(i.transcriptBuffer+t.results[A][0].transcript)}):console.log("Speech recognition is not supported by this navigator"))):void console.error("getUserMedia not available")},startRecording:function(){if(this.$element.trigger(s),this.$micImg.trigger(s),this.options.transcript&&this.speechRecognitionIsSupported&&this.recognition.start(),this.options.record){this.context=new n,this.sampleRate=this.context.sampleRate;let A=this.context.createGain(),e=this.context.createMediaStreamSource(this.stream);e.connect(A);var t=2048;let o=this.context.createScriptProcessor(t,2,2);var i=this;this.recognizing=!0,o.onaudioprocess=function(t){if(i.recognizing){var A=t.inputBuffer.getChannelData(0),n=t.inputBuffer.getChannelData(1);i.leftchannel.push(new Float32Array(A)),i.rightchannel.push(new Float32Array(n)),i.recordingLength+=this.bufferSize}},A.connect(o),o.connect(this.context.destination)}},stopRecording:function(){if(this.$element.trigger(r),this.$micImg.trigger(r),this.recognizing=!1,this.options.transcript&&this.speechRecognitionIsSupported&&this.recognition.stop(),this.options.record){let t=this.writeWaw();return this.blobs.push(t),this.$element.trigger(h,[t]),this.context.close(),t}return null},writeWaw:function(){function t(t,i){for(var A=new Float32Array(i),n=0,e=t.length,o=0;o<e;o++){let i=t[o];A.set(i,n),n+=i.length}return A}function i(t,i){for(var A=t.length+i.length,n=new Float32Array(A),e=0,o=0;o<A;)n[o++]=t[e],n[o++]=i[e],e++;return n}function A(t,i,A){for(var n=A.length,e=0;e<n;e++)t.setUint8(i+e,A.charCodeAt(e))}var n=t(this.leftchannel,this.recordingLength),e=t(this.rightchannel,this.recordingLength),o=i(n,e),s=new ArrayBuffer(44+2*o.length),r=new DataView(s);A(r,0,"RIFF"),r.setUint32(4,44+2*o.length,!0),A(r,8,"WAVE"),A(r,12,"fmt "),r.setUint32(16,16,!0),r.setUint16(20,1,!0),r.setUint16(22,2,!0),r.setUint32(24,this.sampleRate,!0),r.setUint32(28,4*this.sampleRate,!0),r.setUint16(32,4,!0),r.setUint16(34,16,!0),A(r,36,"data"),r.setUint32(40,2*o.length,!0);for(var h=o.length,a=44,c=1,l=0;l<h;l++)r.setInt16(a,o[l]*(32767*c),!0),a+=2;var g=new Blob([r],{type:"audio/wav"});return this.leftchannel.length=0,this.rightchannel.length=0,this.recordingLength=0,g},toogleRecord:function(){return this.recognizing?this.stopRecording():void this.startRecording()},displayBlob:function(t,i){if(t&&t instanceof Blob){this.blobsURL.length===this.options.recordNumber&&this.destroyBlob(0);let A=window.URL.createObjectURL(t);this.blobsURL.push(A);let n=i||this.$element.parent();n.append('<audio controls src="'+A+'"></audio>')}},destroyBlob:function(i){function A(i){t('audio[src="'+i+'"]').hide("slow",function(){t('audio[src="'+i+'"]').remove()}),window.URL.revokeObjectURL(i);let A=n.blobsURL.indexOf(i);A!==-1&&(n.blobsURL.splice(A,1),n.blobs.splice(A,1))}var n=this;if("string"==typeof i&&"number"!==parseInt(i,10)){var e={first:0,last:this.blobsURL.length-1,all:Object.keys(this.blobsURL)};if(!e[i])return void console.error('Invalid index : "'+i+'"');i=e[i]}if(i.constructor===Array){let t=i.length;var o=[];for(let n=0;n<t&&!isNaN(parseInt(i[n],10));n++)o.push(this.blobsURL[n]);t=o.length;for(let n=0;n<t;n++)A(o[n])}else"number"==typeof parseInt(i,10)&&A(this.blobsURL[i])},getBlobs:function(){return this.blobs.slice()},trigger:function(i,A){var n=t.Event(i,A);return this.$element.trigger(n),n},displayMic:function(i){let A=this;this.$micImg=t("<img class='transcord_mic' src='"+this.options.imgMicIdle+"'>").on(s,function(){t(this).attr("src",A.options.imgMicRecording)}).on(r,function(){t(this).attr("src",A.options.imgMicIdle)}).on("click",function(){A.toogleRecord()}).appendTo(i)},downloadBlob:function(i,A){let n=window.URL.createObjectURL(i),e=t("<a/>").hide().attr("href",n).attr("download",A||"new record").appendTo(t("body"));e[0].click(),window.URL.revokeObjectURL(n),e.remove()},bind:function(){let i=this.$element;t.isFunction(this.options.onInit)&&i.on(o,this.options.onInit),t.isFunction(this.options.onStart)&&i.on(s,this.options.onStart),t.isFunction(this.options.onStop)&&i.on(r,this.options.onStop),t.isFunction(this.options.onStop)&&i.on(h,this.options.onBlob)}},A.DEFAULTS={record:!0,transcript:!0,transcriptLanguage:"en-US",transcriptInterimResults:!0,isTranscriptPersistent:!0,transcriptgrammar:void 0,onInit:null,onStart:null,onStop:null,onBlob:null,recordNumber:1,showMicIconNode:!0,imgMicIdle:" data:image/gif;base64,R0lGODdhMgAyAPUAAJqampubm5ycnJ2dnZ6enp+fn6CgoKSkpKWlpaampqurq62tra+vr7KysrS0tLW1tbe3t7i4uLm5ucTExMXFxcbGxsfHx8zMzM3Nzc7Ozs/Pz9jY2NnZ2dzc3N3d3d7e3t/f3+Pj4+bm5ujo6Orq6uzs7PLy8vPz8/T09PX19fb29vf39/r6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUALAAAAAAyADIAAAa0wJhwSCwaj8ikcslsOp/QqHRKrVqv2Kx2y+16v+CweExGjkaustkAaHPUxVB7DgjBhw16u3EXFvRtfTGAgX2EAYKHiYSLgI16j3RlHyBDAYxCIB8pXiKFMQqAC5Z1X20kQhmAGpmfXQsAE3h0EjCpAKNfHKdDIBUVla2lYAyucQe4tmEJbi1FFgLGxHMQFNYEeypqGGyrynAeEnsdLILCm+bn6errH83r8PHy8/T19vf4+VZBADs=",imgMicRecording:"data:image/gif;base64,R0lGODlhMgAyAPcJAPwERP6mvP/o7v/l7P/m7P/+/vwfWPwPTP/4+vwvZPw8bv1Nev1Wgf2AoP6Srv6ctf6guP6huf6lvP/19/wzZ/6xxf65y//C0v////sDQ/wIR//6+/1ljPwlXfw/cP1Xgf6btP67zfw0aPw6bP/r8PwgWfw7bf/v8/1FdP1Ec/wHRv6twv/h6f6Trv6Ur/62yf1hiv13mvwFRf1uk/wST/1dh/6uw/12mf6Nqv6QrP/c5f/q7/1Yg/6WsfwGRv1QfPwVUf6swv69zv/G1f1zl//W4f16nP/7/PwTT//a4/6ft/6XsfwMSvwZVP63yv66zP/Q3P/09/wsYv/2+P1Rff6et9s2YN7e3txOc/1Dc/6KqP/L2P/M2f/Y4v/u8v1GdfxCcvwOTP1skvwoX9nZ2aCgoP1chubEzf/S3vTx8v/8/dnCx826v6WUmK6Vm66VnLOUnLSUnLmrr/2Bocy5vqSUmJ+XmZ+XmqyPl9za2rGMlvS1xf64ytjBxt3b26yQl/b29vf39+Pj4/Pz8/7+/vr6+vLy8ujo6Pz8/P/x9PwuY5+VmP/5+vwkXPw+b9xdfv1Ledd6k/1oj/61yKWlpaampq+vr7KysrS0tLm5ubW1tczMzPT09PX19djY2Nzc3N3d3a2trebm5s3NzZ2Vl56Zmt2tuv/B0fwXUv/T3vwaVJ+SlfgJR+QmV9Y7Y56Ulp2UlvoFRKx/i9wzXv1ylp2YmeggVOYkVpuampqamvoGRf1tktw7ZOghVLZ6ipuZmrdtgMJeeP/V4KORlrZtgKqBjJ+dnZqZmfkGRctNbsxLbMVYdPwtYsNgeZyXmPcKR8RYdKx+iq57iLNzhLJ0hLF2hctPb8pQb/ATTPETTJ+TluMpWeAtW6WKkdk3Ydo3YdU9ZPYKR/MPSu4WTu8WTvoERNY9ZaSLka58ibdsgPIQSv1Jd/wJSP6ovvwWUv/k6/1ji/6yxvw9bv/w9PwmXf1vlP1Idv6Ipv15m6OLkbVugZuYmcJdd8NbdsVXc5uZmSH/C05FVFNDQVBFMi4wAwEAAAAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNrDWdhbW1hPTAuNDU0NTUAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE9MC40NTQ1NQAh/wtJbWFnZU1hZ2ljaw1nYW1tYT0wLjQ1NDU1ACH/C0ltYWdlTWFnaWNr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"},A.setDefaults=function(i){t.extend(A.DEFAULTS,i)},t.fn.transcord=function(n){var o,s=i(arguments,1);return this.each(function(){var i,r,h=t(this),a=h.data(e);if(!a){if(/destroy/.test(n))return;i=t.extend({},h.data(),t.isPlainObject(n)&&n),h.data(e,a=new A(this,i))}"string"==typeof n&&t.isFunction(r=a[n])&&(o=r.apply(a,s))}),"undefined"==typeof o?this:o},t.fn.transcord.Constructor=A,t.fn.transcord.setDefaults=A.setDefaults});