@cher-ami/audio-manager
Advanced tools
Comparing version 0.1.1 to 0.1.2
@@ -5,3 +5,3 @@ import { TDeferredPromise } from "@wbe/deferred-promise"; | ||
*/ | ||
export declare const MUTE_AUDIO_SIGNAL: import("@solid-js/signal").IStateSignal<boolean, any>; | ||
export declare const MUTE_AUDIO_SIGNAL: import("@zouloux/signal").IStateSignal<boolean, any>; | ||
/** | ||
@@ -8,0 +8,0 @@ * Declare types for audio options |
@@ -1,2 +0,2 @@ | ||
import{StateSignal as i}from"@solid-js/signal";import{deferredPromise as o}from"@wbe/deferred-promise";import t from"@wbe/debug";import{gsap as e}from"gsap";import{useState as n,useEffect as s}from"react";function a(){return a=Object.assign||function(i){for(var o=1;o<arguments.length;o++){var t=arguments[o];for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(i[e]=t[e])}return i},a.apply(this,arguments)}var u=t("AudioManager"),r=i(!1),d=/*#__PURE__*/function(){function i(i,t){var e=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){u("canplay"),e.canplayPromise.resolve(),e.isLoading=!1,e.isLoaded=!0},this.handleEnded=function(){u("ended"),e.isPlaying=!1,e.options.loop&&e.play()},this.handleMuteAll=function(i){i?e.mute():e.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=a({},{volume:1,loop:!1},t),u("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=o(),this.load(),this.initEvent()}var t=i.prototype;return t.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},t.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.on(this.handleMuteAll))},t.play=function(){try{var i=this;return u("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?u("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},t.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},t.stop=function(){u("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},t.replay=function(){u("replay"),this.stop(),this.play()},t.mute=function(){u("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},t.unmute=function(){u("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},t.enableLoop=function(){u("loop"),this.options.loop=!0},t.disableLoop=function(){u("disable loop"),this.options.loop=!1},t.pan=function(i){u("pan",i),this.panner.pan.value=i},t.fade=function(i,o,t,e){void 0===t&&(t=1),void 0===e&&(e="none");try{var n=this;return u("fade >",i,o,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,o,t,e)).then(function(){u("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},t.fadeIn=function(i,o){void 0===i&&(i=1),void 0===o&&(o="none");try{var t=this;return u("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,o)).then(function(){u("fadeIn ended!")})}catch(i){return Promise.reject(i)}},t.fadeOut=function(i,o){void 0===i&&(i=1),void 0===o&&(o="none");try{return u("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,o)).then(function(){u("fadeOut ended!")})}catch(i){return Promise.reject(i)}},t.destroy=function(){var i;u("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.off(this.handleMuteAll)},t.processVolume=function(i,o,t,n){var s=this;void 0===t&&(t=1),void 0===n&&(n="none");var a=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(o,1));return new Promise(function(i){e.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:r,overwrite:!0,ease:n,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,u("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}(),l=function(i,o,t){void 0===t&&(t=[]);var e=n(null),a=e[0],u=e[1];return s(function(){var t=new d(i,o);return u(t),function(){t.destroy()}},t),a};export{d as AudioManager,l as useAudio}; | ||
import{StateSignal as i}from"@zouloux/signal";import{deferredPromise as o}from"@wbe/deferred-promise";import t from"@wbe/debug";import{gsap as e}from"gsap";import{useState as n,useEffect as s}from"react";function a(){return a=Object.assign||function(i){for(var o=1;o<arguments.length;o++){var t=arguments[o];for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(i[e]=t[e])}return i},a.apply(this,arguments)}var u=t("AudioManager"),r=i(!1),d=/*#__PURE__*/function(){function i(i,t){var e=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){u("canplay"),e.canplayPromise.resolve(),e.isLoading=!1,e.isLoaded=!0},this.handleEnded=function(){u("ended"),e.isPlaying=!1,e.options.loop&&e.play()},this.handleMuteAll=function(i){i?e.mute():e.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=a({},{volume:1,loop:!1},t),u("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=o(),this.load(),this.initEvent()}var t=i.prototype;return t.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},t.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.add(this.handleMuteAll))},t.play=function(){try{var i=this;return u("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?u("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},t.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},t.stop=function(){u("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},t.replay=function(){u("replay"),this.stop(),this.play()},t.mute=function(){u("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},t.unmute=function(){u("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},t.enableLoop=function(){u("loop"),this.options.loop=!0},t.disableLoop=function(){u("disable loop"),this.options.loop=!1},t.pan=function(i){u("pan",i),this.panner.pan.value=i},t.fade=function(i,o,t,e){void 0===t&&(t=1),void 0===e&&(e="none");try{var n=this;return u("fade >",i,o,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,o,t,e)).then(function(){u("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},t.fadeIn=function(i,o){void 0===i&&(i=1),void 0===o&&(o="none");try{var t=this;return u("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,o)).then(function(){u("fadeIn ended!")})}catch(i){return Promise.reject(i)}},t.fadeOut=function(i,o){void 0===i&&(i=1),void 0===o&&(o="none");try{return u("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,o)).then(function(){u("fadeOut ended!")})}catch(i){return Promise.reject(i)}},t.destroy=function(){var i;u("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.remove(this.handleMuteAll)},t.processVolume=function(i,o,t,n){var s=this;void 0===t&&(t=1),void 0===n&&(n="none");var a=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(o,1));return new Promise(function(i){e.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:r,overwrite:!0,ease:n,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,u("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}(),l=function(i,o,t){void 0===t&&(t=[]);var e=n(null),a=e[0],u=e[1];return s(function(){var t=new d(i,o);return u(t),function(){t.destroy()}},t),a};export{d as AudioManager,l as useAudio}; | ||
//# sourceMappingURL=index.esm.js.map |
@@ -1,2 +0,2 @@ | ||
var i=require("@solid-js/signal"),e=require("@wbe/deferred-promise"),t=require("@wbe/debug"),o=require("gsap"),n=require("react");function s(i){return i&&"object"==typeof i&&"default"in i?i:{default:i}}function a(){return a=Object.assign||function(i){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(i[o]=t[o])}return i},a.apply(this,arguments)}var u=/*#__PURE__*/s(t).default("AudioManager"),r=i.StateSignal(!1),d=/*#__PURE__*/function(){function i(i,t){var o=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){u("canplay"),o.canplayPromise.resolve(),o.isLoading=!1,o.isLoaded=!0},this.handleEnded=function(){u("ended"),o.isPlaying=!1,o.options.loop&&o.play()},this.handleMuteAll=function(i){i?o.mute():o.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=a({},{volume:1,loop:!1},t),u("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=e.deferredPromise(),this.load(),this.initEvent()}var t=i.prototype;return t.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},t.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.on(this.handleMuteAll))},t.play=function(){try{var i=this;return u("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?u("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},t.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},t.stop=function(){u("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},t.replay=function(){u("replay"),this.stop(),this.play()},t.mute=function(){u("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},t.unmute=function(){u("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},t.enableLoop=function(){u("loop"),this.options.loop=!0},t.disableLoop=function(){u("disable loop"),this.options.loop=!1},t.pan=function(i){u("pan",i),this.panner.pan.value=i},t.fade=function(i,e,t,o){void 0===t&&(t=1),void 0===o&&(o="none");try{var n=this;return u("fade >",i,e,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,e,t,o)).then(function(){u("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},t.fadeIn=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{var t=this;return u("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,e)).then(function(){u("fadeIn ended!")})}catch(i){return Promise.reject(i)}},t.fadeOut=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{return u("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,e)).then(function(){u("fadeOut ended!")})}catch(i){return Promise.reject(i)}},t.destroy=function(){var i;u("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.off(this.handleMuteAll)},t.processVolume=function(i,e,t,n){var s=this;void 0===t&&(t=1),void 0===n&&(n="none");var a=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(e,1));return new Promise(function(i){o.gsap.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:r,overwrite:!0,ease:n,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,u("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}();exports.AudioManager=d,exports.useAudio=function(i,e,t){void 0===t&&(t=[]);var o=n.useState(null),s=o[0],a=o[1];return n.useEffect(function(){var t=new d(i,e);return a(t),function(){t.destroy()}},t),s}; | ||
var i=require("@zouloux/signal"),e=require("@wbe/deferred-promise"),t=require("@wbe/debug"),o=require("gsap"),n=require("react");function s(i){return i&&"object"==typeof i&&"default"in i?i:{default:i}}function a(){return a=Object.assign||function(i){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(i[o]=t[o])}return i},a.apply(this,arguments)}var u=/*#__PURE__*/s(t).default("AudioManager"),r=i.StateSignal(!1),d=/*#__PURE__*/function(){function i(i,t){var o=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){u("canplay"),o.canplayPromise.resolve(),o.isLoading=!1,o.isLoaded=!0},this.handleEnded=function(){u("ended"),o.isPlaying=!1,o.options.loop&&o.play()},this.handleMuteAll=function(i){i?o.mute():o.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=a({},{volume:1,loop:!1},t),u("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=e.deferredPromise(),this.load(),this.initEvent()}var t=i.prototype;return t.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},t.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.add(this.handleMuteAll))},t.play=function(){try{var i=this;return u("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?u("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},t.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},t.stop=function(){u("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},t.replay=function(){u("replay"),this.stop(),this.play()},t.mute=function(){u("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},t.unmute=function(){u("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},t.enableLoop=function(){u("loop"),this.options.loop=!0},t.disableLoop=function(){u("disable loop"),this.options.loop=!1},t.pan=function(i){u("pan",i),this.panner.pan.value=i},t.fade=function(i,e,t,o){void 0===t&&(t=1),void 0===o&&(o="none");try{var n=this;return u("fade >",i,e,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,e,t,o)).then(function(){u("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},t.fadeIn=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{var t=this;return u("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,e)).then(function(){u("fadeIn ended!")})}catch(i){return Promise.reject(i)}},t.fadeOut=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{return u("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,e)).then(function(){u("fadeOut ended!")})}catch(i){return Promise.reject(i)}},t.destroy=function(){var i;u("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.remove(this.handleMuteAll)},t.processVolume=function(i,e,t,n){var s=this;void 0===t&&(t=1),void 0===n&&(n="none");var a=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(e,1));return new Promise(function(i){o.gsap.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:r,overwrite:!0,ease:n,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,u("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}();exports.AudioManager=d,exports.useAudio=function(i,e,t){void 0===t&&(t=[]);var o=n.useState(null),s=o[0],a=o[1];return n.useEffect(function(){var t=new d(i,e);return a(t),function(){t.destroy()}},t),s}; | ||
//# sourceMappingURL=index.js.map |
@@ -1,2 +0,2 @@ | ||
import{StateSignal as i}from"@solid-js/signal";import{deferredPromise as t}from"@wbe/deferred-promise";import s from"@wbe/debug";import{gsap as o}from"gsap";import{useState as e,useEffect as a}from"react";function n(){return n=Object.assign||function(i){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&(i[o]=s[o])}return i},n.apply(this,arguments)}const d=s("AudioManager"),h=i(!1);class u{constructor(i,s){this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=()=>{d("canplay"),this.canplayPromise.resolve(),this.isLoading=!1,this.isLoaded=!0},this.handleEnded=()=>{d("ended"),this.isPlaying=!1,this.options.loop&&this.play()},this.handleMuteAll=i=>{i?this.mute():this.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=n({},{volume:1,loop:!1},s),d("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=t(),this.load(),this.initEvent()}load(){const i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)}initEvent(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),h.on(this.handleMuteAll))}async play(){d("play",this.options),await this.canplayPromise.promise,"suspended"===this.audioCtx.state&&this.audioCtx.resume(),this.isPlaying?d("play > is already playIn, return"):(this.$audio.play(),this.isPlaying=!0)}pause(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)}stop(){d("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1}replay(){d("replay"),this.stop(),this.play()}mute(){d("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)}unmute(){d("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)}enableLoop(){d("loop"),this.options.loop=!0}disableLoop(){d("disable loop"),this.options.loop=!1}pan(i){d("pan",i),this.panner.pan.value=i}async fade(i,t,s=1,o="none"){d("fade >",i,t,this.options),this.isPlaying||this.play(),await this.processVolume(i,t,s,o),d("fade ended!",this.$audio.volume)}async fadeIn(i=1,t="none"){d("fadeIn"),this.play(),await this.processVolume(0,this.options.volume,i,t),d("fadeIn ended!")}async fadeOut(i=1,t="none"){d("fadeOut"),await this.processVolume(this.options.volume,0,i,t),d("fadeOut ended!")}destroy(){var i;d("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,h.off(this.handleMuteAll)}processVolume(i,t,s=1,e="none"){const a=Math.max(0,Math.min(i,1)),n=Math.max(0,Math.min(t,1));return new Promise(i=>{o.fromTo(this.$audio,{volume:this._volumeIsInProcess?this.$audio.volume:a},{volume:n,overwrite:!0,ease:e,duration:s,onUpdate:()=>{this._volumeIsInProcess=!0,d("this.$audio.volume",this.$audio.volume)},onComplete:()=>{this._volumeIsInProcess=!1,i()}})})}}const l=(i,t,s=[])=>{const[o,n]=e(null);return a(()=>{const s=new u(i,t);return n(s),()=>{s.destroy()}},s),o};export{u as AudioManager,l as useAudio}; | ||
import{StateSignal as i}from"@zouloux/signal";import{deferredPromise as t}from"@wbe/deferred-promise";import s from"@wbe/debug";import{gsap as o}from"gsap";import{useState as e,useEffect as a}from"react";function n(){return n=Object.assign||function(i){for(var t=1;t<arguments.length;t++){var s=arguments[t];for(var o in s)Object.prototype.hasOwnProperty.call(s,o)&&(i[o]=s[o])}return i},n.apply(this,arguments)}const d=s("AudioManager"),h=i(!1);class u{constructor(i,s){this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=()=>{d("canplay"),this.canplayPromise.resolve(),this.isLoading=!1,this.isLoaded=!0},this.handleEnded=()=>{d("ended"),this.isPlaying=!1,this.options.loop&&this.play()},this.handleMuteAll=i=>{i?this.mute():this.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=n({},{volume:1,loop:!1},s),d("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=t(),this.load(),this.initEvent()}load(){const i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)}initEvent(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),h.add(this.handleMuteAll))}async play(){d("play",this.options),await this.canplayPromise.promise,"suspended"===this.audioCtx.state&&this.audioCtx.resume(),this.isPlaying?d("play > is already playIn, return"):(this.$audio.play(),this.isPlaying=!0)}pause(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)}stop(){d("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1}replay(){d("replay"),this.stop(),this.play()}mute(){d("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)}unmute(){d("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)}enableLoop(){d("loop"),this.options.loop=!0}disableLoop(){d("disable loop"),this.options.loop=!1}pan(i){d("pan",i),this.panner.pan.value=i}async fade(i,t,s=1,o="none"){d("fade >",i,t,this.options),this.isPlaying||this.play(),await this.processVolume(i,t,s,o),d("fade ended!",this.$audio.volume)}async fadeIn(i=1,t="none"){d("fadeIn"),this.play(),await this.processVolume(0,this.options.volume,i,t),d("fadeIn ended!")}async fadeOut(i=1,t="none"){d("fadeOut"),await this.processVolume(this.options.volume,0,i,t),d("fadeOut ended!")}destroy(){var i;d("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,h.remove(this.handleMuteAll)}processVolume(i,t,s=1,e="none"){const a=Math.max(0,Math.min(i,1)),n=Math.max(0,Math.min(t,1));return new Promise(i=>{o.fromTo(this.$audio,{volume:this._volumeIsInProcess?this.$audio.volume:a},{volume:n,overwrite:!0,ease:e,duration:s,onUpdate:()=>{this._volumeIsInProcess=!0,d("this.$audio.volume",this.$audio.volume)},onComplete:()=>{this._volumeIsInProcess=!1,i()}})})}}const l=(i,t,s=[])=>{const[o,n]=e(null);return a(()=>{const s=new u(i,t);return n(s),()=>{s.destroy()}},s),o};export{u as AudioManager,l as useAudio}; | ||
//# sourceMappingURL=index.modern.js.map |
@@ -1,2 +0,2 @@ | ||
!function(i,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@solid-js/signal"),require("@wbe/deferred-promise"),require("@wbe/debug"),require("gsap"),require("react")):"function"==typeof define&&define.amd?define(["exports","@solid-js/signal","@wbe/deferred-promise","@wbe/debug","gsap","react"],e):e((i||self).audioManager={},i.signal,i.deferredPromise,i.debug,i.gsap,i.react)}(this,function(i,e,t,o,n,s){function a(i){return i&&"object"==typeof i&&"default"in i?i:{default:i}}function u(){return u=Object.assign||function(i){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(i[o]=t[o])}return i},u.apply(this,arguments)}var d=/*#__PURE__*/a(o).default("AudioManager"),r=e.StateSignal(!1),l=/*#__PURE__*/function(){function i(i,e){var o=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){d("canplay"),o.canplayPromise.resolve(),o.isLoading=!1,o.isLoaded=!0},this.handleEnded=function(){d("ended"),o.isPlaying=!1,o.options.loop&&o.play()},this.handleMuteAll=function(i){i?o.mute():o.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=u({},{volume:1,loop:!1},e),d("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=t.deferredPromise(),this.load(),this.initEvent()}var e=i.prototype;return e.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},e.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.on(this.handleMuteAll))},e.play=function(){try{var i=this;return d("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?d("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},e.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},e.stop=function(){d("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},e.replay=function(){d("replay"),this.stop(),this.play()},e.mute=function(){d("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},e.unmute=function(){d("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},e.enableLoop=function(){d("loop"),this.options.loop=!0},e.disableLoop=function(){d("disable loop"),this.options.loop=!1},e.pan=function(i){d("pan",i),this.panner.pan.value=i},e.fade=function(i,e,t,o){void 0===t&&(t=1),void 0===o&&(o="none");try{var n=this;return d("fade >",i,e,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,e,t,o)).then(function(){d("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},e.fadeIn=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{var t=this;return d("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,e)).then(function(){d("fadeIn ended!")})}catch(i){return Promise.reject(i)}},e.fadeOut=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{return d("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,e)).then(function(){d("fadeOut ended!")})}catch(i){return Promise.reject(i)}},e.destroy=function(){var i;d("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.off(this.handleMuteAll)},e.processVolume=function(i,e,t,o){var s=this;void 0===t&&(t=1),void 0===o&&(o="none");var a=Math.max(0,Math.min(i,1)),u=Math.max(0,Math.min(e,1));return new Promise(function(i){n.gsap.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:u,overwrite:!0,ease:o,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,d("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}();i.AudioManager=l,i.useAudio=function(i,e,t){void 0===t&&(t=[]);var o=s.useState(null),n=o[0],a=o[1];return s.useEffect(function(){var t=new l(i,e);return a(t),function(){t.destroy()}},t),n}}); | ||
!function(i,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("@zouloux/signal"),require("@wbe/deferred-promise"),require("@wbe/debug"),require("gsap"),require("react")):"function"==typeof define&&define.amd?define(["exports","@zouloux/signal","@wbe/deferred-promise","@wbe/debug","gsap","react"],e):e((i||self).audioManager={},i.signal,i.deferredPromise,i.debug,i.gsap,i.react)}(this,function(i,e,t,o,n,s){function a(i){return i&&"object"==typeof i&&"default"in i?i:{default:i}}function u(){return u=Object.assign||function(i){for(var e=1;e<arguments.length;e++){var t=arguments[e];for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&(i[o]=t[o])}return i},u.apply(this,arguments)}var d=/*#__PURE__*/a(o).default("AudioManager"),r=e.StateSignal(!1),l=/*#__PURE__*/function(){function i(i,e){var o=this;this.audioFileUrl=void 0,this.options=void 0,this.audioCtx=void 0,this.panner=void 0,this.listener=void 0,this.$audio=void 0,this.track=void 0,this.isLoading=void 0,this.isLoaded=void 0,this.isPlaying=void 0,this.isMuted=void 0,this.canplayPromise=void 0,this.handleCanplay=function(){d("canplay"),o.canplayPromise.resolve(),o.isLoading=!1,o.isLoaded=!0},this.handleEnded=function(){d("ended"),o.isPlaying=!1,o.options.loop&&o.play()},this.handleMuteAll=function(i){i?o.mute():o.unmute()},this._volumeIsInProcess=void 0,this.audioFileUrl=i,this.options=u({},{volume:1,loop:!1},e),d("options",this.options),this.isPlaying=!1,this.isLoading=!0,this.isLoaded=!1,this.isMuted=!1,this.canplayPromise=t.deferredPromise(),this.load(),this.initEvent()}var e=i.prototype;return e.load=function(){var i=window.AudioContext||window.webkitAudioContext;this.audioCtx=new i,this.panner=new StereoPannerNode(this.audioCtx,{pan:0}),this.$audio=new Audio(this.audioFileUrl),this.track=this.audioCtx.createMediaElementSource(this.$audio),this.track.connect(this.panner).connect(this.audioCtx.destination)},e.initEvent=function(){this.$audio&&(this.$audio.addEventListener("canplay",this.handleCanplay),this.$audio.addEventListener("ended",this.handleEnded),r.add(this.handleMuteAll))},e.play=function(){try{var i=this;return d("play",i.options),Promise.resolve(i.canplayPromise.promise).then(function(){"suspended"===i.audioCtx.state&&i.audioCtx.resume(),i.isPlaying?d("play > is already playIn, return"):(i.$audio.play(),i.isPlaying=!0)})}catch(i){return Promise.reject(i)}},e.pause=function(){this.isPlaying&&(this.$audio.pause(),this.isPlaying=!1)},e.stop=function(){d("stop"),this.$audio.pause(),this.$audio.currentTime=0,this.isPlaying=!1},e.replay=function(){d("replay"),this.stop(),this.play()},e.mute=function(){d("mute",this.$audio.volume),this.isMuted||(this.$audio.volume=0,this.isMuted=!0)},e.unmute=function(){d("unmute",this.$audio.volume),this.isMuted&&(this.$audio.volume=this.options.volume,this.isMuted=!1)},e.enableLoop=function(){d("loop"),this.options.loop=!0},e.disableLoop=function(){d("disable loop"),this.options.loop=!1},e.pan=function(i){d("pan",i),this.panner.pan.value=i},e.fade=function(i,e,t,o){void 0===t&&(t=1),void 0===o&&(o="none");try{var n=this;return d("fade >",i,e,n.options),n.isPlaying||n.play(),Promise.resolve(n.processVolume(i,e,t,o)).then(function(){d("fade ended!",n.$audio.volume)})}catch(i){return Promise.reject(i)}},e.fadeIn=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{var t=this;return d("fadeIn"),t.play(),Promise.resolve(t.processVolume(0,t.options.volume,i,e)).then(function(){d("fadeIn ended!")})}catch(i){return Promise.reject(i)}},e.fadeOut=function(i,e){void 0===i&&(i=1),void 0===e&&(e="none");try{return d("fadeOut"),Promise.resolve(this.processVolume(this.options.volume,0,i,e)).then(function(){d("fadeOut ended!")})}catch(i){return Promise.reject(i)}},e.destroy=function(){var i;d("destroy"),this.pause(),null==(i=this.track)||i.disconnect(),this.$audio=null,r.remove(this.handleMuteAll)},e.processVolume=function(i,e,t,o){var s=this;void 0===t&&(t=1),void 0===o&&(o="none");var a=Math.max(0,Math.min(i,1)),u=Math.max(0,Math.min(e,1));return new Promise(function(i){n.gsap.fromTo(s.$audio,{volume:s._volumeIsInProcess?s.$audio.volume:a},{volume:u,overwrite:!0,ease:o,duration:t,onUpdate:function(){s._volumeIsInProcess=!0,d("this.$audio.volume",s.$audio.volume)},onComplete:function(){s._volumeIsInProcess=!1,i()}})})},i}();i.AudioManager=l,i.useAudio=function(i,e,t){void 0===t&&(t=[]);var o=s.useState(null),n=o[0],a=o[1];return s.useEffect(function(){var t=new l(i,e);return a(t),function(){t.destroy()}},t),n}}); | ||
//# sourceMappingURL=index.umd.js.map |
{ | ||
"name": "@cher-ami/audio-manager", | ||
"description": "A simple web audio manager", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"author": "cher-ami", | ||
@@ -42,3 +42,3 @@ "license": "MIT", | ||
"@wbe/deferred-promise": "^2.4.0", | ||
"@solid-js/signal": "^1.0.2" | ||
"@zouloux/signal": "^0.2.4" | ||
}, | ||
@@ -45,0 +45,0 @@ "peerDependencies": { |
280
README.md
@@ -1,1 +0,279 @@ | ||
# audio manager | ||
# Audio manager | ||
A simple web audio manager for the browser. | ||
## Dependencies | ||
- [@wbe/debug](https://www.npmjs.com/package/@wbe/debug) | ||
- [@wbe/deferred-promise](https://www.npmjs.com/package/@wbe/) | ||
- [@zouloux/signal](https://www.npmjs.com/package/@zouloux/signal) | ||
- [gsap](https://greensock.com/gsap/) | ||
## Installation | ||
```shell | ||
npm install @cher-ami/audio-manager | ||
``` | ||
## Usage | ||
Create new AudioManager instance: | ||
```js | ||
import { AudioManager } from "@cher-ami/audio-manager" | ||
const sound = new AudioManager("sound.mp3") | ||
sound.play() | ||
sound.pause() | ||
sound.stop() | ||
sound.replay() | ||
sound.mute() | ||
sound.unmute() | ||
sound.enableLoop() | ||
sound.disableLoop() | ||
sound.pan() | ||
sound.fade() | ||
sound.fadeIn() | ||
sound.fadeOut() | ||
sound.destroy() | ||
``` | ||
Multiples instances can be created together: | ||
```js | ||
import { AudioManager } from "@cher-ami/audio-manager" | ||
const sound1 = new AudioManager("sound.mp3") | ||
const sound2 = new AudioManager("sound.mp3") | ||
sound1.play() | ||
sound2.play() | ||
// ... | ||
``` | ||
## API | ||
### AudioManager | ||
```ts | ||
AudioManager(audioFileUrl: string, options: { | ||
volume?: number; | ||
loop?: boolean; | ||
}) | ||
``` | ||
### play | ||
`play():Promise<void>` | ||
Play the sound. | ||
```js | ||
// await sound is loaded before playing it and continue | ||
await sound.play() | ||
``` | ||
### pause | ||
`pause(): void` | ||
Pause the sound. | ||
```js | ||
sound.pause() | ||
``` | ||
### stop | ||
`stop(): void` | ||
Stop the sound. It will be reset to the beginning. | ||
```js | ||
sound.stop() | ||
``` | ||
### replay | ||
`replay(): void` | ||
Will simply stop and play the sound. | ||
```js | ||
sound.replay() | ||
``` | ||
### mute | ||
`mute(): void` | ||
Mute the sound. | ||
```js | ||
sound.mute() | ||
``` | ||
### unmute | ||
`unmute(): void` | ||
Unmute the sound if he is muted. | ||
```js | ||
sound.unmute() | ||
``` | ||
### enableLoop | ||
`enableLoop(): void` | ||
During the sound is playing, enable looping on it. | ||
```js | ||
sound.enableLoop() | ||
``` | ||
### disableLoop | ||
`disableLoop(): void` | ||
During the sound is playing, disable looping on it. | ||
```js | ||
sound.disableLoop() | ||
``` | ||
### pan | ||
`pan(vPan: number): void` | ||
Used to place the sound on a device supporting stereo sound. | ||
If using -1 to 1 range. -1 would be far left & 1 far right. | ||
```js | ||
sound.pan(-1) // left | ||
sound.pan(0) // center | ||
sound.pan(1) // right | ||
``` | ||
### fade | ||
`fade(from: number, to: number, duration = 1, ease = "none"): Promise<any>` | ||
Process fade between 2 points: | ||
- `from` 1 = 100%, 0 = 0% | ||
- `to` 1 = 100%, 0 = 0% | ||
- `duration`: default is `1` | ||
- `ease`: default is `none`, this is gsap easing string. | ||
```js | ||
// fade from 0% to 60% of the volume | ||
this.fade(0, 0.6) | ||
// also you can wait for the fade to finish | ||
await this.fade(0, 0.6) | ||
// ... do sothing after fade | ||
``` | ||
### fadeIn | ||
`fadeIn(duration = 1, ease = "none"): Promise<any>` | ||
FadeIn from the current volum to 100%. | ||
```js | ||
this.fadeIn() | ||
// or | ||
await this.fadeIn() | ||
``` | ||
### fadeOut | ||
`fadeOut(duration = 1, ease = "none"): Promise<any>` | ||
FadeOut from the current volum to 0%. | ||
```js | ||
this.fadeOut() | ||
// or | ||
await this.fadeOut() | ||
``` | ||
### destroy | ||
`destroy(): void` | ||
Destroy current instance | ||
```js | ||
this.destroy() | ||
``` | ||
## Golbal mute | ||
It's possible to mute all the paying sounds with global event emitter. | ||
```js | ||
import { MUTE_AUDIO_SIGNAL } from "@cher-ami/audio-manager" | ||
// mute all sounds | ||
MUTE_AUDIO_SIGNAL.dispatch(true) | ||
// unmute all sounds | ||
MUTE_AUDIO_SIGNAL.dispatch(false) | ||
``` | ||
## React usage | ||
Audio manager come with react hooks to use it in react components. | ||
### useAudio | ||
```js | ||
const App = () => { | ||
// create audio manager instance with useAudio | ||
const sound = useAudio("audio.mp3", { loop: true, volume: 0.5 }) | ||
// use API in handlers | ||
return ( | ||
<div> | ||
<button onClick={sound.play}>Play</button> | ||
<button onClick={sound.pause}>Pause</button> | ||
</div> | ||
) | ||
} | ||
``` | ||
### useMuteAllAudio | ||
Mute all sounds with `useMuteAllAudio` | ||
```js | ||
const [isMuted, setIsMuted] = useMuteAllAudio() | ||
useEffect(() => { | ||
// do something when isMuted state change | ||
}, [isMuted]) | ||
// use API in handlers | ||
return ( | ||
<div> | ||
<button onClick={setIsMuted(true)}>mute</button> | ||
<button onClick={setIsMuted(false)}>unmute</button> | ||
</div> | ||
) | ||
``` | ||
## Example | ||
Start example | ||
```shell | ||
npm run dev:example | ||
``` | ||
## Credits | ||
cher-ami |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
78378
280
14
163
1
+ Added@zouloux/signal@^0.2.4
+ Added@zouloux/signal@0.2.4(transitive)
- Removed@solid-js/signal@^1.0.2
- Removed@solid-js/signal@1.0.3(transitive)