"use strict";var WaveSurfer={defaultParams:{height:128,waveColor:"#999",progressColor:"#555",cursorColor:"#333",cursorWidth:1,skipLength:2,minPxPerSec:20,pixelRatio:window.devicePixelRatio,fillParent:!0,scrollParent:!1,hideScrollbar:!1,normalize:!1,audioContext:null,container:null,dragSelection:!0,loopSelection:!0,audioRate:1,interact:!0,splitChannels:!1,renderer:"Canvas",backend:"WebAudio",mediaType:"audio"},init:function(n){if(this.params=WaveSurfer.util.extend({},this.defaultParams,n),this.container="string"==typeof n.container?document.querySelector(this.params.container):this.params.container,!this.container)throw new Error("Container element not found");if(this.mediaContainer="undefined"==typeof this.params.mediaContainer?this.container:"string"==typeof this.params.mediaContainer?document.querySelector(this.params.mediaContainer):this.params.mediaContainer,!this.mediaContainer)throw new Error("Media Container element not found");this.savedVolume=0;this.isMuted=!1;this.tmpEvents=[];this.createDrawer();this.createBackend()},createDrawer:function(){var n=this;this.drawer=Object.create(WaveSurfer.Drawer[this.params.renderer]);this.drawer.init(this.container,this.params);this.drawer.on("redraw",function(){n.drawBuffer();n.drawer.progress(n.backend.getPlayedPercents())});this.drawer.on("click",function(t,i){setTimeout(function(){n.seekTo(i)},0)});this.drawer.on("scroll",function(t){n.fireEvent("scroll",t)})},createBackend:function(){var n=this;this.backend&&this.backend.destroy();"AudioElement"==this.params.backend&&(this.params.backend="MediaElement");"WebAudio"!=this.params.backend||WaveSurfer.WebAudio.supportsWebAudio()||(this.params.backend="MediaElement");this.backend=Object.create(WaveSurfer[this.params.backend]);this.backend.init(this.params);this.backend.on("finish",function(){n.fireEvent("finish")});this.backend.on("audioprocess",function(t){n.fireEvent("audioprocess",t)})},restartAnimationLoop:function(){var n=this,i=window.requestAnimationFrame||window.webkitRequestAnimationFrame,t=function(){n.backend.isPaused()||(n.drawer.progress(n.backend.getPlayedPercents()),i(t))};t()},getDuration:function(){return this.backend.getDuration()},getCurrentTime:function(){return this.backend.getCurrentTime()},play:function(n,t){this.backend.play(n,t);this.restartAnimationLoop();this.fireEvent("play")},pause:function(){this.backend.pause();this.fireEvent("pause")},playPause:function(){this.backend.isPaused()?this.play():this.pause()},skipBackward:function(n){this.skip(-n||-this.params.skipLength)},skipForward:function(n){this.skip(n||this.params.skipLength)},skip:function(n){var t=this.getCurrentTime()||0,i=this.getDuration()||1;t=Math.max(0,Math.min(i,t+(n||0)));this.seekAndCenter(t/i)},seekAndCenter:function(n){this.seekTo(n);this.drawer.recenter(n)},seekTo:function(n){var t=this.backend.isPaused(),i=this.params.scrollParent;t&&(this.params.scrollParent=!1);this.backend.seekTo(n*this.getDuration());this.drawer.progress(this.backend.getPlayedPercents());t||(this.backend.pause(),this.backend.play());this.params.scrollParent=i;this.fireEvent("seek",n)},stop:function(){this.pause();this.seekTo(0);this.drawer.progress(0)},setVolume:function(n){this.backend.setVolume(n)},setPlaybackRate:function(n){this.backend.setPlaybackRate(n)},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()},toggleInteraction:function(){this.params.interact=!this.params.interact},drawBuffer:function(){var i=Math.round(this.getDuration()*this.params.minPxPerSec*this.params.pixelRatio),r=this.drawer.getWidth(),n=i,t;this.params.fillParent&&(!this.params.scrollParent||r>i)&&(n=r);t=this.backend.getPeaks(n);this.drawer.drawPeaks(t,n);this.fireEvent("redraw",t,n)},loadArrayBuffer:function(n){this.decodeArrayBuffer(n,function(n){this.loadDecodedBuffer(n)}.bind(this))},loadDecodedBuffer:function(n){this.backend.load(n);this.drawBuffer();this.fireEvent("ready")},loadBlob:function(n){var i=this,t=new FileReader;t.addEventListener("progress",function(n){i.onProgress(n)});t.addEventListener("load",function(n){i.loadArrayBuffer(n.target.result)});t.addEventListener("error",function(){i.fireEvent("error","Error reading file")});t.readAsArrayBuffer(n);this.empty()},load:function(n,t){switch(this.params.backend){case"WebAudio":return this.loadBuffer(n);case"MediaElement":return this.loadMediaElement(n,t)}},loadBuffer:function(n){return this.empty(),this.getArrayBuffer(n,this.loadArrayBuffer.bind(this))},loadMediaElement:function(n,t){this.empty();this.backend.load(n,this.mediaContainer,t);this.tmpEvents.push(this.backend.once("canplay",function(){this.drawBuffer();this.fireEvent("ready")}.bind(this)),this.backend.once("error",function(n){this.fireEvent("error",n)}.bind(this)));!t&&this.backend.supportsWebAudio()&&this.getArrayBuffer(n,function(n){this.decodeArrayBuffer(n,function(n){this.backend.buffer=n;this.drawBuffer()}.bind(this))}.bind(this))},decodeArrayBuffer:function(n,t){this.backend.decodeArrayBuffer(n,this.fireEvent.bind(this,"decoded"),this.fireEvent.bind(this,"error","Error decoding audiobuffer"));this.tmpEvents.push(this.once("decoded",t))},getArrayBuffer:function(n,t){var r=this,i=WaveSurfer.util.ajax({url:n,responseType:"arraybuffer"});return this.tmpEvents.push(i.on("progress",function(n){r.onProgress(n)}),i.on("success",t),i.on("error",function(n){r.fireEvent("error","XHR error: "+n.target.statusText)})),i},onProgress:function(n){if(n.lengthComputable)var t=n.loaded/n.total;else t=n.loaded/(n.loaded+1e6);this.fireEvent("loading",Math.round(100*t),n.target)},exportPCM:function(n,t,i){n=n||1024;t=t||1e4;i=i||!1;var u=this.backend.getPeaks(n,t),f=[].map.call(u,function(n){return Math.round(n*t)/t}),r=JSON.stringify(f);return i||window.open("data:application/json;charset=utf-8,"+encodeURIComponent(r)),r},clearTmpEvents:function(){this.tmpEvents.forEach(function(n){n.un()})},empty:function(){this.backend.isPaused()||(this.stop(),this.backend.disconnectSource());this.clearTmpEvents();this.drawer.progress(0);this.drawer.setWidth(0);this.drawer.drawPeaks({length:this.drawer.getWidth()},0)},destroy:function(){this.fireEvent("destroy");this.clearTmpEvents();this.unAll();this.backend.destroy();this.drawer.destroy()}};WaveSurfer.create=function(n){var t=Object.create(WaveSurfer);return t.init(n),t};WaveSurfer.util={extend:function(n){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(t){Object.keys(t).forEach(function(i){n[i]=t[i]})}),n},getId:function(){return"wavesurfer_"+Math.random().toString(32).substring(2)},ajax:function(n){var i=Object.create(WaveSurfer.Observer),t=new XMLHttpRequest,r=!1;return t.open(n.method||"GET",n.url,!0),t.responseType=n.responseType||"json",t.addEventListener("progress",function(n){i.fireEvent("progress",n);n.lengthComputable&&n.loaded==n.total&&(r=!0)}),t.addEventListener("load",function(n){r||i.fireEvent("progress",n);i.fireEvent("load",n);200==t.status||206==t.status?i.fireEvent("success",t.response,n):i.fireEvent("error",n)}),t.addEventListener("error",function(n){i.fireEvent("error",n)}),t.send(),i.xhr=t,i}};WaveSurfer.Observer={on:function(n,t){this.handlers||(this.handlers={});var i=this.handlers[n];return i||(i=this.handlers[n]=[]),i.push(t),{name:n,callback:t,un:this.un.bind(this,n,t)}},un:function(n,t){var i,r;if(this.handlers&&(i=this.handlers[n],i))if(t)for(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(n,t){var r=this,i=function(){t.apply(this,arguments);setTimeout(function(){r.un(n,i)},0)};return this.on(n,i)},fireEvent:function(n){if(this.handlers){var t=this.handlers[n],i=Array.prototype.slice.call(arguments,1);t&&t.forEach(function(n){n.apply(null,i)})}}};WaveSurfer.util.extend(WaveSurfer,WaveSurfer.Observer);WaveSurfer.WebAudio={scriptBufferSize:256,PLAYING_STATE:0,PAUSED_STATE:1,FINISHED_STATE:2,supportsWebAudio:function(){return!(!window.AudioContext&&!window.webkitAudioContext)},getAudioContext:function(){return WaveSurfer.WebAudio.audioContext||(WaveSurfer.WebAudio.audioContext=new(window.AudioContext||window.webkitAudioContext)),WaveSurfer.WebAudio.audioContext},getOfflineAudioContext:function(n){return WaveSurfer.WebAudio.offlineAudioContext||(WaveSurfer.WebAudio.offlineAudioContext=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,2,n)),WaveSurfer.WebAudio.offlineAudioContext},init:function(n){this.params=n;this.ac=n.audioContext||this.getAudioContext();this.lastPlay=this.ac.currentTime;this.startPosition=0;this.scheduledPause=null;this.states=[Object.create(WaveSurfer.WebAudio.state.playing),Object.create(WaveSurfer.WebAudio.state.paused),Object.create(WaveSurfer.WebAudio.state.finished)];this.setState(this.PAUSED_STATE);this.createVolumeNode();this.createScriptNode();this.createAnalyserNode();this.setPlaybackRate(this.params.audioRate)},disconnectFilters:function(){this.filters&&(this.filters.forEach(function(n){n&&n.disconnect()}),this.filters=null)},setState:function(n){this.state!==this.states[n]&&(this.state=this.states[n],this.state.init.call(this))},setFilter:function(){this.setFilters([].slice.call(arguments))},setFilters:function(n){this.disconnectFilters();n&&n.length?(this.filters=n,n.reduce(function(n,t){return n.connect(t),t},this.analyser).connect(this.gainNode)):this.analyser.connect(this.gainNode)},createScriptNode:function(){var n=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(){var t=n.getCurrentTime();n.buffer&&t>n.getDuration()?n.setState(n.FINISHED_STATE):n.buffer&&t>=n.scheduledPause?n.setState(n.PAUSED_STATE):n.state===n.states[n.PLAYING_STATE]&&n.fireEvent("audioprocess",t)}},createAnalyserNode:function(){this.analyser=this.ac.createAnalyser();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(n){this.gainNode.gain.value=n},getVolume:function(){return this.gainNode.gain.value},decodeArrayBuffer:function(n,t,i){this.offlineAc||(this.offlineAc=this.getOfflineAudioContext(this.ac?this.ac.sampleRate:44100));this.offlineAc.decodeAudioData(n,function(n){t(n)}.bind(this),i)},getPeaks:function(n){for(var u,f=this.buffer.length/n,c=~~(f/10)||1,l=this.buffer.numberOfChannels,s=[],e=[],r=0;l>r;r++)for(var a=s[r]=[],v=this.buffer.getChannelData(r),i=0;n>i;i++){for(var h=~~(i*f),y=~~(h+f),t=0,o=h;y>o;o+=c)u=v[o],u>t?t=u:-u>t&&(t=-u);a[i]=t;(0==r||t>e[i])&&(e[i]=t)}return this.params.splitChannels?s:e},getPlayedPercents:function(){return this.state.getPlayedPercents.call(this)},disconnectSource:function(){this.source&&this.source.disconnect()},destroy:function(){this.isPaused()||this.pause();this.unAll();this.buffer=null;this.disconnectFilters();this.disconnectSource();this.gainNode.disconnect();this.scriptNode.disconnect();this.analyser.disconnect()},load:function(n){this.startPosition=0;this.lastPlay=this.ac.currentTime;this.buffer=n;this.createSource()},createSource:function(){this.disconnectSource();this.source=this.ac.createBufferSource();this.source.start=this.source.start||this.source.noteGrainOn;this.source.stop=this.source.stop||this.source.noteOff;this.source.playbackRate.value=this.playbackRate;this.source.buffer=this.buffer;this.source.connect(this.analyser)},isPaused:function(){return this.state!==this.states[this.PLAYING_STATE]},getDuration:function(){return this.buffer?this.buffer.duration:0},seekTo:function(n,t){return this.scheduledPause=null,null==n&&(n=this.getCurrentTime(),n>=this.getDuration()&&(n=0)),null==t&&(t=this.getDuration()),this.startPosition=n,this.lastPlay=this.ac.currentTime,this.state===this.states[this.FINISHED_STATE]&&this.setState(this.PAUSED_STATE),{start:n,end:t}},getPlayedTime:function(){return(this.ac.currentTime-this.lastPlay)*this.playbackRate},play:function(n,t){this.createSource();var i=this.seekTo(n,t);n=i.start;t=i.end;this.scheduledPause=t;this.source.start(0,n,t-n);this.setState(this.PLAYING_STATE)},pause:function(){this.scheduledPause=null;this.startPosition+=this.getPlayedTime();this.source&&this.source.stop(0);this.setState(this.PAUSED_STATE)},getCurrentTime:function(){return this.state.getCurrentTime.call(this)},setPlaybackRate:function(n){n=n||1;this.isPaused()?this.playbackRate=n:(this.pause(),this.playbackRate=n,this.play())}};WaveSurfer.WebAudio.state={};WaveSurfer.WebAudio.state.playing={init:function(){},getPlayedPercents:function(){var n=this.getDuration();return this.getCurrentTime()/n||0},getCurrentTime:function(){return this.startPosition+this.getPlayedTime()}};WaveSurfer.WebAudio.state.paused={init:function(){},getPlayedPercents:function(){var n=this.getDuration();return this.getCurrentTime()/n||0},getCurrentTime:function(){return this.startPosition}};WaveSurfer.WebAudio.state.finished={init:function(){this.fireEvent("finish")},getPlayedPercents:function(){return 1},getCurrentTime:function(){return this.getDuration()}};WaveSurfer.util.extend(WaveSurfer.WebAudio,WaveSurfer.Observer);WaveSurfer.MediaElement=Object.create(WaveSurfer.WebAudio);WaveSurfer.util.extend(WaveSurfer.MediaElement,{init:function(n){this.params=n;this.media={currentTime:0,duration:0,paused:!0,playbackRate:1,play:function(){},pause:function(){}};this.mediaType=n.mediaType.toLowerCase();this.elementPosition=n.elementPosition},load:function(n,t,i){var u=this,r=document.createElement(this.mediaType),f;r.controls=!1;r.autoplay=!1;r.preload="auto";r.src=n;r.addEventListener("error",function(){u.fireEvent("error","Error loading media element")});r.addEventListener("canplay",function(){u.fireEvent("canplay")});r.addEventListener("ended",function(){u.fireEvent("finish")});r.addEventListener("timeupdate",function(){u.fireEvent("audioprocess",u.getCurrentTime())});f=t.querySelector(this.mediaType);f&&t.removeChild(f);t.appendChild(r);this.media=r;this.peaks=i;this.onPlayEnd=null;this.buffer=null;this.setPlaybackRate(this.playbackRate)},isPaused:function(){return this.media.paused},getDuration:function(){var n=this.media.duration;return n>=1/0&&(n=this.media.seekable.end()),n},getCurrentTime:function(){return this.media.currentTime},getPlayedPercents:function(){return this.getCurrentTime()/this.getDuration()||0},setPlaybackRate:function(n){this.playbackRate=n||1;this.media.playbackRate=this.playbackRate},seekTo:function(n){null!=n&&(this.media.currentTime=n);this.clearPlayEnd()},play:function(n,t){this.seekTo(n);this.media.play();t&&this.setPlayEnd(t)},pause:function(){this.media.pause();this.clearPlayEnd()},setPlayEnd:function(n){var t=this;this.onPlayEnd=function(i){i>=n&&(t.pause(),t.seekTo(n))};this.on("audioprocess",this.onPlayEnd)},clearPlayEnd:function(){this.onPlayEnd&&(this.un("audioprocess",this.onPlayEnd),this.onPlayEnd=null)},getPeaks:function(n){return this.buffer?WaveSurfer.WebAudio.getPeaks.call(this,n):this.peaks||[]},getVolume:function(){return this.media.volume},setVolume:function(n){this.media.volume=n},destroy:function(){this.pause();this.unAll();this.media.parentNode&&this.media.parentNode.removeChild(this.media);this.media=null}});WaveSurfer.AudioElement=WaveSurfer.MediaElement;WaveSurfer.Drawer={init:function(n,t){this.container=n;this.params=t;this.width=0;this.height=t.height*this.params.pixelRatio;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:this.params.hideScrollbar?"hidden":"auto",overflowY:"hidden"});this.setupWrapperEvents()},handleEvent:function(n){n.preventDefault();var t=this.wrapper.getBoundingClientRect();return(n.clientX-t.left+this.wrapper.scrollLeft)/this.wrapper.scrollWidth||0},setupWrapperEvents:function(){var n=this;this.wrapper.addEventListener("click",function(t){var i=n.wrapper.offsetHeight-n.wrapper.clientHeight,r;0!=i&&(r=n.wrapper.getBoundingClientRect(),t.clientY>=r.bottom-i)||n.params.interact&&n.fireEvent("click",t,n.handleEvent(t))});this.wrapper.addEventListener("scroll",function(t){n.fireEvent("scroll",t)})},drawPeaks:function(n,t){this.resetScroll();this.setWidth(t);this.drawWave(n)},style:function(n,t){return Object.keys(t).forEach(function(i){n.style[i]!=t[i]&&(n.style[i]=t[i])}),n},resetScroll:function(){null!==this.wrapper&&(this.wrapper.scrollLeft=0)},recenter:function(n){var t=this.wrapper.scrollWidth*n;this.recenterOnPosition(t,!0)},recenterOnPosition:function(n,t){var u=this.wrapper.scrollLeft,f=~~(this.wrapper.clientWidth/2),i=n-f,r=i-u,o=this.wrapper.scrollWidth-this.wrapper.clientWidth,e;0!=o&&(!t&&r>=-f&&f>r&&(e=5,r=Math.max(-e,Math.min(e,r)),i=u+r),i=Math.max(0,Math.min(o,i)),i!=u&&(this.wrapper.scrollLeft=i))},getWidth:function(){return Math.round(this.container.clientWidth*this.params.pixelRatio)},setWidth:function(n){n!=this.width&&(this.width=n,this.params.fillParent||this.params.scrollParent?this.style(this.wrapper,{width:""}):this.style(this.wrapper,{width:~~(this.width/this.params.pixelRatio)+"px"}),this.updateSize())},setHeight:function(n){n!=this.height&&(this.height=n,this.style(this.wrapper,{height:~~(this.height/this.params.pixelRatio)+"px"}),this.updateSize())},progress:function(n){var i=1/this.params.pixelRatio,t=Math.round(n*this.width)*i,r;(t<this.lastPos||t-this.lastPos>=i)&&((this.lastPos=t,this.params.scrollParent)&&(r=~~(this.wrapper.scrollWidth*n),this.recenterOnPosition(r)),this.updateProgress(n))},destroy:function(){this.unAll();this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=null)},createElements:function(){},updateSize:function(){},drawWave:function(){},clearWave:function(){},updateProgress:function(){}};WaveSurfer.util.extend(WaveSurfer.Drawer,WaveSurfer.Observer);WaveSurfer.Drawer.Canvas=Object.create(WaveSurfer.Drawer);WaveSurfer.util.extend(WaveSurfer.Drawer.Canvas,{createElements:function(){var t=this.wrapper.appendChild(this.style(document.createElement("canvas"),{position:"absolute",zIndex:1,top:0,bottom:0})),n;(this.waveCc=t.getContext("2d"),this.progressWave=this.wrapper.appendChild(this.style(document.createElement("wave"),{position:"absolute",zIndex:2,top:0,bottom:0,overflow:"hidden",width:"0",boxSizing:"border-box",borderRightStyle:"solid",borderRightWidth:this.params.cursorWidth+"px",borderRightColor:this.params.cursorColor})),this.params.waveColor!=this.params.progressColor)&&(n=this.progressWave.appendChild(document.createElement("canvas")),this.progressCc=n.getContext("2d"))},updateSize:function(){var n=Math.round(this.width/this.params.pixelRatio);this.waveCc.canvas.width=this.width;this.waveCc.canvas.height=this.height;this.style(this.waveCc.canvas,{width:n+"px"});this.progressCc&&(this.progressCc.canvas.width=this.width,this.progressCc.canvas.height=this.height,this.style(this.progressCc.canvas,{width:n+"px"}));this.clearWave()},clearWave:function(){this.waveCc.clearRect(0,0,this.width,this.height);this.progressCc&&this.progressCc.clearRect(0,0,this.width,this.height)},drawWave:function(n,t){var f,o;if(n[0]instanceof Array){if(f=n,this.params.splitChannels)return this.setHeight(f.length*this.params.height*this.params.pixelRatio),void f.forEach(this.drawWave,this);n=f[0]}var r=.5/this.params.pixelRatio,h=this.params.height*this.params.pixelRatio,u=h*t||0,i=h/2,e=n.length,s=1;this.params.fillParent&&this.width!=e&&(s=this.width/e);o=1;this.params.normalize&&(o=Math.max.apply(Math,n));this.waveCc.fillStyle=this.params.waveColor;this.progressCc&&(this.progressCc.fillStyle=this.params.progressColor);[this.waveCc,this.progressCc].forEach(function(t){var f,h;if(t){for(t.beginPath(),t.moveTo(r,i+u),f=0;e>f;f++)h=Math.round(n[f]/o*i),t.lineTo(f*s+r,i+h+u);for(t.lineTo(this.width+r,i+u),t.moveTo(r,i+u),f=0;e>f;f++)h=Math.round(n[f]/o*i),t.lineTo(f*s+r,i-h+u);t.lineTo(this.width+r,i+u);t.closePath();t.fill();t.fillRect(0,i+u-r,this.width,r)}},this)},updateProgress:function(n){var t=Math.round(this.width*n)/this.params.pixelRatio;this.style(this.progressWave,{width:t+"px"})}});WaveSurfer.util={extend:function(n){var t=Array.prototype.slice.call(arguments,1);return t.forEach(function(t){Object.keys(t).forEach(function(i){n[i]=t[i]})}),n},getId:function(){return"wavesurfer_"+Math.random().toString(32).substring(2)},ajax:function(n){var i=Object.create(WaveSurfer.Observer),t=new XMLHttpRequest,r=!1;return t.open(n.method||"GET",n.url,!0),t.responseType=n.responseType||"json",t.addEventListener("progress",function(n){i.fireEvent("progress",n);n.lengthComputable&&n.loaded==n.total&&(r=!0)}),t.addEventListener("load",function(n){r||i.fireEvent("progress",n);i.fireEvent("load",n);200==t.status||206==t.status?i.fireEvent("success",t.response,n):i.fireEvent("error",n)}),t.addEventListener("error",function(n){i.fireEvent("error",n)}),t.send(),i.xhr=t,i}};WaveSurfer.Observer={on:function(n,t){this.handlers||(this.handlers={});var i=this.handlers[n];return i||(i=this.handlers[n]=[]),i.push(t),{name:n,callback:t,un:this.un.bind(this,n,t)}},un:function(n,t){var i,r;if(this.handlers&&(i=this.handlers[n],i))if(t)for(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(n,t){var r=this,i=function(){t.apply(this,arguments);setTimeout(function(){r.un(n,i)},0)};return this.on(n,i)},fireEvent:function(n){if(this.handlers){var t=this.handlers[n],i=Array.prototype.slice.call(arguments,1);t&&t.forEach(function(n){n.apply(null,i)})}}};WaveSurfer.util.extend(WaveSurfer,WaveSurfer.Observer);WaveSurfer.WebAudio={scriptBufferSize:256,PLAYING_STATE:0,PAUSED_STATE:1,FINISHED_STATE:2,supportsWebAudio:function(){return!!(window.AudioContext||window.webkitAudioContext)},getAudioContext:function(){return WaveSurfer.WebAudio.audioContext||(WaveSurfer.WebAudio.audioContext=new(window.AudioContext||window.webkitAudioContext)),WaveSurfer.WebAudio.audioContext},getOfflineAudioContext:function(n){return WaveSurfer.WebAudio.offlineAudioContext||(WaveSurfer.WebAudio.offlineAudioContext=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,2,n)),WaveSurfer.WebAudio.offlineAudioContext},init:function(n){this.params=n;this.ac=n.audioContext||this.getAudioContext();this.lastPlay=this.ac.currentTime;this.startPosition=0;this.scheduledPause=null;this.states=[Object.create(WaveSurfer.WebAudio.state.playing),Object.create(WaveSurfer.WebAudio.state.paused),Object.create(WaveSurfer.WebAudio.state.finished)];this.setState(this.PAUSED_STATE);this.createVolumeNode();this.createScriptNode();this.createAnalyserNode();this.setPlaybackRate(this.params.audioRate)},disconnectFilters:function(){this.filters&&(this.filters.forEach(function(n){n&&n.disconnect()}),this.filters=null,this.analyser.connect(this.gainNode))},setState:function(n){this.state!==this.states[n]&&(this.state=this.states[n],this.state.init.call(this))},setFilter:function(){this.setFilters([].slice.call(arguments))},setFilters:function(n){this.disconnectFilters();n&&n.length&&(this.filters=n,this.analyser.disconnect(),n.reduce(function(n,t){return n.connect(t),t},this.analyser).connect(this.gainNode))},createScriptNode:function(){var n=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(){var t=n.getCurrentTime();n.buffer&&t>=n.getDuration()?n.setState(n.FINISHED_STATE):n.buffer&&t>=n.scheduledPause?n.setState(n.PAUSED_STATE):n.state===n.states[n.PLAYING_STATE]&&n.fireEvent("audioprocess",t)}},createAnalyserNode:function(){this.analyser=this.ac.createAnalyser();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(n){this.gainNode.gain.value=n},getVolume:function(){return this.gainNode.gain.value},decodeArrayBuffer:function(n,t,i){this.offlineAc||(this.offlineAc=this.getOfflineAudioContext(this.ac?this.ac.sampleRate:44100));this.offlineAc.decodeAudioData(n,function(n){t(n)}.bind(this),i)},getPeaks:function(n){for(var e=this.buffer.length/n,a=~~(e/10)||1,v=this.buffer.numberOfChannels,s=[],o=[],h,c,t,f,u,r=0;r<v;r++)for(h=s[r]=[],c=this.buffer.getChannelData(r),t=0;t<n;t++){var l=~~(t*e),y=~~(l+e),i=0;for(f=l;f<y;f+=a)u=c[f],u>i?i=u:-u>i&&(i=-u);h[t]=i;(r==0||i>o[t])&&(o[t]=i)}return this.params.splitChannels?s:o},getPlayedPercents:function(){return this.state.getPlayedPercents.call(this)},disconnectSource:function(){this.source&&this.source.disconnect()},destroy:function(){this.isPaused()||this.pause();this.unAll();this.buffer=null;this.disconnectFilters();this.disconnectSource();this.gainNode.disconnect();this.scriptNode.disconnect();this.analyser.disconnect()},load:function(n){this.startPosition=0;this.lastPlay=this.ac.currentTime;this.buffer=n;this.createSource()},createSource:function(){this.disconnectSource();this.source=this.ac.createBufferSource();this.source.start=this.source.start||this.source.noteGrainOn;this.source.stop=this.source.stop||this.source.noteOff;this.source.playbackRate.value=this.playbackRate;this.source.buffer=this.buffer;this.source.connect(this.analyser)},isPaused:function(){return this.state!==this.states[this.PLAYING_STATE]},getDuration:function(){return this.buffer?this.buffer.duration:0},seekTo:function(n,t){return this.scheduledPause=null,n==null&&(n=this.getCurrentTime(),n>=this.getDuration()&&(n=0)),t==null&&(t=this.getDuration()),this.startPosition=n,this.lastPlay=this.ac.currentTime,this.state===this.states[this.FINISHED_STATE]&&this.setState(this.PAUSED_STATE),{start:n,end:t}},getPlayedTime:function(){return(this.ac.currentTime-this.lastPlay)*this.playbackRate},play:function(n,t){this.createSource();var i=this.seekTo(n,t);n=i.start;t=i.end;this.scheduledPause=t;this.source.start(0,n,t-n);this.setState(this.PLAYING_STATE)},pause:function(){this.scheduledPause=null;this.startPosition+=this.getPlayedTime();this.source&&this.source.stop(0);this.setState(this.PAUSED_STATE)},getCurrentTime:function(){return this.state.getCurrentTime.call(this)},setPlaybackRate:function(n){n=n||1;this.isPaused()?this.playbackRate=n:(this.pause(),this.playbackRate=n,this.play())}};WaveSurfer.WebAudio.state={};WaveSurfer.WebAudio.state.playing={init:function(){},getPlayedPercents:function(){var n=this.getDuration();return this.getCurrentTime()/n||0},getCurrentTime:function(){return this.startPosition+this.getPlayedTime()}};WaveSurfer.WebAudio.state.paused={init:function(){},getPlayedPercents:function(){var n=this.getDuration();return this.getCurrentTime()/n||0},getCurrentTime:function(){return this.startPosition}};WaveSurfer.WebAudio.state.finished={init:function(){this.fireEvent("finish")},getPlayedPercents:function(){return 1},getCurrentTime:function(){return this.getDuration()}};WaveSurfer.util.extend(WaveSurfer.WebAudio,WaveSurfer.Observer);WaveSurfer.MediaElement=Object.create(WaveSurfer.WebAudio);WaveSurfer.util.extend(WaveSurfer.MediaElement,{init:function(n){this.params=n;this.media={currentTime:0,duration:0,paused:!0,playbackRate:1,play:function(){},pause:function(){}};this.mediaType=n.mediaType.toLowerCase();this.elementPosition=n.elementPosition},load:function(n,t,i){var u=this,r=document.createElement(this.mediaType),f;r.controls=!1;r.autoplay=!1;r.preload="auto";r.src=n;r.addEventListener("error",function(){u.fireEvent("error","Error loading media element")});r.addEventListener("canplay",function(){u.fireEvent("canplay")});r.addEventListener("ended",function(){u.fireEvent("finish")});r.addEventListener("timeupdate",function(){u.fireEvent("audioprocess",u.getCurrentTime())});f=t.querySelector(this.mediaType);f&&t.removeChild(f);t.appendChild(r);this.media=r;this.peaks=i;this.onPlayEnd=null;this.buffer=null;this.setPlaybackRate(this.playbackRate)},isPaused:function(){return this.media.paused},getDuration:function(){var n=this.media.duration;return n>=Infinity&&(n=this.media.seekable.end()),n},getCurrentTime:function(){return this.media.currentTime},getPlayedPercents:function(){return this.getCurrentTime()/this.getDuration()||0},setPlaybackRate:function(n){this.playbackRate=n||1;this.media.playbackRate=this.playbackRate},seekTo:function(n){n!=null&&(this.media.currentTime=n);this.clearPlayEnd()},play:function(n,t){this.seekTo(n);this.media.play();t&&this.setPlayEnd(t)},pause:function(){this.media.pause();this.clearPlayEnd()},setPlayEnd:function(n){var t=this;this.onPlayEnd=function(i){i>=n&&(t.pause(),t.seekTo(n))};this.on("audioprocess",this.onPlayEnd)},clearPlayEnd:function(){this.onPlayEnd&&(this.un("audioprocess",this.onPlayEnd),this.onPlayEnd=null)},getPeaks:function(n){return this.buffer?WaveSurfer.WebAudio.getPeaks.call(this,n):this.peaks||[]},getVolume:function(){return this.media.volume},setVolume:function(n){this.media.volume=n},destroy:function(){this.pause();this.unAll();this.media.parentNode&&this.media.parentNode.removeChild(this.media);this.media=null}});WaveSurfer.AudioElement=WaveSurfer.MediaElement;WaveSurfer.Drawer={init:function(n,t){this.container=n;this.params=t;this.width=0;this.height=t.height*this.params.pixelRatio;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:this.params.hideScrollbar?"hidden":"auto",overflowY:"hidden"});this.setupWrapperEvents()},handleEvent:function(n){n.preventDefault();var t=this.wrapper.getBoundingClientRect();return(n.clientX-t.left+this.wrapper.scrollLeft)/this.wrapper.scrollWidth||0},setupWrapperEvents:function(){var n=this;this.wrapper.addEventListener("click",function(t){var i=n.wrapper.offsetHeight-n.wrapper.clientHeight,r;i!=0&&(r=n.wrapper.getBoundingClientRect(),t.clientY>=r.bottom-i)||n.params.interact&&n.fireEvent("click",t,n.handleEvent(t))});this.wrapper.addEventListener("scroll",function(t){n.fireEvent("scroll",t)})},drawPeaks:function(n,t){this.resetScroll();this.setWidth(t);this.drawWave(n)},style:function(n,t){return Object.keys(t).forEach(function(i){n.style[i]!==t[i]&&(n.style[i]=t[i])}),n},resetScroll:function(){this.wrapper!==null&&(this.wrapper.scrollLeft=0)},recenter:function(n){var t=this.wrapper.scrollWidth*n;this.recenterOnPosition(t,!0)},recenterOnPosition:function(n,t){var u=this.wrapper.scrollLeft,f=~~(this.wrapper.clientWidth/2),i=n-f,r=i-u,o=this.wrapper.scrollWidth-this.wrapper.clientWidth,e;o!=0&&(!t&&-f<=r&&r<f&&(e=5,r=Math.max(-e,Math.min(e,r)),i=u+r),i=Math.max(0,Math.min(o,i)),i!=u&&(this.wrapper.scrollLeft=i))},getWidth:function(){return Math.round(this.container.clientWidth*this.params.pixelRatio)},setWidth:function(n){n!=this.width&&(this.width=n,this.params.fillParent||this.params.scrollParent?this.style(this.wrapper,{width:""}):this.style(this.wrapper,{width:~~(this.width/this.params.pixelRatio)+"px"}),this.updateSize())},setHeight:function(n){n!=this.height&&(this.height=n,this.style(this.wrapper,{height:~~(this.height/this.params.pixelRatio)+"px"}),this.updateSize())},progress:function(n){var i=1/this.params.pixelRatio,t=Math.round(n*this.width)*i,r;(t<this.lastPos||t-this.lastPos>=i)&&(this.lastPos=t,this.params.scrollParent&&(r=~~(this.wrapper.scrollWidth*n),this.recenterOnPosition(r)),this.updateProgress(n))},destroy:function(){this.unAll();this.wrapper&&(this.container.removeChild(this.wrapper),this.wrapper=null)},createElements:function(){},updateSize:function(){},drawWave:function(){},clearWave:function(){},updateProgress:function(){}};WaveSurfer.util.extend(WaveSurfer.Drawer,WaveSurfer.Observer);WaveSurfer.Drawer.Canvas=Object.create(WaveSurfer.Drawer);WaveSurfer.util.extend(WaveSurfer.Drawer.Canvas,{createElements:function(){var t=this.wrapper.appendChild(this.style(document.createElement("canvas"),{position:"absolute",zIndex:1,top:0,bottom:0})),n;this.waveCc=t.getContext("2d");this.progressWave=this.wrapper.appendChild(this.style(document.createElement("wave"),{position:"absolute",zIndex:2,top:0,bottom:0,overflow:"hidden",width:"0",display:"none",boxSizing:"border-box",borderRightStyle:"solid",borderRightWidth:this.params.cursorWidth+"px",borderRightColor:this.params.cursorColor}));this.params.waveColor!=this.params.progressColor&&(n=this.progressWave.appendChild(document.createElement("canvas")),this.progressCc=n.getContext("2d"))},updateSize:function(){var n=Math.round(this.width/this.params.pixelRatio);this.waveCc.canvas.width=this.width;this.waveCc.canvas.height=this.height;this.style(this.waveCc.canvas,{width:n+"px"});this.style(this.progressWave,{display:"block"});this.progressCc&&(this.progressCc.canvas.width=this.width,this.progressCc.canvas.height=this.height,this.style(this.progressCc.canvas,{width:n+"px"}));this.clearWave()},clearWave:function(){this.waveCc.clearRect(0,0,this.width,this.height);this.progressCc&&this.progressCc.clearRect(0,0,this.width,this.height)},drawWave:function(n,t){var f,o;if(n[0]instanceof Array){if(f=n,this.params.splitChannels){this.setHeight(f.length*this.params.height*this.params.pixelRatio);f.forEach(this.drawWave,this);return}n=f[0]}var r=.5/this.params.pixelRatio,h=this.params.height*this.params.pixelRatio,u=h*t||0,i=h/2,e=n.length,s=1;this.params.fillParent&&this.width!=e&&(s=this.width/e);o=1;this.params.normalize&&(o=Math.max.apply(Math,n));this.waveCc.fillStyle=this.params.waveColor;this.progressCc&&(this.progressCc.fillStyle=this.params.progressColor);[this.waveCc,this.progressCc].forEach(function(t){var f,h;if(t){for(t.beginPath(),t.moveTo(r,i+u),f=0;f<e;f++)h=Math.round(n[f]/o*i),t.lineTo(f*s+r,i+h+u);for(t.lineTo(this.width+r,i+u),t.moveTo(r,i+u),f=0;f<e;f++)h=Math.round(n[f]/o*i),t.lineTo(f*s+r,i-h+u);t.lineTo(this.width+r,i+u);t.closePath();t.fill();t.fillRect(0,i+u-r,this.width,r)}},this)},updateProgress:function(n){var t=Math.round(this.width*n)/this.params.pixelRatio;this.style(this.progressWave,{width:t+"px"})}})