release/0.1.0 #18

Merged
ayoub merged 68 commits from release/0.1.0 into main 2026-06-11 18:36:42 +00:00
4 changed files with 36 additions and 0 deletions
Showing only changes of commit db0100e272 - Show all commits

View 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).

Binary file not shown.

View file

@ -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
View 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(() => {})
}