A simple Howler wrapper.
npm install @cher-ami/audio-manager
Create new AudioManager instance:
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.fade()
sound.fadeIn()
sound.fadeOut()
sound.destroy()
Multiples instances can be created together:
import { AudioManager } from "@cher-ami/audio-manager"
const sound1 = new AudioManager("sound.mp3")
const sound2 = new AudioManager("sound.mp3")
sound1.play()
sound2.play()
// ...
AudioManager(audioFileUrl: string, options: {
volume?: number;
loop?: boolean;
})
play():Promise<void>
Play the sound.
// await sound is loaded before playing it and continue
await sound.play()
pause(): void
Pause the sound.
sound.pause()
stop(): void
Stop the sound. It will be reset to the beginning.
sound.stop()
replay(): void
Will simply stop and play the sound.
sound.replay()
mute(): void
Mute the sound.
sound.mute()
unmute(): void
Unmute the sound if he is muted.
sound.unmute()
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 is1
ease
: default isnone
, this is gsap easing string.
// 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(duration = 1, ease = "none"): Promise<void>
FadeIn from the current volum to 100%.
this.fadeIn()
// or
await this.fadeIn()
fadeOut(duration = 1, ease = "none"): Promise<void>
FadeOut from the current volum to 0%.
this.fadeOut()
// or
await this.fadeOut()
destroy(): void
Destroy current instance
this.destroy()
It's possible to mute all the playing sounds with global event emitter.
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)
Audio manager come with react hooks to use it in react components.
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>
)
}
Mute all sounds with useMuteAllAudio
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>
)
Start example
npm run dev:example
cher-ami