release/0.1.0 #18
4 changed files with 36 additions and 0 deletions
10
apps/web/src/assets/sounds/README.md
Normal file
10
apps/web/src/assets/sounds/README.md
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# Sons du jeu
|
||||
|
||||
Dépose ici les effets sonores (détectés automatiquement au build).
|
||||
|
||||
- **`victory.mp3`** → jingle joué sur l'écran de fin de partie.
|
||||
(formats acceptés : `.mp3`, `.ogg`, `.wav` — nomme le fichier `victory.*`)
|
||||
|
||||
Si aucun fichier n'est présent, le son est simplement ignoré (pas d'erreur).
|
||||
|
||||
> ⚠️ N'utilise que des sons dont tu as les droits (libres / CC0).
|
||||
BIN
apps/web/src/assets/sounds/victory.mp3
Normal file
BIN
apps/web/src/assets/sounds/victory.mp3
Normal file
Binary file not shown.
|
|
@ -8,6 +8,7 @@ import { Button } from "@workspace/ui/components/button"
|
|||
import { useRoomStore } from "@/store/room"
|
||||
import { Avatar } from "@/components/avatar"
|
||||
import { celebrate } from "@/lib/confetti"
|
||||
import { playVictory } from "@/lib/sound"
|
||||
|
||||
/** Lien de recherche Spotify (le titre vidéo contient en général artiste + chanson). */
|
||||
function spotifySearch(track: BlindtestTrackInfo): string {
|
||||
|
|
@ -132,6 +133,7 @@ export function GameEndView({ snapshot }: { snapshot: RoomSnapshot }) {
|
|||
if (!celebrated.current) {
|
||||
celebrated.current = true
|
||||
celebrate()
|
||||
playVictory()
|
||||
}
|
||||
}, [])
|
||||
|
||||
|
|
|
|||
24
apps/web/src/lib/sound.ts
Normal file
24
apps/web/src/lib/sound.ts
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
// Sons du jeu. Dépose les fichiers dans src/assets/sounds/ (voir le README).
|
||||
// Tout est optionnel : si le fichier est absent, la lecture est ignorée.
|
||||
|
||||
const victorySources = Object.values(
|
||||
import.meta.glob("../assets/sounds/victory.{mp3,ogg,wav}", {
|
||||
eager: true,
|
||||
import: "default",
|
||||
})
|
||||
) as string[]
|
||||
|
||||
const victoryUrl: string | null = victorySources[0] ?? null
|
||||
let victoryAudio: HTMLAudioElement | null = null
|
||||
|
||||
/** Joue le jingle de victoire (si présent). Nécessite une interaction préalable. */
|
||||
export function playVictory(volume = 0.6): void {
|
||||
if (!victoryUrl) {
|
||||
return
|
||||
}
|
||||
victoryAudio ??= new Audio(victoryUrl)
|
||||
victoryAudio.volume = volume
|
||||
victoryAudio.currentTime = 0
|
||||
// L'autoplay peut être bloqué tant qu'aucun geste utilisateur n'a eu lieu.
|
||||
void victoryAudio.play().catch(() => {})
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue