!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define("VueAudioRecorder",[],e):"object"==typeof exports?exports.VueAudioRecorder=e():t.VueAudioRecorder=e()}("undefined"!=typeof self?self:this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=9)}([function(t,e){function n(t,e){var n=t[1]||"",i=t[3];if(!i)return n;if(e&&"function"==typeof btoa){var o=r(i);return[n].concat(i.sources.map(function(t){return"/*# sourceURL="+i.sourceRoot+t+" */"})).concat([o]).join("\n")}return[n].join("\n")}function r(t){return"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(t))))+" */"}t.exports=function(t){var e=[];return e.toString=function(){return this.map(function(e){var r=n(e,t);return e[2]?"@media "+e[2]+"{"+r+"}":r}).join("")},e.i=function(t,n){"string"==typeof t&&(t=[[null,t,""]]);for(var r={},i=0;in.parts.length&&(r.parts.length=n.parts.length)}else{for(var s=[],i=0;i1?1:i}function i(t){return new Date(1e3*t).toISOString().substr(14,5)}e.a=r,e.b=i},function(t,e,n){"use strict";var r=n(5),i=n(17),o=n(19),s=n(3);e.a={props:{attempts:{type:Number},time:{type:Number},uploadUrl:{type:String},attemptsLimit:{type:Function},failedUpload:{type:Function},micFailed:{type:Function},startRecord:{type:Function},startUpload:{type:Function},stopRecord:{type:Function},successfulUpload:{type:Function},successfulUploadMsg:{type:String,default:"Upload successful"},failedUploadMsg:{type:String,default:"Upload fail"}},data:function(){var t=this;return{isUploading:!1,recorder:new i.a({afterStop:function(){t.recordList=t.recorder.recordList(),t.stopRecord&&t.stopRecord("stop record")},attempts:this.attempts,time:this.time}),recordList:[],selectedRecord:{},uploadStatus:null}},components:{IconButton:r.a,RecordPlayer:o.a},methods:{toggleRecorder:function(){this.attempts&&this.recorder.records.length>=this.attempts||(!this.isRecording||this.isRecording&&this.isPause?(this.recorder.start(),this.startRecord&&this.startRecord("start record")):(this.recorder.pause(),this.startRecord&&this.startRecord("pause record")))},stopRecorder:function(){this.isRecording&&this.recorder.stop()},selectRecord:function(t,e){this.selectedRecord={idx:t,url:e.url,blob:e.blob}},onStartUpload:function(){this.isUploading=!0},onEndUpload:function(t){var e=this;this.isUploading=!1,this.uploadStatus=t,setTimeout(function(){e.uploadStatus=null},1500)}},computed:{attemptsLeft:function(){return this.attempts-this.recorder.records.length},iconButtonType:function(){return this.isRecording&&this.isPause?"mic":this.isRecording?"pause":"mic"},isPause:function(){return this.recorder.isPause},isRecording:function(){return this.recorder.isRecording},message:function(){return"success"===this.uploadStatus?this.successfulUploadMsg:this.failedUploadMsg},recordedTime:function(){return this.time&&this.recorder.duration>=60*this.time&&this.stopRecorder(),Object(s.b)(this.recorder.duration)},uploadStatusClasses:function(){var t=["ar__upload-status"];return t.push("success"===this.uploadStatus?"ar__upload-status--success":"ar__upload-status--fail"),t.join(" ")},volume:function(){return parseFloat(this.recorder.volume)}}}},function(t,e,n){"use strict";function r(t){n(14)}var i=n(6),o=n(16),s=n(2),a=r,c=s(i.a,o.a,!1,a,null,null);e.a=c.exports},function(t,e,n){"use strict";e.a={props:{name:{type:String},size:{type:String,default:"sm"}},data:function(){return{icons:{download:'',mic:'',pause:'',play:'',save:'',stop:'',volume:''}}},computed:{iconClasses:function(){return["ar-icon-button","ar-icon-button__"+this.size]}}}},function(t,e,n){"use strict";var r=n(5),i=n(22),o=n(3);e.a={props:{uploadUrl:{type:String},record:{type:Object},startUpload:{type:Function},successfulUpload:{type:Function},failedUpload:{type:Function}},data:function(){return{isPlaying:!1,duration:Object(o.b)(0),playedTime:Object(o.b)(0),progress:0,volume:.8}},components:{IconButton:r.a,LineControl:i.a},mounted:function(){var t=this;this.player=document.getElementById("audio-recorder-player"),this.player.addEventListener("ended",function(){t.isPlaying=!1}),this.player.addEventListener("loadeddata",function(e){t._resetProgress(),t.duration=Object(o.b)(t.player.duration)}),this.player.addEventListener("timeupdate",this._onTimeUpdate)},computed:{playBtnIcon:function(){return this.isPlaying?"pause":"play"}},methods:{playback:function(){var t=this;this.record.url&&(this.isPlaying?this.player.pause():setTimeout(function(){t.player.play()},0),this.isPlaying=!this.isPlaying)},upload:function(){var t=this;if(this.record.url){this.startUpload&&this.startUpload(),this.$emit("on-start-upload");var e=new FormData;e.append("audio",this.record.blob,"my-record"),this.$http.post(this.uploadUrl,e,{headers:{"Content-Type":"multipart/form-data; boundary="+e._boundary}}).then(function(e){t.$emit("on-end-upload","success"),t.successfulUpload&&t.successfulUpload(e)}).catch(function(e){t.$emit("on-end-upload","fail"),t.failedUpload&&t.failedUpload(e)})}},download:function(){if(this.record.url){var t=document.createElement("a");t.href=this.record.url,t.download="record.wav",t.click()}},_resetProgress:function(){this.isPlaying=!1,this.progress=0},_onTimeUpdate:function(){this.playedTime=Object(o.b)(this.player.currentTime),this.progress=this.player.currentTime/this.player.duration*100},_onUpdateProgress:function(t){t&&(this.player.currentTime=t*this.player.duration)},_onUpdateVolume:function(t){t&&(this.player.volume=t,this.volume=t)}}}},function(t,e,n){"use strict";var r=n(3);e.a={props:{refId:{type:String},eventName:{type:String},percentage:{type:Number,default:0}},methods:{onMouseDown:function(t){var e=Object(r.a)(t,this.$refs[this.refId]);this.$emit("changeLineHead",e),document.addEventListener("mousemove",this.onMouseMove),document.addEventListener("mouseup",this.onMouseUp)},onMouseUp:function(t){document.removeEventListener("mouseup",this.onMouseUp),document.removeEventListener("mousemove",this.onMouseMove);var e=Object(r.a)(t,this.$refs[this.refId]);this.$emit("changeLineHead",e)},onMouseMove:function(t){var e=Object(r.a)(t,this.$refs[this.refId]);this.$emit("changeLineHead",e)}},computed:{percentageWidth:function(){return(this.percentage<1?100*this.percentage:this.percentage)+"%"}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(10);e.default={install:function(t){this.installed||(this.installed=!0,t.component("audio-recorder",r.a))}}},function(t,e,n){"use strict";function r(t){n(11)}var i=n(4),o=n(27),s=n(2),a=r,c=s(i.a,o.a,!1,a,null,null);e.a=c.exports},function(t,e,n){var r=n(12);"string"==typeof r&&(r=[[t.i,r,""]]),r.locals&&(t.exports=r.locals);n(1)("61bff3ea",r,!0,{})},function(t,e,n){e=t.exports=n(0)(!1),e.push([t.i,"\n.ar {\n width: 420px;\n font-family: 'Roboto', sans-serif;\n border-radius: 16px;\n background-color: #FAFAFA;\n box-shadow: 0 4px 18px 0 rgba(0, 0, 0, 0.17);\n position: relative;\n box-sizing: content-box;\n}\n.ar-content {\n padding: 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.ar-records {\n height: 138px;\n padding-top: 1px;\n overflow-y: auto;\n margin-bottom: 20px;\n}\n.ar-records__record {\n width: 320px;\n padding: 0 10px;\n margin: 0 auto;\n line-height: 45px;\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid #E8E8E8;\n}\n.ar-records__record--selected {\n border: 1px solid #E8E8E8;\n border-radius: 24px;\n background-color: #FFFFFF;\n margin-top: -1px;\n padding: 0 34px;\n}\n.ar-recorder {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.ar-recorder__duration {\n color: #AEAEAE;\n font-size: 32px;\n font-weight: 500;\n margin-top: 20px;\n margin-bottom: 16px;\n}\n.ar-recorder__stop {\n position: absolute;\n top: 10px;\n right: -52px;\n}\n.ar-recorder__time-limit {\n position: absolute;\n color: #AEAEAE;\n font-size: 12px;\n top: 128px;\n}\n.ar-recorder__records-limit {\n position: absolute;\n color: #AEAEAE;\n font-size: 12px;\n top: 78px;\n}\n.ar-spinner {\n display: flex;\n height: 30px;\n position: absolute;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n margin: auto;\n width: 144px;\n z-index: 10;\n}\n.ar-spinner__dot {\n display: block;\n margin: 0 8px;\n border-radius: 50%;\n width: 30px;\n height: 30px;\n background: #05CBCD;\n animation-name: blink;\n animation-duration: 1.4s;\n animation-iteration-count: infinite;\n animation-fill-mode: both;\n}\n.ar-spinner__dot:nth-child(2) {\n animation-delay: .2s;\n}\n.ar-spinner__dot:nth-child(3) {\n animation-delay: .4s;\n}\n@keyframes blink {\n0% {\n opacity: .2;\n}\n20% {\n opacity: 1;\n}\n100% {\n opacity: .2;\n}\n}\n.ar__text {\n color: rgba(84, 84, 84, 0.5);\n font-size: 16px;\n}\n.ar__blur {\n filter: blur(2px);\n opacity: 0.7;\n}\n.ar__overlay {\n position: absolute;\n width: 100%;\n height: 100%;\n z-index: 10;\n}\n.ar__upload-status {\n text-align: center;\n font-size: 10px;\n padding: 2px;\n letter-spacing: 1px;\n position: absolute;\n bottom: 0;\n}\n.ar__upload-status--success {\n color: green;\n}\n.ar__upload-status--fail {\n color: red;\n}\n",""])},function(t,e){t.exports=function(t,e){for(var n=[],r={},i=0;i0&&void 0!==arguments[0]?arguments[0]:{};r(this,t),this.afterStop=e.afterStop,this.micFailed=e.micFailed,this.bufferSize=4096,this.records=[],this.samples=[],this.isPause=!1,this.isRecording=!1,this.duration=0,this.volume=0,this._duration=0}return s(t,[{key:"start",value:function(){navigator.mediaDevices.getUserMedia({audio:!0}).then(this._micCaptured.bind(this)).catch(this._micError.bind(this)),this.isPause=!1,this.isRecording=!0}},{key:"stop",value:function(){this.stream.getTracks().forEach(function(t){return t.stop()}),this.input.disconnect(),this.processor.disconnect(),this.context.close();var t=new i.a({bufferSize:this.bufferSize,sampleRate:this.context.sampleRate,samples:this.samples}),e=t.getData(),n=URL.createObjectURL(e);this.samples=[],this.records.push({blob:e,url:n,duration:Object(o.b)(this.duration)}),this.isPause=!1,this.isRecording=!1,this._duration=0,this.duration=0,this.afterStop&&this.afterStop()}},{key:"pause",value:function(){this.stream.getTracks().forEach(function(t){return t.stop()}),this.input.disconnect(),this.processor.disconnect(),this.context.close(),this._duration=this.duration,this.isPause=!0}},{key:"recordList",value:function(){return this.records}},{key:"lastRecord",value:function(){return this.records.slice(-1)}},{key:"_micCaptured",value:function(t){var e=this;this.context=new AudioContext,this.input=this.context.createMediaStreamSource(t),this.processor=this.context.createScriptProcessor(this.bufferSize,1,1),this.duration=this._duration,this.stream=t,this.processor.onaudioprocess=function(t){for(var n=t.inputBuffer.getChannelData(0),r=0,i=0;i.02},attrs:{size:"lg",name:t.iconButtonType},nativeOn:{click:function(e){return t.toggleRecorder(e)}}}),t._v(" "),n("icon-button",{staticClass:"ar-recorder__stop",attrs:{name:"stop"},nativeOn:{click:function(e){return t.stopRecorder(e)}}})],1),t._v(" "),t.attempts?n("div",{staticClass:"ar-recorder__records-limit"},[t._v("Attempts: "+t._s(t.attemptsLeft)+"/"+t._s(t.attempts))]):t._e(),t._v(" "),n("div",{staticClass:"ar-recorder__duration"},[t._v(t._s(t.recordedTime))]),t._v(" "),t.time?n("div",{staticClass:"ar-recorder__time-limit"},[t._v("Record duration is limited: "+t._s(t.time)+"m")]):t._e(),t._v(" "),n("div",{staticClass:"ar-records"},t._l(t.recordList,function(e,r){return n("div",{staticClass:"ar-records__record",class:{"ar-records__record--selected":r===t.selectedRecord.idx},on:{click:function(n){t.selectRecord(r,e)}}},[n("div",{staticClass:"ar__text"},[t._v("Record "+t._s(r+1))]),t._v(" "),n("div",{staticClass:"ar__text"},[t._v(t._s(e.duration))])])})),t._v(" "),n("record-player",{attrs:{record:t.selectedRecord,"upload-url":t.uploadUrl,"start-upload":t.startUpload,"successful-upload":t.successfulUpload,"failed-upload":t.failedUpload},on:{"on-start-upload":t.onStartUpload,"on-end-upload":t.onEndUpload}}),t._v(" "),t.uploadStatus?n("div",{class:t.uploadStatusClasses},[t._v(t._s(t.message))]):t._e()],1)])},i=[],o={render:r,staticRenderFns:i};e.a=o}]).default}); //# sourceMappingURL=vue-audio-recorder.min.js.map