diff options
Diffstat (limited to 'packages/client/src/scripts/sound.ts')
| -rw-r--r-- | packages/client/src/scripts/sound.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/packages/client/src/scripts/sound.ts b/packages/client/src/scripts/sound.ts new file mode 100644 index 0000000000..2b8279b3df --- /dev/null +++ b/packages/client/src/scripts/sound.ts @@ -0,0 +1,34 @@ +import { ColdDeviceStorage } from '@/store'; + +const cache = new Map<string, HTMLAudioElement>(); + +export function getAudio(file: string, useCache = true): HTMLAudioElement { + let audio: HTMLAudioElement; + if (useCache && cache.has(file)) { + audio = cache.get(file); + } else { + audio = new Audio(`/client-assets/sounds/${file}.mp3`); + if (useCache) cache.set(file, audio); + } + return audio; +} + +export function setVolume(audio: HTMLAudioElement, volume: number): HTMLAudioElement { + const masterVolume = ColdDeviceStorage.get('sound_masterVolume'); + audio.volume = masterVolume - ((1 - volume) * masterVolume); + return audio; +} + +export function play(type: string) { + const sound = ColdDeviceStorage.get('sound_' + type as any); + if (sound.type == null) return; + playFile(sound.type, sound.volume); +} + +export function playFile(file: string, volume: number) { + const masterVolume = ColdDeviceStorage.get('sound_masterVolume'); + if (masterVolume === 0) return; + + const audio = setVolume(getAudio(file), volume); + audio.play(); +} |