1"use strict";var WaveSurfer={defaultParams:{height:128,waveColor:"#999",waveColor2:"#999",progressColor:"#555",progressColor2:"#555",cursorColor:"#333",cursorColor2:"#333",hoverOpacity:50,cursorWidth:2,waveMode:0,gapWidth:1,minPxPerSec:20,pixelRatio:window.devicePixelRatio||window.screen.deviceXDPI/window.screen.logicalXDPI,normalize:!1,reflection:!1,compression:1,asymmetry:2,audioContext:null,container:null,backend:"WebAudio",mediaType:"audio"},init:function(e){if(this.params=_.extend({},this.defaultParams,e),this.container="string"==typeof e.container?document.querySelector(this.params.container):this.params.container,!this.container)throw new Error("Container element not found");this.tmpEvents=[],this.createDrawer(),this.createBackend()},createDrawer:function(){var e=this;this.drawer=_.extend({},WaveSurfer.Drawer),this.drawer.init(this.container,this.params),this.drawer.on("redraw",function(){e.drawBuffer(),e.drawer.progress(e.backend.getPlayedPercents())})},createBackend:function(){var e=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=_.extend({},WaveSurfer[this.params.backend]),this.backend.init(this.params),this.backend.on("finish",function(){e.fireEvent("finish")}),this.backend.on("play",function(){e.fireEvent("play")}),this.backend.on("pause",function(){e.fireEvent("pause")}),this.backend.on("audioprocess",function(t){e.drawer.progress(e.backend.getPlayedPercents()),e.fireEvent("audioprocess",t)})},updateDrawer:function(){this.drawer.updateSize()},getDuration:function(){return this.backend.getDuration()},drawBuffer:function(){var e=(Math.round(this.getDuration()*this.params.minPxPerSec*this.params.pixelRatio),this.drawer.getWidth()),t=this.backend.getPeaks(e);this.drawer.drawPeaks(t,e),this.fireEvent("redraw",t,e)},loadArrayBuffer:function(e){this.decodeArrayBuffer(e,function(e){this.loadDecodedBuffer(e)}.bind(this))},loadDecodedBuffer:function(e){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.loadArrayBuffer(e.target.result)}),i.addEventListener("error",function(){t.fireEvent("error","Error reading file")}),i.readAsArrayBuffer(e),this.empty()},load:function(e){switch(this.params.backend){case"WebAudio":return this.loadBuffer(e);case"MediaElement":return this.loadMediaElement(e,peaks)}},loadBuffer:function(e){return this.empty(),this.getArrayBuffer(e,this.loadArrayBuffer.bind(this))},loadMediaElement:function(e,t){this.empty(),this.backend.load(e,this.mediaContainer,t),this.tmpEvents.push(this.backend.once("canplay",function(){this.drawBuffer(),this.fireEvent("ready")}.bind(this)),this.backend.once("error",function(e){this.fireEvent("error",e)}.bind(this))),!t&&this.backend.supportsWebAudio()&&this.getArrayBuffer(e,function(e){this.decodeArrayBuffer(e,function(e){this.backend.buffer=e,this.drawBuffer()}.bind(this))}.bind(this))},decodeArrayBuffer:function(e,t){this.backend.decodeArrayBuffer(e,this.fireEvent.bind(this,"decoded"),this.fireEvent.bind(this,"error","Error decoding audiobuffer")),this.tmpEvents.push(this.once("decoded",t))},getArrayBuffer:function(e,t){var i=this,r=this.ajax({url:e,responseType:"arraybuffer"});return this.tmpEvents.push(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)},clearTmpEvents:function(){this.tmpEvents.forEach(function(e){e.un()})},ajax:function(e){var t=_.extend({},WaveSurfer.Observer),i=new XMLHttpRequest,r=!1;return i.open(e.method||"GET",e.url,!0),i.responseType=e.responseType||"json",i.addEventListener("progress",function(e){t.fireEvent("progress",e),e.lengthComputable&&e.loaded==e.total&&(r=!0)}),i.addEventListener("load",function(e){r||t.fireEvent("progress",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},empty:function(){this.backend.disconnectSource(),this.clearTmpEvents(),this.drawer.clearWave()},destroy:function(){this.fireEvent("destroy"),this.clearTmpEvents(),this.unAll(),this.backend.destroy(),this.drawer.destroy()}};WaveSurfer.create=function(e){var t=_.extend({},WaveSurfer);return t.init(e),t},WaveSurfer.Observer={on:function(e,t){this.handlers||(this.handlers={});var i=this.handlers[e];
1return i||(i=this.handlers[e]=[]),i.push(t),{name:e,callback:t,un:this.un.bind(this,e,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.apply(this,arguments),setTimeout(function(){i.un(e,r)},0)};return 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)})}}},_.extend(WaveSurfer,WaveSurfer.Observer),WaveSurfer.Drawer={init:function(e,t){this.container=e,this.params=t,this.progress=0,this.position=-1,this.playing=!1,this.lastPos=0,this.createWrapper(),this.createElements(),this.centerLine=this.container.clientHeight/(1+1/this.params.asymmetry)},createWrapper:function(){this.wrapper=this.container,this.setupWrapperEvents()},handleEvent:function(e){e.preventDefault();var t=this.wrapper.getBoundingClientRect();return(e.clientX-t.left+this.wrapper.scrollLeft)/this.wrapper.scrollWidth||0},setupWrapperEvents:function(){var e=this;this.wrapper.addEventListener("click",function(t){var i=e.wrapper.height-e.wrapper.clientHeight;if(0!=i){var r=e.wrapper.getBoundingClientRect();if(t.clientY>=r.bottom-i)return}t.isCommentArea=t.offsetY>e.centerLine,e.fireEvent("click",t,e.handleEvent(t))}),this.wrapper.addEventListener("mousemove",function(t){t.isCommentArea=t.offsetY>e.centerLine,e.fireEvent("mousemove",t)}),this.wrapper.addEventListener("mouseover",function(t){t.isCommentArea=t.offsetY>e.centerLine,e.fireEvent("mouseover",t)}),this.wrapper.addEventListener("mouseout",function(t){t.isCommentArea=t.offsetY>e.centerLine,e.fireEvent("mouseout",t)}),this.wrapper.addEventListener("scroll",function(t){e.fireEvent("scroll",t)})},drawPeaks:function(e,t){this.resetScroll(),this.setWidth(t),this.params.waveMode?this.drawBars(e):this.drawWave(e)},style:function(e,t){return Object.keys(t).forEach(function(i){e.style[i]!==t[i]&&(e.style[i]=t[i])}),e},resetScroll:function(){null!==this.wrapper&&(this.wrapper.scrollLeft=0)},getWidth:function(){return Math.round(this.container.clientWidth*this.params.pixelRatio)},setWidth:function(e){e!=this.width&&(this.width=e,this.updateSize())},setHeight:function(e){e!=this.height&&(this.height=e,this.style(this.wrapper,{height:~~(this.height/this.params.pixelRatio)+"px"}),this.updateSize())},destroy:function(){this.unAll(),this.wrapper&&(this.container.removeChild(this.canvas),this.wrapper=null)},createElements:function(){this.canvas=this.wrapper.appendChild(this.style(document.createElement("canvas"),{height:"100%",width:"100%"})),this.centerLine=this.canvas.height/(1+1/this.params.asymmetry),this.canvasCc=this.canvas.getContext("2d");var e=document.createElement("canvas");this.waveCc=e.getContext("2d");var t=document.createElement("canvas");this.progressCc=t.getContext("2d");var i=document.createElement("canvas");this.positionCc=i.getContext("2d")},updateSize:function(){this.height=this.params.height*this.params.pixelRatio,this.canvasCc.canvas.width=this.waveCc.canvas.width=this.progressCc.canvas.width=this.positionCc.canvas.width=this.width,this.canvasCc.canvas.height=this.waveCc.canvas.height=this.progressCc.canvas.height=this.positionCc.canvas.height=this.height,this.centerLine=this.container.clientHeight/(1+1/this.params.asymmetry)},clearWave:function(){this.progress=0,this.position=-1,this.canvasCc.clearRect(0,0,this.width,this.height),this.waveCc.clearRect(0,0,this.width,this.height),this.progressCc.clearRect(0,0,this.width,this.height),this.positionCc.clearRect(0,0,this.width,this.height)},drawBars:function(e){if(this.peaks=e,"undefined"==typeof e)return!1;var t=this.width,i=this.params.height*this.params.pixelRatio,r=~~(e.length/2),a=this.params.waveMode*this.params.pixelRatio,s=this.params.gapWidth*this.params.pixelRatio,n=this.params.pixelRatio,o=a+s,h=this.params.asymmetry,c=this.params.compression,d=t/r,u=1;if(this.params.normalize){var l,f;f=Math.max.apply(Math,e),l=Math.min.apply(Math,e),u=f,-l>u&&(u=-l)}var p=[];p.push({cc:this.waveCc,color1:this.params.waveColor,color2:this.params.waveColor2,alpha:1}),p.push({cc:this.progressCc,color1:this.params.progressColor,color2:this.params.progressColor2,alpha:1}),p.push({cc:this.positionCc,color1:this.params.progressColor,color2:this.params.progressColor2,alpha:this.params.hoverOpacity/100}),p.forEach(function(i){var r=i.cc,s=i.cc.canvas.height/(1+1/this.params.asymmetry);if(r){var l=this.waveCc.createLinearGradient(0,0,0,s);l.addColorStop(0,i.color1),l.addColorStop(1,"undefined"!=typeof i.color2?i.color2:i.color1),r.fillStyle=l,r.globalAlpha=i.alpha;for(var f=0;t>f;f+=o){var p=e[Math.floor(2*f/d)];p=Math.pow(Math.abs(p),1/c);var v=s*p/u;v=Math.max(this.params.pixelRatio,Math.abs(v)),r.fillRect(f,s-v-n/2,a,v),r.save(),r.fillStyle=i.color1,r.fillRect(f,s+n/2,a,1*v/h),r.restore(
1)}}},this),this.waveCc.canvas.width&&this.canvasCc.drawImage(this.waveCc.canvas,0,0),this.fireEvent("waveComplete")},drawWave:function(e,t){if("undefined"==typeof e)return!1;this.peaks=e;var i=this.width,r=this.params.height*this.params.pixelRatio,a=~~(e.length/2),s=(this.params.pixelRatio,this.params.asymmetry),n=this.params.compression,o=i/a,h=1;if(this.params.normalize){var c,d;d=Math.max.apply(Math,e),c=Math.min.apply(Math,e),h=d,-c>h&&(h=-c)}var u=[];u.push({cc:this.waveCc,color1:this.params.waveColor,color2:this.params.waveColor2,alpha:1}),u.push({cc:this.progressCc,color1:this.params.progressColor,color2:this.params.progressColor2,alpha:1}),u.push({cc:this.positionCc,color1:this.params.progressColor,color2:this.params.progressColor2,alpha:this.params.hoverOpacity/100}),u.forEach(function(t){if(t.cc.canvas.height){var i=t.cc,r=t.cc.canvas.height/(1+1/this.params.asymmetry);if(i){var c=t.cc.createLinearGradient(0,0,0,r);if(c.addColorStop(0,t.color1),c.addColorStop(1,"undefined"!=typeof t.color2?t.color2:t.color1),i.fillStyle=c,i.globalAlpha=t.alpha,this.params.reflection){i.beginPath(),i.moveTo(0,r);for(var d=0;a>d;d++){var u=e[2*d];u=Math.pow(Math.abs(u),1/n);var l=u/h*r;i.lineTo(d*o,r-l)}i.lineTo(t.cc.canvas.width,r),i.closePath(),i.fill(),i.fillStyle=t.color1,i.beginPath(),i.moveTo(t.cc.canvas.width,r);for(var d=a-1;d>=0;d--){var u=e[2*d];u=Math.pow(Math.abs(u),1/n);var l=u/h*r;i.lineTo(d*o,r+1*l/s)}i.lineTo(0,r),i.closePath(),i.fill()}else{i.beginPath(),i.moveTo(0,r);for(var d=0;a>d;d++){var u=e[2*d];u=Math.pow(Math.abs(u),1/n);var l=u/h*r;i.lineTo(d*o,r-l)}i.closePath(),i.fill(),i.fillStyle=t.color1,i.beginPath(),i.moveTo(t.cc.canvas.width,r);for(var d=a-1;d>=0;d--){var u=e[2*d+1];u=Math.pow(Math.abs(u),1/n);var l=u/h*r;i.lineTo(d*o,r+1*l/s)}i.closePath(),i.fill()}}}},this),this.canvasCc.drawImage(this.waveCc.canvas,0,0),this.fireEvent("waveComplete")},updateProgress:function(e){this.progress=e;var t=Math.round(this.width*this.progress),i=Math.round(this.width*this.position);this.redrawContexts(t,i)},updatePosition:function(e){var t=Math.round(this.width*this.progress);this.position=e;var i=Math.round(this.width*e);this.redrawContexts(t,i)},redrawContexts:function(e,t){var i=this,r=function(e,t,r,s){a.save(),a.beginPath(),a.rect(e,0,t,i.height),a.clip(),i.progressCc.canvas.width&&a.drawImage(i.progressCc.canvas,0,0),a.restore(),a.save(),a.beginPath(),a.rect(r,0,s,i.height),a.clip(),i.positionCc.canvas.width&&a.drawImage(i.positionCc.canvas,0,0),a.restore()},a=this.canvasCc;a.clearRect(0,0,this.width,this.height),this.waveCc.canvas.width&&a.drawImage(this.waveCc.canvas,0,0),0>t?r(0,e,0,0):e>t?r(0,t,t,e-t):r(0,e,e,t-e),this.drawCursor(e)},drawCursor:function(e){if(this.playing){var t=(this.params.height*this.params.pixelRatio/(1+1/this.params.asymmetry),this.params.cursorWidth*this.params.pixelRatio),i=this.canvasCc,r=this.waveCc.createLinearGradient(0,0,0,this.height);r.addColorStop(0,this.params.cursorColor),r.addColorStop(1,"undefined"!=typeof this.params.cursorColor2?this.params.cursorColor2:this.params.cursorColor),i.fillStyle=r,i.fillRect(e-t/2,0,t,this.height)}},colorLuminance:function(e,t){e=String(e).replace(/[^0-9a-f]/gi,""),e.length<6&&(e=e[0]+e[0]+e[1]+e[1]+e[2]+e[2]),t=t||0;var i,r,a="#";for(r=0;3>r;r++)i=parseInt(e.substr(2*r,2),16),i=Math.round(Math.min(Math.max(0,i+i*t),255)).toString(16),a+=("00"+i).substr(i.length);return a}},_.extend(WaveSurfer.Drawer,WaveSurfer.Observer),WaveSurfer.WebAudio={scriptBufferSize:256,supportsWebAudio:function(){return!(!window.AudioContext&&!window.webkitAudioContext)},getAudioContext:function(){if(!document.wvplAudioContext){var e=window.AudioContext||window.webkitAudioContext;document.wvplAudioContext=new e}return document.wvplAudioContext},getOfflineAudioContext:function(e){return this.offlineAudioContext||(this.offlineAudioContext=new(window.OfflineAudioContext||window.webkitOfflineAudioContext)(1,2,e)),this.offlineAudioContext},init:function(e){this.params=e,this.ac=e.audioContext||this.getAudioContext(),this.lastPlay=this.ac.currentTime,this.startPosition=0,this.scheduledPause=null,this.createScriptNode(),this.createAnalyserNode()},createScriptNode:function(){this.ac.createScriptProcessor?this.scriptNode=this.ac.createScriptProcessor(this.scriptBufferSize):this.scriptNode=this.ac.createJavaScriptNode(this.scriptBufferSize),this.scriptNode.connect(this.ac.destination)},createAnalyserNode:function(){this.analyser=this.ac.createAnalyser()},decodeArrayBuffer:function(e,t,i){this.offlineAc||(this.offlineAc=this.getOfflineAudioContext(this.ac?this.ac.sampleRate:44100)),this.offlineAc.decodeAudioData(e,function(e){t(e)}.bind(this),i)},getPeaks:function(e){for(var t=this.buffer.length/e,i=~~(t/10)||1,r=this.buffer.numberOfChannels,a=[],s=[],n=0;r>n;n++)for(var o=a[n]=[],h=this.buffer.getChannelData(n),c=0;e>c;c++){for(var d=~~(c*t),u=~~(d+t),l=h[0],f=h[0],p=d;u>p;p+=i){var v=h[p];v>f&&(f=v),l>v&&(l=v)}o[2*c]=f,o[2*c+1]=l,(0==n||f>s[2*c])&&(s[2*c]=f),(0==n||l<s[2*c+1])&&(s[2*c+1]=l)}return this.params.splitChannels?a:s},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(e){this.startPosition=0,this.lastPlay=this.ac.currentTime,this.buffer=e,this.createSource()},createSource:function(){this.disconnectSource(),this.source=this.ac.createBufferSource(),this.source.buffer=this.buffer,this.source.connect(this.analyser)},getDuration:function(){return this.buffer?this.buffer.duration:0}},_.extend(WaveSurfer.WebAudio,WaveSurfer.Observer),WaveSurfer.MediaElement={init:function(e){this.params=e,this.media={currentTime:0,duration:0,paused:!0,playbackRate:1,play:function(){},pause:function(){}},this.mediaType=e.mediaType.toLowerCase(),this.elementPosition=e.elementPosition},load:function(e,t,i){var r=this,a=document.createElement(this.mediaType);
1a.controls=this.params.mediaControls,a.autoplay=this.params.autoplay||!1,a.preload="auto",a.src=e,a.style.width="100%",a.addEventListener("error",function(){r.fireEvent("error","Error loading media element")}),a.addEventListener("canplay",function(){r.fireEvent("canplay")}),a.addEventListener("ended",function(){r.fireEvent("finish")}),a.addEventListener("timeupdate",function(){r.fireEvent("audioprocess",r.getCurrentTime())});var s=t.querySelector(this.mediaType);s&&t.removeChild(s),t.appendChild(a),this.media=a,this.peaks=i,this.onPlayEnd=null,this.buffer=null,this.setPlaybackRate(this.playbackRate)},isPaused:function(){return!this.media||this.media.paused},getDuration:function(){var e=this.media.duration;return e>=1/0&&(e=this.media.seekable.end()),e},getCurrentTime:function(){return this.media&&this.media.currentTime},getPlayedPercents:function(){return this.getCurrentTime()/this.getDuration()||0},setPlaybackRate:function(e){this.playbackRate=e||1,this.media.playbackRate=this.playbackRate},seekTo:function(e){null!=e&&(this.media.currentTime=e),this.clearPlayEnd()},play:function(e,t){this.seekTo(e),this.media.play(),t&&this.setPlayEnd(t),this.fireEvent("play")},pause:function(){this.media&&this.media.pause(),this.clearPlayEnd(),this.fireEvent("pause")},setPlayEnd:function(e){var t=this;this.onPlayEnd=function(i){i>=e&&(t.pause(),t.seekTo(e))},this.on("audioprocess",this.onPlayEnd)},clearPlayEnd:function(){this.onPlayEnd&&(this.un("audioprocess",this.onPlayEnd),this.onPlayEnd=null)},getPeaks:function(e){return this.buffer?WaveSurfer.WebAudio.getPeaks.call(this,e):this.peaks||[]},getVolume:function(){return this.media.volume},setVolume:function(e){this.media.volume=e},destroy:function(){this.pause(),this.unAll(),this.media&&this.media.parentNode&&this.media.parentNode.removeChild(this.media),this.media=null}},_.extend(WaveSurfer.MediaElement,WaveSurfer.Observer),_.extend(WaveSurfer.AudioElement,WaveSurfer.MediaElement);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.