diff options
Diffstat (limited to 'frontend/app/.client')
| -rw-r--r-- | frontend/app/.client/audio/AudioController.ts | 105 | ||||
| -rw-r--r-- | frontend/app/.client/audio/SoundEffect.ts | 47 |
2 files changed, 0 insertions, 152 deletions
diff --git a/frontend/app/.client/audio/AudioController.ts b/frontend/app/.client/audio/AudioController.ts deleted file mode 100644 index 296f685..0000000 --- a/frontend/app/.client/audio/AudioController.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { SoundEffect, getFileUrl } from "./SoundEffect"; - -export class AudioController { - audioElements: Record<SoundEffect, HTMLAudioElement | null>; - - constructor() { - this.audioElements = { - finish: null, - winner_1: null, - winner_2: null, - good_1: null, - good_2: null, - good_3: null, - good_4: null, - new_score_1: null, - new_score_2: null, - new_score_3: null, - compile_error_1: null, - compile_error_2: null, - }; - } - - loadAll(): Promise<void> { - return new Promise((resolve) => { - const files = Object.keys(this.audioElements).map( - (se) => [se as SoundEffect, getFileUrl(se as SoundEffect)] as const, - ); - const totalCount = files.length; - let loadedCount = 0; - - files.forEach(([se, fileUrl]) => { - const audio = new Audio(fileUrl); - - audio.addEventListener( - "canplaythrough", - () => { - loadedCount++; - this.audioElements[se] = audio; - if (loadedCount === totalCount) { - resolve(); - } - }, - { once: true }, - ); - - audio.addEventListener("error", () => { - console.log(`Failed to load audio file: ${fileUrl}`); - // Ignore the error and continue loading other files. - }); - }); - }); - } - - async playDummySoundEffect(): Promise<void> { - const audio = this.audioElements["good_1"]; - if (!audio) { - return; - } - audio.muted = true; - audio.currentTime = 0; - await audio.play(); - audio.muted = false; - } - - async playSoundEffect(soundEffect: SoundEffect): Promise<void> { - const audio = this.audioElements[soundEffect]; - if (!audio) { - return; - } - audio.currentTime = 0; - await audio.play(); - } - - async playSoundEffectFinish(): Promise<void> { - await this.playSoundEffect("finish"); - } - - async playSoundEffectWinner(winner: 1 | 2): Promise<void> { - await this.playSoundEffect(`winner_${winner}`); - } - - async playSoundEffectGood(): Promise<void> { - const variant = Math.floor(Math.random() * 4) + 1; - if (variant !== 1 && variant !== 2 && variant !== 3 && variant !== 4) { - return; // unreachable - } - return await this.playSoundEffect(`good_${variant}`); - } - - async playSoundEffectNewScore(): Promise<void> { - const variant = Math.floor(Math.random() * 3) + 1; - if (variant !== 1 && variant !== 2 && variant !== 3) { - return; // unreachable - } - return await this.playSoundEffect(`new_score_${variant}`); - } - - async playSoundEffectCompileError(): Promise<void> { - const variant = Math.floor(Math.random() * 2) + 1; - if (variant !== 1 && variant !== 2) { - return; // unreachable - } - return await this.playSoundEffect(`compile_error_${variant}`); - } -} diff --git a/frontend/app/.client/audio/SoundEffect.ts b/frontend/app/.client/audio/SoundEffect.ts deleted file mode 100644 index 7e40da6..0000000 --- a/frontend/app/.client/audio/SoundEffect.ts +++ /dev/null @@ -1,47 +0,0 @@ -export type SoundEffect = - | "finish" - | "winner_1" - | "winner_2" - | "good_1" - | "good_2" - | "good_3" - | "good_4" - | "new_score_1" - | "new_score_2" - | "new_score_3" - | "compile_error_1" - | "compile_error_2"; - -const BASE_URL = - process.env.NODE_ENV === "development" - ? `http://localhost:8002/iosdc-japan/2024/code-battle/files/audio` - : `/iosdc-japan/2024/code-battle/files/audio`; - -export function getFileUrl(soundEffect: SoundEffect): string { - switch (soundEffect) { - case "finish": - return `${BASE_URL}/EX_33.wav`; - case "winner_1": - return `${BASE_URL}/EX_34.wav`; - case "winner_2": - return `${BASE_URL}/EX_35.wav`; - case "good_1": - return `${BASE_URL}/EX_36.wav`; - case "good_2": - return `${BASE_URL}/EX_37.wav`; - case "good_3": - return `${BASE_URL}/EX_38.wav`; - case "good_4": - return `${BASE_URL}/EX_39.wav`; - case "new_score_1": - return `${BASE_URL}/EX_40.wav`; - case "new_score_2": - return `${BASE_URL}/EX_41.wav`; - case "new_score_3": - return `${BASE_URL}/EX_42.wav`; - case "compile_error_1": - return `${BASE_URL}/EX_43.wav`; - case "compile_error_2": - return `${BASE_URL}/EX_44.wav`; - } -} |
