UNPKG

ts-audio

Version:

3 lines (2 loc) 10.9 kB
function t(t,i){for(var e=0;e<i.length;e++){var o=i[e];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(t,s(o.key),o)}}function i(i,e,s){return e&&t(i.prototype,e),s&&t(i,s),Object.defineProperty(i,"prototype",{writable:!1}),i}function e(){return e=Object.assign?Object.assign.bind():function(t){for(var i=1;i<arguments.length;i++){var e=arguments[i];for(var s in e)({}).hasOwnProperty.call(e,s)&&(t[s]=e[s])}return t},e.apply(null,arguments)}function s(t){var i=function(t,i){if("object"!=typeof t||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var s=e.call(t,"string");if("object"!=typeof s)return s;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==typeof i?i:i+""}var o=function t(i,e,s){void 0===e&&(e=3),fetch(i).then(s).catch(function(){e&&t(i,e-1)})},a={isDecoded:!1,isPlaying:!1,hasStarted:!1,source:null,gainNode:null},n=/*#__PURE__*/function(){function t(){this.events=void 0,this.events={}}var i=t.prototype;return i.listener=function(t,i){this.events[t]=i},i.emit=function(t,i){this.events[t]&&this.events[t](i)},i.removeAllListeners=function(){this.events={}},t}(),r=/*#__PURE__*/function(){function t(t,i){this.emitter=void 0,this.audioCtx=void 0,this.emitter=t,this.audioCtx=i}var i=t.prototype;return i.ready=function(t){this.emitter.listener("decoded",t)},i.start=function(t){this.emitter.listener("start",t)},i.end=function(t){this.emitter.listener("end",t)},i.state=function(t){var i=this;this.audioCtx&&(this.audioCtx.onstatechange=function(){var e;return t({data:null==(e=i.audioCtx)?void 0:e.state})})},i.dispose=function(){this.audioCtx&&(this.audioCtx.onstatechange=null)},t}(),u=function(t){var i=t.audioCtx,e=t.volume,s=t.emitter,o=t.states,a=o.source=i.createBufferSource(),n=o.gainNode=i.createGain();n.gain.value=e,n.connect(i.destination),a.connect(n),a.onended=function(){o.hasStarted=!1,o.isPlaying=!1,s.emit("end",{data:null})}},h=function(t,i,e){return"suspended"===t.state?t.resume().then(function(){return i.start(0,e)}):i.start(0,e)},d=/*#__PURE__*/function(){function t(t){var i,s=t.file,u=t.volume,h=void 0===u?1:u,d=t.time,l=void 0===d?0:d,c=t.autoPlay,f=void 0!==c&&c,_=t.loop,v=void 0!==_&&_,p=t.preload,y=void 0!==p&&p;this._file=void 0,this._initialVolume=void 0,this._initialTime=void 0,this._autoPlay=void 0,this._initialLoop=void 0,this._audioCtx=void 0,this._states=void 0,this._emitter=void 0,this._eventHandler=void 0,this._startTime=0,this._pauseTime=0,this._hasSeekedWhilePaused=!1,this._pendingSeekTime=null,this._isDestroyed=!1,this._file=s,this._initialVolume=h,this._initialTime=l,this._autoPlay=f,this._initialLoop=v,this._audioCtx=((i=window.AudioContext||window.webkitAudioContext)||function(t){throw new Error("`ts-audio`: Your browser doesn't support AudioContext - https://bit.ly/2YWmpnX")}(),new i),this._states=e({},a),this._emitter=new n,this._eventHandler=new r(this._emitter,this._audioCtx),y&&o(s)}var s=t.prototype;return s.recreateAndStart=function(t,i){try{var e,s;this._states.source&&(this._states.source.stop(0),this._states.source.onended=null),u({audioCtx:this._audioCtx,volume:null!=(e=null==(s=this._states.gainNode)?void 0:s.gain.value)?e:this._initialVolume,emitter:this._emitter,states:this._states});var o=this._states.source;o&&(o.buffer=i,o.loop=this._initialLoop,h(this._audioCtx,o,t),this._startTime=this._audioCtx.currentTime,this._pauseTime=t,this._states.isPlaying=!0,this._states.hasStarted=!0)}catch(t){console.error("Failed to recreate audio source:",t),this._states.isPlaying=!1}},s.curryGetBuffer=function(t){var i,e=this;this._states.isDecoded=!1,(i=this._file,fetch(i).then(function(t){if(!t.ok)throw new Error("HTTP error, status = "+t.status);return t.arrayBuffer()})).then(function(i){!function(t){var i=t.source,e=t.autoPlay,s=t.loop,o=t.states,a=t.emitter;t.audioCtx.decodeAudioData(t.arrayBuffer,function(t){i.buffer=t,i.loop=s,o.isDecoded=!0,a.emit("decoded",{data:t}),e&&(i.start(0),o.isPlaying=!0)},console.error)}({audioCtx:e._audioCtx,source:t,arrayBuffer:i,autoPlay:e._autoPlay,loop:e._initialLoop,states:e._states,emitter:e._emitter})}).catch(console.error)},s.play=function(){var t,i=this;if(!this._isDestroyed){if(this._states.hasStarted&&!this._hasSeekedWhilePaused)return this._audioCtx.resume(),this._startTime=this._audioCtx.currentTime,void(this._states.isPlaying=!0);if(this._hasSeekedWhilePaused&&null!=(t=this._states.source)&&t.buffer)return this.recreateAndStart(this._pauseTime,this._states.source.buffer),void(this._hasSeekedWhilePaused=!1);u({audioCtx:this._audioCtx,volume:this._initialVolume,emitter:this._emitter,states:this._states}),null!==this._pendingSeekTime&&(this._pauseTime=this._pendingSeekTime,this._pendingSeekTime=null);var e,s=this._states.source;s&&(this.curryGetBuffer(s),this._states.isDecoded?(h(this._audioCtx,s,null!=(e=this._pauseTime)?e:this._initialTime),this._startTime=this._audioCtx.currentTime):this._emitter.listener("decoded",function(){var t;h(i._audioCtx,s,null!=(t=i._pauseTime)?t:i._initialTime),i._startTime=i._audioCtx.currentTime}),this._states.hasStarted=!0,this._states.isPlaying=!0,this._emitter.emit("start",{data:null}))}},s.pause=function(){this._isDestroyed||(this._states.isPlaying&&(this._pauseTime=this.currentTime),this._audioCtx.suspend(),this._states.isPlaying=!1,this._hasSeekedWhilePaused=!1)},s.toggle=function(){this._isDestroyed||(this._states.isPlaying?this.pause():this.play())},s.stop=function(){var t;this._isDestroyed||this._states.hasStarted&&(null==(t=this._states.source)||t.stop(0),this._states.isPlaying=!1)},s.on=function(t,i){var e,s;this._isDestroyed||null==(e=(s=this._eventHandler)[t])||e.call(s,i)},s.seek=function(t){var i;if(!this._isDestroyed){var e=this.duration>0?Math.max(0,Math.min(t,this.duration)):Math.max(0,t);if(this._states.isDecoded&&null!=(i=this._states.source)&&i.buffer){this._pendingSeekTime=null;var s=Math.max(0,Math.min(e,this.duration)),o=this._states.source.buffer;if(this._states.isPlaying&&this._states.source){this._states.source.onended=null;try{this._states.source.stop(0)}catch(t){console.error("Error stopping audio source:",t)}this.recreateAndStart(s,o)}else this._pauseTime=s,this._hasSeekedWhilePaused=!0}else this._pendingSeekTime=e}},s.destroy=function(){var t;if(!this._isDestroyed){if(this._states.source){this._states.source.onended=null;try{this._states.source.stop(0)}catch(t){}this._states.source.disconnect()}null==(t=this._states.gainNode)||t.disconnect(),this._eventHandler.dispose(),this._emitter.removeAllListeners(),this._states.source=null,this._states.gainNode=null,this._states.isPlaying=!1,this._states.hasStarted=!1,this._states.isDecoded=!1,this._isDestroyed=!0}},i(t,[{key:"volume",get:function(){var t,i;return null!=(t=null==(i=this._states.gainNode)?void 0:i.gain.value)?t:0},set:function(t){this._isDestroyed||this._states.gainNode&&(this._states.gainNode.gain.value=t)}},{key:"loop",get:function(){var t,i;return null!=(t=null==(i=this._states.source)?void 0:i.loop)&&t},set:function(t){this._isDestroyed||this._states.source&&(this._states.source.loop=t)}},{key:"state",get:function(){return this._audioCtx.state}},{key:"audioCtx",get:function(){return this._audioCtx}},{key:"duration",get:function(){var t,i,e;return null!=(t=null==(i=this._states.source)||null==(e=i.buffer)?void 0:e.duration)?t:0}},{key:"currentTime",get:function(){return this._states.hasStarted?this._states.isPlaying?this._pauseTime+(this._audioCtx.currentTime-this._startTime):this._pauseTime:0}},{key:"isPlaying",get:function(){return this._states.isPlaying}}]),t}(),l=function(t){return new d(t)},c={volume:1,loop:!1,audio:null,isStopped:!1,isPlaying:!1,audioIndex:0},f=/*#__PURE__*/function(){function t(t){var i=t.files,s=t.volume,o=void 0===s?1:s,a=t.loop,r=void 0!==a&&a,u=t.shuffle,h=void 0!==u&&u,d=t.preload,f=void 0!==d&&d,_=t.preloadLimit,v=void 0===_?3:_;this.emiter=void 0,this.states=void 0,this.copiedFiles=void 0,this.shouldLoop=void 0,this.curryPlayAudio=void 0,this.isDestroyed=!1,this.emiter=new n,this.states=e({},c,{volume:o,loop:r});var p=!Array.isArray(i);this.shouldLoop=r||p;var y=p?function(t){return Object.entries(t).flatMap(function(t){var i=t[0];return Array(Math.floor(t[1])).fill(i)})}(i):i;this.copiedFiles=h||p?function(t){for(var i=t.slice(),e=t.length-1;e>=0;){var s=Math.floor(Math.random()*e+1),o=i[e];i[e]=i[s],i[s]=o,e--}return i}(y):y.slice(),this.curryPlayAudio=function(t,i){return function e(s,o){var a=l({file:s[t.audioIndex],volume:t.volume});t.audio=a,a.on("start",function(t){i.emit("start",t)}),a.on("end",function(){t.isStopped||(s.length===t.audioIndex+1?(t.audio=null,t.audioIndex=0,t.loop?e(s):(i.emit("end",{data:null}),t.isPlaying=!1)):(t.audioIndex++,e(s)))}),a.play()}}(this.states,this.emiter),f&&function(t,i,e,s){void 0===e&&(e=fetch);for(var o=t.slice(i).reverse(),a=!1,n=function(){o.length?r(o.pop()):a||(a=!0)},r=function(t){e(t).then(n).catch(n)},u=0;u<i;u++)r(t[u])}(this.copiedFiles,v)}var s=t.prototype;return s.play=function(){if(!this.isDestroyed){var t=this.states.audio;if(this.states.isPlaying=!0,!t||this.states.isStopped)return this.curryPlayAudio(this.copiedFiles,this.shouldLoop),void(this.states.isStopped=!1);t.play()}},s.toggle=function(){this.isDestroyed||(this.states.isPlaying?this.pause():this.play())},s.pause=function(){var t;this.isDestroyed||(null==(t=this.states.audio)||t.pause(),this.states.isPlaying=!1)},s.stop=function(){var t;this.isDestroyed||(this.states.isPlaying=!1,this.states.isStopped=!0,null==(t=this.states.audio)||t.stop())},s.next=function(){var t;if(!this.isDestroyed){this.states.audioIndex=this.states.audioIndex===this.copiedFiles.length-1?0:this.states.audioIndex+1,null==(t=this.states.audio)||t.pause();var i=l({file:this.copiedFiles[this.states.audioIndex],volume:this.states.volume});this.states.audio=i,i.play()}},s.prev=function(){var t;if(!this.isDestroyed){this.states.audioIndex=0===this.states.audioIndex?this.copiedFiles.length-1:this.states.audioIndex-1,null==(t=this.states.audio)||t.pause();var i=l({file:this.copiedFiles[this.states.audioIndex],volume:this.states.volume});this.states.audio=i,i.play()}},s.on=function(t,i){this.isDestroyed||this.emiter.listener(t,i)},s.destroy=function(){var t;this.isDestroyed||(this.stop(),null==(t=this.states.audio)||t.destroy(),this.emiter.removeAllListeners(),this.states.audio=null,this.copiedFiles=[],this.isDestroyed=!0)},i(t,[{key:"volume",get:function(){return this.states.volume},set:function(t){this.isDestroyed||(this.states.volume=t,this.states.audio&&(this.states.audio.volume=t))}},{key:"loop",get:function(){return this.states.loop},set:function(t){this.isDestroyed||(this.states.loop=t)}},{key:"audioCtx",get:function(){var t;return null==(t=this.states.audio)?void 0:t.audioCtx}}]),t}();exports.Audio=l,exports.AudioPlaylist=function(t){return new f(t)}; //# sourceMappingURL=index.cjs.map