-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathwavesurfer.min.js
2 lines (2 loc) · 30.8 KB
/
wavesurfer.min.js
1
2
"use strict";var WaveSurfer={defaultParams:{height:128,waveColor:"#999",progressColor:"#555",cursorColor:"#333",selectionColor:"#0fc",selectionBorder:!1,selectionForeground:!1,selectionBorderColor:"#000",cursorWidth:1,markerWidth:2,skipLength:2,minPxPerSec:50,pixelRatio:window.devicePixelRatio,fillParent:!0,scrollParent:!1,normalize:!1,audioContext:null,container:null,dragSelection:!0,loopSelection:!0,audioRate:1,interact:!0,renderer:"Canvas",backend:"WebAudioBuffer"},init:function(e){if(this.params=WaveSurfer.util.extend({},this.defaultParams,e),this.container="string"==typeof e.container?document.querySelector(this.params.container):this.params.container,!this.container)throw new Error("wavesurfer.js: container element not found");this.markers={},this.once("marked",this.bindMarks.bind(this)),this.once("region-created",this.bindRegions.bind(this)),this.regions={},this.savedVolume=0,this.isMuted=!1,this.bindUserAction(),this.createDrawer(),this.createBackend()},bindUserAction:function(){var e=this,t=function(){e.fireEvent("user-action")};document.addEventListener("mousedown",t),document.addEventListener("keydown",t),this.on("destroy",function(){document.removeEventListener("mousedown",t),document.removeEventListener("keydown",t)})},createMedia:function(e){var t=this,i=document.createElement("audio");i.controls=!1,i.autoplay=!1,i.src=e,i.addEventListener("error",function(){t.fireEvent("error","Error loading media element")}),i.addEventListener("canplay",function(){t.fireEvent("media-canplay")});var r=this.container.querySelector("audio");return r&&this.container.removeChild(r),this.container.appendChild(i),i},createDrawer:function(){var e=this;this.drawer=Object.create(WaveSurfer.Drawer[this.params.renderer]),this.drawer.init(this.container,this.params),this.drawer.on("redraw",function(){e.drawBuffer(),e.drawer.progress(e.backend.getPlayedPercents())}),this.on("progress",function(t){e.drawer.progress(t)}),this.drawer.on("mousedown",function(t){setTimeout(function(){e.seekTo(t)},0)}),this.drawer.on("mark-dblclick",function(t){var i=e.markers[t];i&&i.remove()}),this.params.dragSelection&&(this.drawer.on("drag",function(t){e.dragging=!0,e.updateSelection(t)}),this.drawer.on("drag-clear",function(){e.clearSelection()})),this.drawer.on("drag-mark",function(e,t){t.fireEvent("drag",e)}),this.drawer.on("mouseup",function(t){e.fireEvent("mouseup",t),e.dragging=!1})},createBackend:function(){var e=this;this.backend&&this.backend.destroy(),this.backend=Object.create(WaveSurfer[this.params.backend]),this.backend.on("play",function(){e.fireEvent("play"),e.restartAnimationLoop()}),this.backend.on("finish",function(){e.fireEvent("finish")});try{this.backend.init(this.params)}catch(t){"wavesurfer.js: your browser doesn't support WebAudio"==t.message&&(this.params.backend="AudioElement",this.backend=null,this.createBackend())}},restartAnimationLoop:function(){var e=this,t=window.requestAnimationFrame||window.webkitRequestAnimationFrame,i=function(){e.backend.isPaused()||(e.fireEvent("progress",e.backend.getPlayedPercents()),t(i))};i()},getDuration:function(){return this.backend.getDuration()},getCurrentTime:function(){return this.backend.getCurrentTime()},play:function(e,t){this.backend.play(e,t)},pause:function(){this.backend.pause()},playPause:function(){this.backend.isPaused()?this.play():this.pause()},playPauseSelection:function(){var e=this.getSelection();null!==e&&(this.seekTo(e.startPercentage),this.playPause())},skipBackward:function(e){this.skip(e||-this.params.skipLength)},skipForward:function(e){this.skip(e||this.params.skipLength)},skip:function(e){var t=this.timings(e),i=t[0]/t[1];this.seekTo(i)},seekAndCenter:function(e){this.seekTo(e),this.drawer.recenter(e)},seekTo:function(e){var t=this.backend.isPaused(),i=this.params.scrollParent;t&&(this.params.scrollParent=!1,this.savedVolume=this.backend.getVolume(),this.backend.setVolume(0)),this.play(e*this.drawer.width/this.realPxPerSec),t&&(this.pause(),this.backend.setVolume(this.savedVolume)),this.params.scrollParent=i,this.fireEvent("seek",e)},stop:function(){this.pause(),this.seekTo(0),this.drawer.progress(0)},setVolume:function(e){this.backend.setVolume(e)},toggleMute:function(){this.isMuted?(this.backend.setVolume(this.savedVolume),this.isMuted=!1):(this.savedVolume=this.backend.getVolume(),this.backend.setVolume(0),this.isMuted=!0)},toggleScroll:function(){this.params.scrollParent=!this.params.scrollParent,this.drawBuffer()},mark:function(e){var t=this,i=WaveSurfer.util.extend({id:WaveSurfer.util.getId(),width:this.params.markerWidth},e);if(i.percentage&&!i.position&&(i.position=i.percentage*this.getDuration()),i.percentage=i.position/this.getDuration(),i.id in this.markers)return this.markers[i.id].update(i);i.position||(i.position=this.getCurrentTime(),i.percentage=i.position/this.getDuration());var r=Object.create(WaveSurfer.Mark);return r.init(i),this.dragging?(r.type="selMark",r.on("drag",function(e){t.updateSelectionByMark(e,r)})):r.on("drag",function(e){t.moveMark(e,r)}),r.on("update",function(){t.drawer.updateMark(r),t.fireEvent("mark-updated",r)}),r.on("remove",function(){t.drawer.removeMark(r),delete t.markers[r.id],t.fireEvent("mark-removed",r)}),this.drawer.addMark(r),this.drawer.on("mark-over",function(e,i){e.fireEvent("over",i),t.fireEvent("mark-over",e,i)}),this.drawer.on("mark-leave",function(e,i){e.fireEvent("leave",i),t.fireEvent("mark-leave",e,i)}),this.drawer.on("mark-click",function(e,i){e.fireEvent("click",i),t.fireEvent("mark-click",e,i)}),this.markers[r.id]=r,this.fireEvent("marked",r),r},clearMarks:function(){Object.keys(this.markers).forEach(function(e){this.markers[e].remove()},this),this.markers={}},redrawRegions:function(){Object.keys(this.regions).forEach(function(e){this.region(this.regions[e])},this)},clearRegions:function(){Object.keys(this.regions).forEach(function(e){this.regions[e].remove()},this),this.regions={}},region:function(e){var t=this,i=WaveSurfer.util.extend({id:WaveSurfer.util.getId()},e);if(i.startPercentage=i.startPosition/this.getDuration(),i.endPercentage=i.endPosition/this.getDuration(),i.id in this.regions)return this.regions[i.id].update(i);var r=Object.create(WaveSurfer.Region);return r.init(i),r.on("update",function(){t.drawer.updateRegion(r),t.fireEvent("region-updated",r)}),r.on("remove",function(){t.drawer.removeRegion(r),t.fireEvent("region-removed",r),delete t.regions[r.id]}),this.drawer.addRegion(r),this.drawer.on("region-over",function(e,i){e.fireEvent("over",i),t.fireEvent("region-over",e,i)}),this.drawer.on("region-leave",function(e,i){e.fireEvent("leave",i),t.fireEvent("region-leave",e,i)}),this.drawer.on("region-click",function(e,i){e.fireEvent("click",i),t.fireEvent("region-click",e,i)}),this.regions[r.id]=r,this.fireEvent("region-created",r),r},timings:function(e){var t=this.getCurrentTime()||0,i=this.getDuration()||1;return t=Math.max(0,Math.min(i,t+(e||0))),[t,i]},drawBuffer:function(){if(this.params.fillParent&&!this.params.scrollParent)var e=this.drawer.getWidth();else e=Math.round(this.getDuration()*this.params.minPxPerSec*this.params.pixelRatio);this.realPxPerSec=e/this.getDuration(),this.drawer.drawPeaks(this.backend.getPeaks(e),e),this.fireEvent("redraw")},drawAsItPlays:function(){var e=this;this.realPxPerSec=this.params.minPxPerSec*this.params.pixelRatio;var t,i=1/this.realPxPerSec,r=0;this.drawFrame=function(n){if(!(n>r&&i>n-r)){r=n;var a=e.getDuration();if(1/0>a){var s=Math.round(a*e.realPxPerSec);t=t||new Uint8Array(s)}else t=t||[],s=t.length;var o=~~(e.backend.getPlayedPercents()*s);t[o]||(t[o]=WaveSurfer.util.max(e.backend.waveform(),128),e.drawer.setWidth(s),e.drawer.clearWave(),e.drawer.drawWave(t,128))}},this.backend.on("audioprocess",this.drawFrame)},loadArrayBuffer:function(e){var t=this;this.backend.decodeArrayBuffer(e,function(e){t.loadDecodedBuffer(e)},function(){t.fireEvent("error","Error decoding audiobuffer")})},loadDecodedBuffer:function(e){this.empty(),"WebAudioBuffer"!=this.params.backend&&(this.params.backend="WebAudioBuffer",this.createBackend()),this.backend.load(e),this.drawBuffer(),this.fireEvent("ready")},loadBlob:function(e){var t=this,i=new FileReader;i.addEventListener("progress",function(e){t.onProgress(e)}),i.addEventListener("load",function(e){t.empty(),t.loadArrayBuffer(e.target.result)}),i.addEventListener("error",function(){t.fireEvent("error","Error reading file")}),i.readAsArrayBuffer(e)},load:function(e,t){switch(this.params.backend){case"WebAudioBuffer":return this.loadBuffer(e);case"WebAudioMedia":return this.loadStream(e);case"AudioElement":return this.loadAudioElement(e,t)}},loadBuffer:function(e){return this.empty(),this.downloadArrayBuffer(e,this.loadArrayBuffer.bind(this))},loadStream:function(e){var t=this;"WebAudioMedia"!=this.params.backend&&(this.params.backend="WebAudioMedia",this.createBackend()),this.empty(),this.drawAsItPlays(),this.media=this.createMedia(e),this.once("user-action",function(){t.backend.load(t.media)}),setTimeout(this.fireEvent.bind(this,"ready"),0)},loadAudioElement:function(e,t){var i=this;"AudioElement"!=this.params.backend&&(this.params.backend="AudioElement",this.createBackend()),this.empty(),this.media=this.createMedia(e),this.once("media-canplay",function(){i.backend.load(i.media,t),i.drawBuffer(),i.fireEvent("ready")})},downloadArrayBuffer:function(e,t){var i=this,r=WaveSurfer.util.ajax({url:e,responseType:"arraybuffer"});return r.on("progress",function(e){i.onProgress(e)}),r.on("success",t),r.on("error",function(e){i.fireEvent("error","XHR error: "+e.target.statusText)}),r},onProgress:function(e){if(e.lengthComputable)var t=e.loaded/e.total;else t=e.loaded/(e.loaded+1e6);this.fireEvent("loading",Math.round(100*t),e.target)},bindMarks:function(){var e=this,t=0;this.backend.on("play",function(){Object.keys(e.markers).forEach(function(t){e.markers[t].played=!1})}),this.backend.on("audioprocess",function(i){Object.keys(e.markers).forEach(function(r){var n=e.markers[r];n.played||n.position<=i&&n.position>=t&&(n.played=!0,e.fireEvent("mark",n),n.fireEvent("reached"))}),t=i})},bindRegions:function(){var e=this;this.backend.on("play",function(){Object.keys(e.regions).forEach(function(t){e.regions[t].fired_in=!1,e.regions[t].fired_out=!1})}),this.backend.on("audioprocess",function(t){Object.keys(e.regions).forEach(function(i){var r=e.regions[i];!r.fired_in&&r.startPosition<=t&&r.endPosition>=t&&(e.fireEvent("region-in",r),r.fireEvent("in"),r.fired_in=!0),!r.fired_out&&r.fired_in&&r.endPosition<t&&(e.fireEvent("region-out",r),r.fireEvent("out"),r.fired_out=!0)})})},empty:function(){this.drawFrame&&(this.un("progress",this.drawFrame),this.drawFrame=null),this.backend&&!this.backend.isPaused()&&(this.stop(),this.backend.disconnectSource()),this.clearMarks(),this.clearRegions(),this.drawer.setWidth(0),this.drawer.drawPeaks({length:this.drawer.getWidth()},0)},destroy:function(){this.fireEvent("destroy"),this.clearMarks(),this.clearRegions(),this.unAll(),this.backend.destroy(),this.drawer.destroy(),this.media&&this.container.removeChild(this.media)},updateSelectionByMark:function(e,t){var i;i=t.id==this.selMark0.id?{startPercentage:e.endPercentage,endPercentage:this.selMark1.percentage}:{startPercentage:this.selMark0.percentage,endPercentage:e.endPercentage},this.updateSelection(i)},updateSelection:function(e){var t=this,i=e.startPercentage,r=e.endPercentage,n=this.params.selectionColor,a=0;if(this.params.selectionBorder&&(n=this.params.selectionBorderColor,a=2),i>r){var s=i;i=r,r=s}this.selMark0?this.selMark0.update({percentage:i,position:i*this.getDuration()}):this.selMark0=this.mark({width:a,percentage:i,position:i*this.getDuration(),color:n,draggable:t.params.selectionBorder}),this.selMark1?this.selMark1.update({percentage:r,position:r*this.getDuration()}):this.selMark1=this.mark({width:a,percentage:r,position:r*this.getDuration(),color:n,draggable:t.params.selectionBorder}),this.drawer.updateSelection(i,r),this.params.loopSelection&&this.backend.updateSelection(i,r),t.fireEvent("selection-update",this.getSelection())},moveMark:function(e,t){t.update({percentage:e.endPercentage,position:e.endPercentage*this.getDuration()}),this.markers[t.id]=t},clearSelection:function(){this.selMark0&&this.selMark1&&(this.drawer.clearSelection(this.selMark0,this.selMark1),this.selMark0.remove(),this.selMark0=null,this.selMark1.remove(),this.selMark1=null,this.params.loopSelection&&this.backend.clearSelection(),this.fireEvent("selection-update",this.getSelection()))},toggleLoopSelection:function(){this.params.loopSelection=!this.params.loopSelection,this.params.loopSelection?this.selMark0&&this.selMark1&&this.updateSelection({startPercentage:this.selMark0.percentage,endPercentage:this.selMark1.percentage}):this.backend.clearSelection()},getSelection:function(){return this.selMark0&&this.selMark1?{startPercentage:this.selMark0.percentage,startPosition:this.selMark0.position,endPercentage:this.selMark1.percentage,endPosition:this.selMark1.position,startTime:this.selMark0.getTitle(),endTime:this.selMark1.getTitle()}:null},enableInteraction:function(){this.drawer.interact=!0},disableInteraction:function(){this.drawer.interact=!1},toggleInteraction:function(){this.drawer.interact=!this.drawer.interact}};WaveSurfer.Mark={defaultParams:{id:null,position:0,percentage:0,width:1,color:"#333",draggable:!1},init:function(e){return this.apply(WaveSurfer.util.extend({},this.defaultParams,e)),this},getTitle:function(){return[~~(this.position/60),("00"+~~(this.position%60)).slice(-2)].join(":")},apply:function(e){Object.keys(e).forEach(function(t){t in this.defaultParams&&(this[t]=e[t])},this)},update:function(e){this.apply(e),this.fireEvent("update")},remove:function(){this.fireEvent("remove"),this.unAll()}},WaveSurfer.Region={defaultParams:{id:null,startPosition:0,endPosition:0,startPercentage:0,endPercentage:0,color:"rgba(0, 0, 255, 0.2)"},init:function(e){return this.apply(WaveSurfer.util.extend({},this.defaultParams,e)),this},apply:function(e){Object.keys(e).forEach(function(t){t in this.defaultParams&&(this[t]=e[t])},this)},update:function(e){this.apply(e),this.fireEvent("update")},remove:function(){this.fireEvent("remove"),this.unAll()}},WaveSurfer.Observer={on:function(e,t){this.handlers||(this.handlers={});var i=this.handlers[e];i||(i=this.handlers[e]=[]),i.push(t)},un:function(e,t){if(this.handlers){var i=this.handlers[e];if(i)if(t)for(var r=i.length-1;r>=0;r--)i[r]==t&&i.splice(r,1);else i.length=0}},unAll:function(){this.handlers=null},once:function(e,t){var i=this,r=function(){t(),setTimeout(function(){i.un(e,r)},0)};this.on(e,r)},fireEvent:function(e){if(this.handlers){var t=this.handlers[e],i=Array.prototype.slice.call(arguments,1);t&&t.forEach(function(e){e.apply(null,i)})}}},WaveSurfer.util={extend:function(e){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(t){Object.keys(t).forEach(function(i){e[i]=t[i]})}),e},getId:function(){return"wavesurfer_"+Math.random().toString(32).substring(2)},max:function(e,t){for(var i=-1/0,r=0,n=e.length;n>r;r++){var a=e[r];null!=t&&(a=Math.abs(a-t)),a>i&&(i=a)}return i},ajax:function(e){var t=Object.create(WaveSurfer.Observer),i=new XMLHttpRequest;return i.open(e.method||"GET",e.url,!0),i.responseType=e.responseType,i.addEventListener("progress",function(e){t.fireEvent("progress",e)}),i.addEventListener("load",function(e){t.fireEvent("load",e),200==i.status||206==i.status?t.fireEvent("success",i.response,e):t.fireEvent("error",e)}),i.addEventListener("error",function(e){t.fireEvent("error",e)}),i.send(),t.xhr=i,t},throttle:function(e,t,i){var r,n,a,s=null,o=0;i||(i={});var c=function(){o=i.leading===!1?0:Date.now(),s=null,a=e.apply(r,n),r=n=null};return function(){var h=Date.now();o||i.leading!==!1||(o=h);var u=t-(h-o);return r=this,n=arguments,0>=u?(clearTimeout(s),s=null,o=h,a=e.apply(r,n),r=n=null):s||i.trailing===!1||(s=setTimeout(c,u)),a}}},WaveSurfer.util.extend(WaveSurfer,WaveSurfer.Observer),WaveSurfer.util.extend(WaveSurfer.Mark,WaveSurfer.Observer),WaveSurfer.util.extend(WaveSurfer.Region,WaveSurfer.Observer),WaveSurfer.WebAudio={scriptBufferSize:256,fftSize:128,getAudioContext:function(){if(!window.AudioContext&&!window.webkitAudioContext)throw new Error("wavesurfer.js: your browser doesn't support WebAudio");return WaveSurfer.WebAudio.audioContext||(WaveSurfer.WebAudio.audioContext=new(window.AudioContext||window.webkitAudioContext)),WaveSurfer.WebAudio.audioContext},init:function(e){this.params=e,this.ac=e.audioContext||this.getAudioContext(),this.loop=!1,this.prevFrameTime=0,this.scheduledPause=null,this.postInit(),this.createVolumeNode(),this.createScriptNode(),this.createAnalyserNode(),this.setPlaybackRate(this.params.audioRate)},disconnectFilters:function(){this.filters&&(this.filters.forEach(function(e){e&&e.disconnect()}),this.filters=null)},setFilter:function(){this.setFilters([].slice.call(arguments))},setFilters:function(e){this.disconnectFilters(),e&&e.length?(this.filters=e,e.reduce(function(e,t){return e.connect(t),t},this.analyser).connect(this.gainNode)):this.analyser.connect(this.gainNode)},createScriptNode:function(){var e=this,t=this.scriptBufferSize;this.scriptNode=this.ac.createScriptProcessor?this.ac.createScriptProcessor(t):this.ac.createJavaScriptNode(t),this.scriptNode.connect(this.ac.destination),this.scriptNode.onaudioprocess=function(){if(!e.isPaused()){var t=e.getCurrentTime();e.onPlayFrame(t),e.fireEvent("audioprocess",t)}}},onPlayFrame:function(e){null!=this.scheduledPause&&this.prevFrameTime>=this.scheduledPause&&this.pause(),this.loop&&this.prevFrameTime>this.loopStart&&this.prevFrameTime<=this.loopEnd&&e>this.loopEnd&&this.play(this.loopStart),this.prevFrameTime=e},createAnalyserNode:function(){this.analyser=this.ac.createAnalyser(),this.analyser.fftSize=this.fftSize,this.analyserData=new Uint8Array(this.analyser.frequencyBinCount),this.analyser.connect(this.gainNode)},createVolumeNode:function(){this.gainNode=this.ac.createGain?this.ac.createGain():this.ac.createGainNode(),this.gainNode.connect(this.ac.destination)},setVolume:function(e){this.gainNode.gain.value=e},getVolume:function(){return this.gainNode.gain.value},decodeArrayBuffer:function(e,t,i){var r=this;this.ac.decodeAudioData(e,function(e){r.buffer=e,t(e)},i)},getPeaks:function(e){for(var t=this.buffer,i=t.length/e,r=~~(i/10)||1,n=t.numberOfChannels,a=new Float32Array(e),s=0;n>s;s++)for(var o=t.getChannelData(s),c=0;e>c;c++){for(var h=~~(c*i),u=~~(h+i),d=0,l=h;u>l;l+=r){var f=o[l];f>d?d=f:-f>d&&(d=-f)}(0==s||d>a[c])&&(a[c]=d)}return a},getPlayedPercents:function(){var e=this.getDuration();return this.getCurrentTime()/e||0},disconnectSource:function(){this.source&&this.source.disconnect()},destroy:function(){this.pause(),this.unAll(),this.buffer=null,this.disconnectFilters(),this.disconnectSource(),this.gainNode.disconnect(),this.scriptNode.disconnect(),this.analyser.disconnect()},updateSelection:function(e,t){var i=this.getDuration();this.loop=!0,this.loopStart=i*e,this.loopEnd=i*t},clearSelection:function(){this.loop=!1,this.loopStart=0,this.loopEnd=0},waveform:function(){return this.analyser.getByteTimeDomainData(this.analyserData),this.analyserData},postInit:function(){},load:function(){},getCurrentTime:function(){return 0},isPaused:function(){return!0},getDuration:function(){return 0},setPlaybackRate:function(e){this.playbackRate=e||1},play:function(){},pause:function(){}},WaveSurfer.util.extend(WaveSurfer.WebAudio,WaveSurfer.Observer),WaveSurfer.WebAudioBuffer=Object.create(WaveSurfer.WebAudio),WaveSurfer.util.extend(WaveSurfer.WebAudioBuffer,{postInit:function(){this.lastStartPosition=0,this.lastPlay=this.lastPause=this.nextPause=this.ac.currentTime},load:function(e){this.lastStartPosition=0,this.lastPlay=this.lastPlay=this.nextPause=this.ac.currentTime,this.buffer=e,this.createSource()},createSource:function(){this.disconnectSource(),this.source=this.ac.createBufferSource(),this.source.playbackRate.value=this.playbackRate,this.source.buffer=this.buffer,this.source.connect(this.analyser)},isPaused:function(){return this.nextPause<=this.ac.currentTime},getDuration:function(){return this.buffer.duration},play:function(e,t){this.createSource(),null==e&&(e=this.getCurrentTime()),null==t&&(t=null!=this.scheduledPause?this.scheduledPause:this.getDuration()),this.lastPlay=this.ac.currentTime,this.lastStartPosition=e,this.lastPause=this.nextPause=this.ac.currentTime+(t-e),this.prevFrameTime=-1,this.source.start?this.source.start(0,e,t-e):this.source.noteGrainOn(0,e,t-e),this.fireEvent("play")},pause:function(){this.scheduledPause=null,this.lastPause=this.nextPause=this.ac.currentTime,this.source&&(this.source.stop?this.source.stop(0):this.source.noteOff(0)),this.fireEvent("pause")},getCurrentTime:function(){return this.isPaused()?this.lastStartPosition+(this.lastPause-this.lastPlay)*this.playbackRate:this.lastStartPosition+(this.ac.currentTime-this.lastPlay)*this.playbackRate},setPlaybackRate:function(e){this.playbackRate=e||1,this.source&&(this.source.playbackRate.value=this.playbackRate)}}),WaveSurfer.WebAudioMedia=Object.create(WaveSurfer.WebAudio),WaveSurfer.util.extend(WaveSurfer.WebAudioMedia,{postInit:function(){var e=this;this.media={currentTime:0,duration:0,paused:!0,playbackRate:1,play:function(){},pause:function(){}},this.maxCurrentTime=0,this.on("audioprocess",function(t){t>e.maxCurrentTime&&(e.maxCurrentTime=t)})},load:function(e){this.disconnectSource(),this.media=e,this.maxCurrentTime=0,this.source=this.ac.createMediaElementSource(this.media),this.media.playbackRate=this.playbackRate,this.source.connect(this.analyser)},isPaused:function(){return this.media.paused},getDuration:function(){return this.media.duration},getCurrentTime:function(){return this.media.currentTime},getPlayedPercents:function(){var e=this.getDuration(),t=this.getCurrentTime();return e>=1/0&&(e=this.maxCurrentTime),t/e||0},setPlaybackRate:function(e){this.playbackRate=e||1,this.media.playbackRate=this.playbackRate},play:function(e,t){null!=e&&(this.media.currentTime=e),this.scheduledPause=null==t?null:t,this.media.play(),this.fireEvent("play")},pause:function(){this.scheduledPause=null,this.media.pause(),this.fireEvent("pause")}}),WaveSurfer.AudioElement=Object.create(WaveSurfer.WebAudioMedia),WaveSurfer.util.extend(WaveSurfer.AudioElement,{init:function(e){this.params=e,this.loop=!1,this.prevFrameTime=0,this.scheduledPause=null,this.postInit(),this.setPlaybackRate(this.params.audioRate)},load:function(e,t){this.media=e,this.peaks=t,this.maxCurrentTime=0,this.setPlaybackRate(this.playbackRate)},getPeaks:function(){return this.peaks||[]},getVolume:function(){return this.media.volume},setVolume:function(e){this.media.volume=e},destroy:function(){this.pause(),this.unAll(),this.media=null}}),WaveSurfer.Drawer={init:function(e,t){this.container=e,this.params=t,this.width=0,this.height=t.height*this.params.pixelRatio,this.containerWidth=this.container.clientWidth,this.lastPos=0,this.createWrapper(),this.createElements()},createWrapper:function(){this.wrapper=this.container.appendChild(document.createElement("wave")),this.style(this.wrapper,{display:"block",position:"relative",userSelect:"none",webkitUserSelect:"none",height:this.params.height+"px"}),(this.params.fillParent||this.params.scrollParent)&&this.style(this.wrapper,{width:"100%",overflowX:"auto",overflowY:"hidden"}),this.setupWrapperEvents()},handleEvent:function(e){e.preventDefault();var t=this.wrapper.getBoundingClientRect();return(e.clientX-t.left+this.wrapper.scrollLeft)/this.scrollWidth||0},setupWrapperEvents:function(){var e=this;this.wrapper.addEventListener("mousedown",function(t){e.params.interact&&e.fireEvent("mousedown",e.handleEvent(t),t)}),this.wrapper.addEventListener("mouseup",function(t){e.params.interact&&e.fireEvent("mouseup",t)}),this.wrapper.addEventListener("dblclick",function(t){(e.params.interact||e.params.dragSelection)&&("handler"!==t.target.tagName.toLowerCase()||t.target.classList.contains("selection-wavesurfer-handler")?e.fireEvent("drag-clear"):e.fireEvent("mark-dblclick",t.target.parentNode.id))}),this.params.dragSelection&&function(){var t={},i=function(){t.startPercentage=t.endPercentage=null};document.addEventListener("mouseup",i),e.on("destroy",function(){document.removeEventListener("mouseup",i)}),e.wrapper.addEventListener("mousedown",function(i){t.startPercentage=e.handleEvent(i)}),e.wrapper.addEventListener("mousemove",WaveSurfer.util.throttle(function(i){i.stopPropagation(),null!=t.startPercentage&&(t.endPercentage=e.handleEvent(i),e.fireEvent("drag",t))},30))}()},drawPeaks:function(e,t){if(this.resetScroll(),this.setWidth(t),this.params.normalize)var i=WaveSurfer.util.max(e);else i=1;this.drawWave(e,i)},style:function(e,t){return Object.keys(t).forEach(function(i){e.style[i]!=t[i]&&(e.style[i]=t[i])}),e},resetScroll:function(){this.wrapper.scrollLeft=0},recenter:function(e){var t=this.scrollWidth*e;this.recenterOnPosition(t,!0)},recenterOnPosition:function(e,t){var i=this.wrapper.scrollLeft,r=~~(this.containerWidth/2),n=e-r,a=n-i;if(!t&&a>=-r&&r>a){var s=5;a=Math.max(-s,Math.min(s,a)),n=i+a}0!=a&&(this.wrapper.scrollLeft=n)},getWidth:function(){return Math.round(this.containerWidth*this.params.pixelRatio)},setWidth:function(e){e!=this.width&&(this.width=e,this.scrollWidth=~~(this.width/this.params.pixelRatio),this.containerWidth=this.container.clientWidth,this.params.fillParent||this.params.scrollParent?this.style(this.wrapper,{width:""}):this.style(this.wrapper,{width:this.scrollWidth+"px"}),this.updateWidth())},progress:function(e){var t=1/this.params.pixelRatio,i=Math.round(e*this.width)*t;if(i<this.lastPos||i-this.lastPos>=t){if(this.lastPos=i,this.params.scrollParent){var r=~~(this.scrollWidth*e);this.recenterOnPosition(r)}this.updateProgress(e)}},destroy:function(){this.unAll(),this.container.removeChild(this.wrapper),this.wrapper=null},updateSelection:function(e,t){this.startPercent=e,this.endPercent=t,this.drawSelection()},clearSelection:function(e,t){this.startPercent=null,this.endPercent=null,this.eraseSelection(),this.eraseSelectionMarks(e,t)},createElements:function(){},updateWidth:function(){},drawWave:function(){},clearWave:function(){},updateProgress:function(){},addMark:function(){},removeMark:function(){},updateMark:function(){},addRegion:function(){},removeRegion:function(){},updateRegion:function(){},drawSelection:function(){},eraseSelection:function(){},eraseSelectionMarks:function(){}},WaveSurfer.util.extend(WaveSurfer.Drawer,WaveSurfer.Observer),WaveSurfer.Drawer.Canvas=Object.create(WaveSurfer.Drawer),WaveSurfer.util.extend(WaveSurfer.Drawer.Canvas,{createElements:function(){var e=this.wrapper.appendChild(this.style(document.createElement("canvas"),{position:"absolute",zIndex:1}));this.progressWave=this.wrapper.appendChild(this.style(document.createElement("wave"),{position:"absolute",zIndex:2,overflow:"hidden",width:"0",height:this.params.height+"px",borderRight:[this.params.cursorWidth+"px","solid",this.params.cursorColor].join(" ")}));var t=this.progressWave.appendChild(document.createElement("canvas")),i=0;this.params.selectionForeground&&(i=3);var r=this.wrapper.appendChild(this.style(document.createElement("canvas"),{position:"absolute",zIndex:i}));this.waveCc=e.getContext("2d"),this.progressCc=t.getContext("2d"),this.selectionCc=r.getContext("2d")},updateWidth:function(){var e=Math.round(this.width/this.params.pixelRatio);[this.waveCc,this.progressCc,this.selectionCc].forEach(function(t){t.canvas.width=this.width,t.canvas.height=this.height,this.style(t.canvas,{width:e+"px"})},this),this.clearWave()},clearWave:function(){this.waveCc.clearRect(0,0,this.width,this.height),this.progressCc.clearRect(0,0,this.width,this.height)},drawWave:function(e,t){var i=.5/this.params.pixelRatio;this.waveCc.fillStyle=this.params.waveColor,this.progressCc.fillStyle=this.params.progressColor;var r=this.height/2,n=r/t,a=1;this.params.fillParent&&this.width>e.length&&(a=this.width/e.length);var s=e.length;this.waveCc.beginPath(),this.waveCc.moveTo(i,r),this.progressCc.beginPath(),this.progressCc.moveTo(i,r);for(var o=0;s>o;o++){var c=Math.round(e[o]*n);this.waveCc.lineTo(o*a+i,r+c),this.progressCc.lineTo(o*a+i,r+c)}this.waveCc.lineTo(this.width+i,r),this.progressCc.lineTo(this.width+i,r),this.waveCc.moveTo(i,r),this.progressCc.moveTo(i,r);for(var o=0;s>o;o++){var c=Math.round(e[o]*n);this.waveCc.lineTo(o*a+i,r-c),this.progressCc.lineTo(o*a+i,r-c)}this.waveCc.lineTo(this.width+i,r),this.waveCc.fill(),this.progressCc.lineTo(this.width+i,r),this.progressCc.fill(),this.waveCc.fillRect(0,r-i,this.width,i)},updateProgress:function(e){var t=Math.round(this.width*e)/this.params.pixelRatio;this.style(this.progressWave,{width:t+"px"})},addMark:function(e){var t=this,i=document.createElement("mark");i.id=e.id,e.type&&"selMark"===e.type&&(i.className="selection-mark"),this.wrapper.appendChild(i);var r;e.draggable&&(r=document.createElement("handler"),r.id=e.id+"-handler",r.className="selMark"===e.type?"selection-wavesurfer-handler":"wavesurfer-handler",i.appendChild(r)),i.addEventListener("mouseover",function(i){t.fireEvent("mark-over",e,i)}),i.addEventListener("mouseleave",function(i){t.fireEvent("mark-leave",e,i)}),i.addEventListener("click",function(i){t.fireEvent("mark-click",e,i)}),e.draggable&&function(){var i={},n=function(e){e.stopPropagation(),i.startPercentage=i.endPercentage=null};document.addEventListener("mouseup",n),t.on("destroy",function(){document.removeEventListener("mouseup",n)}),r.addEventListener("mousedown",function(e){e.stopPropagation(),i.startPercentage=t.handleEvent(e)}),t.wrapper.addEventListener("mousemove",WaveSurfer.util.throttle(function(r){r.stopPropagation(),null!=i.startPercentage&&(i.endPercentage=t.handleEvent(r),t.fireEvent("drag-mark",i,e))},30))}(),this.updateMark(e),e.draggable&&(this.style(r,{position:"absolute",cursor:"col-resize",width:"12px",height:"15px"}),this.style(r,{left:r.offsetWidth/2*-1+"px",top:i.offsetHeight/2-r.offsetHeight/2+"px",backgroundColor:e.color}))},updateMark:function(e){var t=document.getElementById(e.id);t.title=e.getTitle(),this.style(t,{height:"100%",position:"absolute",zIndex:4,width:e.width+"px",left:Math.max(0,Math.round(e.percentage*this.scrollWidth-e.width/2))+"px",backgroundColor:e.color})},removeMark:function(e){var t=document.getElementById(e.id);t&&this.wrapper.removeChild(t)},addRegion:function(e){var t=this,i=document.createElement("region");i.id=e.id,this.wrapper.appendChild(i),i.addEventListener("mouseover",function(i){t.fireEvent("region-over",e,i)}),i.addEventListener("mouseleave",function(i){t.fireEvent("region-leave",e,i)}),i.addEventListener("click",function(i){t.fireEvent("region-click",e,i)}),this.updateRegion(e)},updateRegion:function(e){var t=document.getElementById(e.id),i=Math.max(0,Math.round(e.startPercentage*this.scrollWidth)),r=Math.max(0,Math.round(e.endPercentage*this.scrollWidth))-i;this.style(t,{height:"100%",position:"absolute",zIndex:4,left:i+"px",top:"0px",width:r+"px",backgroundColor:e.color})},removeRegion:function(e){var t=document.getElementById(e.id);t&&this.wrapper.removeChild(t)},drawSelection:function(){this.eraseSelection(),this.selectionCc.fillStyle=this.params.selectionColor;var e=this.startPercent*this.width,t=this.endPercent*this.width-e;this.selectionCc.fillRect(e,0,t,this.height)},eraseSelection:function(){this.selectionCc.clearRect(0,0,this.width,this.height)},eraseSelectionMarks:function(e,t){this.removeMark(e),this.removeMark(t)}});
//# sourceMappingURL=/build/wavesurfer-js-map.json