react-audio-recorder
Version:
1 lines • 7.3 kB
JavaScript
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.AudioRecorder=e()}}(function(){return function e(t,o,n){function r(a,s){if(!o[a]){if(!t[a]){var u="function"==typeof require&&require;if(!s&&u)return u(a,!0);if(i)return i(a,!0);var d=new Error("Cannot find module '"+a+"'");throw d.code="MODULE_NOT_FOUND",d}var l=o[a]={exports:{}};t[a][0].call(l.exports,function(e){var o=t[a][1][e];return r(o?o:e)},l,l.exports,e,t,o,n)}return o[a].exports}for(var i="function"==typeof require&&require,a=0;a<n.length;a++)r(n[a]);return r}({1:[function(e,t,o){(function(n){"use strict";function r(e){return e&&e.__esModule?e:{"default":e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(o,"__esModule",{value:!0});var s=function(){function e(e,t){for(var o=0;o<t.length;o++){var n=t[o];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}return function(t,o,n){return o&&e(t.prototype,o),n&&e(t,n),t}}(),u=function(e,t,o){for(var n=!0;n;){var r=e,i=t,a=o;n=!1,null===r&&(r=Function.prototype);var s=Object.getOwnPropertyDescriptor(r,i);if(void 0!==s){if("value"in s)return s.value;var u=s.get;if(void 0===u)return;return u.call(a)}var d=Object.getPrototypeOf(r);if(null===d)return;e=d,t=i,o=a,n=!0,s=d=void 0}},d="undefined"!=typeof window?window.React:"undefined"!=typeof n?n.React:null,l=r(d),c=e("./wav-encoder.js"),p=r(c),f=function(e){function t(e){i(this,t),u(Object.getPrototypeOf(t.prototype),"constructor",this).call(this,e),this.buffers=[[],[]],this.bufferLength=0,this.audioContext=new(window.AudioContext||window.webkitAudioContext),this.sampleRate=this.audioContext.sampleRate,this.recordingStream=null,this.playbackSource=null,this.state={recording:!1,playing:!1,audio:e.audio}}return a(t,e),s(t,[{key:"startRecording",value:function(){var e=this;navigator.getUserMedia=navigator.getUserMedia||navigator.webkitGetUserMedia||navigator.mozGetUserMedia||navigator.msGetUserMedia,navigator.getUserMedia({audio:!0},function(t){var o=e.audioContext.createGain(),n=e.audioContext.createMediaStreamSource(t);n.connect(o);var r=2048,i=e.audioContext.createScriptProcessor(r,2,2);i.onaudioprocess=function(t){for(var o=0;2>o;o++){var n=t.inputBuffer.getChannelData(o);e.buffers[o].push(new Float32Array(n)),e.bufferLength+=r}},o.connect(i),i.connect(e.audioContext.destination),e.recordingStream=t},function(e){}),this.setState({recording:!0}),this.props.onRecordStart&&this.props.onRecordStart.call()}},{key:"stopRecording",value:function(){this.recordingStream.getTracks()[0].stop();var e=(0,p["default"])(this.buffers,this.bufferLength,this.sampleRate);this.setState({recording:!1,audio:e}),this.props.onChange&&this.props.onChange.call(null,{duration:this.bufferLength/this.sampleRate,blob:e})}},{key:"startPlayback",value:function(){var e=this,t=new window.FileReader;t.readAsArrayBuffer(this.state.audio),t.onloadend=function(){e.audioContext.decodeAudioData(t.result,function(t){var o=e.audioContext.createBufferSource();o.buffer=t,o.connect(e.audioContext.destination),o.loop=e.props.loop,o.start(0),o.onended=e.onAudioEnded.bind(e),e.playbackSource=o}),e.setState({playing:!0}),e.props.onPlay&&e.props.onPlay.call()}}},{key:"stopPlayback",value:function(e){this.state.playing&&(e.preventDefault(),this.setState({playing:!1}),this.props.onAbort&&this.props.onAbort.call())}},{key:"removeAudio",value:function(){this.state.audio&&(this.playbackSource&&(this.playbackSource.stop(),delete this.playbackSource),this.setState({audio:null}),this.props.onChange&&this.props.onChange.call())}},{key:"downloadAudio",value:function(){var e=(window.URL||window.webkitURL).createObjectURL(this.state.audio),t=document.createElement("a");t.href=e,t.download="output.wav";var o=document.createEvent("Event");o.initEvent("click",!0,!0),t.dispatchEvent(o)}},{key:"onAudioEnded",value:function(){this.state.playing&&this.setState({playing:!1}),this.props.onEnded&&this.props.onEnded.call()}},{key:"componentWillReceiveProps",value:function(e){this.state.audio&&e.audio!==this.state.audio&&(this.stopPlayback(),this.setState({audio:e.audio}))}},{key:"render",value:function(){var e=this.props.strings,t=void 0,o=["AudioRecorder-button"],n=void 0,r=void 0;return this.state.audio?(o.push("hasAudio"),this.state.playing?(o.push("isPlaying"),t=e.playing,r=this.stopPlayback):(t=e.play,r=this.startPlayback),n=[l["default"].createElement("button",{key:"remove",className:"AudioRecorder-remove",onClick:this.removeAudio.bind(this)},e.remove)],this.props.download&&n.push(l["default"].createElement("button",{key:"download",className:"AudioRecorder-download",onClick:this.downloadAudio.bind(this)},e.download))):this.state.recording?(o.push("isRecording"),t=e.recording,r=this.stopRecording):(t=e.record,r=this.startRecording),l["default"].createElement("div",{className:"AudioRecorder"},l["default"].createElement("button",{className:o.join(" "),onClick:r&&r.bind(this)},t),n)}}]),t}(d.Component);f.propTypes={audio:d.PropTypes.instanceOf(Blob),download:d.PropTypes.bool,loop:d.PropTypes.bool,onAbort:d.PropTypes.func,onChange:d.PropTypes.func,onEnded:d.PropTypes.func,onPlay:d.PropTypes.func,onRecordStart:d.PropTypes.func,strings:l["default"].PropTypes.shape({play:d.PropTypes.string,playing:d.PropTypes.string,record:d.PropTypes.string,recording:d.PropTypes.string,remove:d.PropTypes.string,download:d.PropTypes.string})},f.defaultProps={download:!0,loop:!1,strings:{play:"🔊 Play",playing:"❚❚ Playing",record:"● Record",recording:"● Recording",remove:"✖ Remove",download:"💾 Save"}},o["default"]=f,t.exports=o["default"]}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./wav-encoder.js":2}],2:[function(e,t,o){"use strict";function n(e,t,o){for(var n=0;n<o.length;n++)e.setUint8(t+n,o.charCodeAt(n))}function r(e,t){for(var o=new Float64Array(t),n=0,r=0;r<e.length;r++){var i=e[r];o.set(i,n),n+=i.length}return o}function i(e,t){for(var o=e.length+t.length,n=new Float64Array(o),r=0,i=0;o>i;)n[i++]=e[r],n[i++]=t[r],r++;return n}function a(e,t,o){var a=arguments.length<=3||void 0===arguments[3]?1:arguments[3],s=r(e[0],t),u=r(e[1],t),d=i(s,u),l=new ArrayBuffer(44+2*d.length),c=new DataView(l);n(c,0,"RIFF"),c.setUint32(4,44+2*d.length,!0),n(c,8,"WAVE"),n(c,12,"fmt "),c.setUint32(16,16,!0),c.setUint16(20,1,!0),c.setUint16(22,2,!0),c.setUint32(24,o,!0),c.setUint32(28,4*o,!0),c.setUint16(32,4,!0),c.setUint16(34,16,!0),n(c,36,"data"),c.setUint32(40,2*d.length,!0),d.forEach(function(e,t){c.setInt16(44+2*t,e*(32767*a),!0)});var p=new Blob([c],{type:"audio/wav"});return p}Object.defineProperty(o,"__esModule",{value:!0}),o["default"]=a,t.exports=o["default"]},{}]},{},[1])(1)});