1 changed files with 77 additions and 0 deletions
@ -0,0 +1,77 @@ |
|||||
|
import { sound } from "@pixi/sound"; |
||||
|
import { logger } from "@/core/Logger"; |
||||
|
|
||||
|
class SoundManager { |
||||
|
private volume: number = 1; |
||||
|
private muted: boolean = false; |
||||
|
|
||||
|
constructor() { |
||||
|
sound.volume = this.volume; |
||||
|
} |
||||
|
|
||||
|
add(name: string, url: string, options?: { singleInstance?: boolean; autoPlay?: boolean }): void { |
||||
|
sound.add(name, { |
||||
|
url, |
||||
|
singleInstance: options?.singleInstance ?? true, |
||||
|
autoPlay: options?.autoPlay ?? false, |
||||
|
}); |
||||
|
logger.debug(`Sound: added "${name}"`); |
||||
|
} |
||||
|
|
||||
|
play(name: string): void { |
||||
|
if (this.muted) return; |
||||
|
sound.play(name); |
||||
|
} |
||||
|
|
||||
|
stop(name: string): void { |
||||
|
sound.stop(name); |
||||
|
} |
||||
|
|
||||
|
pause(name: string): void { |
||||
|
sound.pause(name); |
||||
|
} |
||||
|
|
||||
|
pauseAll(): void { |
||||
|
sound.pauseAll(); |
||||
|
} |
||||
|
|
||||
|
resumeAll(): void { |
||||
|
if (!this.muted) { |
||||
|
sound.resumeAll(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
setVolume(volume: number): void { |
||||
|
this.volume = Math.max(0, Math.min(1, volume)); |
||||
|
sound.volume = this.volume; |
||||
|
} |
||||
|
|
||||
|
getVolume(): number { |
||||
|
return this.volume; |
||||
|
} |
||||
|
|
||||
|
mute(): void { |
||||
|
this.muted = true; |
||||
|
sound.muteAll(); |
||||
|
} |
||||
|
|
||||
|
unmute(): void { |
||||
|
this.muted = false; |
||||
|
sound.unmuteAll(); |
||||
|
} |
||||
|
|
||||
|
isMuted(): boolean { |
||||
|
return this.muted; |
||||
|
} |
||||
|
|
||||
|
exists(name: string): boolean { |
||||
|
return sound.exists(name); |
||||
|
} |
||||
|
|
||||
|
clear(): void { |
||||
|
sound.removeAll(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
export const soundManager = new SoundManager(); |
||||
|
export default soundManager; |
||||
Loading…
Reference in new issue