feat: add sound effects engine (Web Audio API) #17
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feature/5-sound-effects"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #5
Summary
Added a procedural sound effects engine using the Web Audio API. No external audio files needed — all sounds are generated in real-time.
Changes
playPlace()— short sine "blip" for pixel placementplayPlaceVariety()— randomized pitch for natural feelplayPower()— dual-oscillator power-up soundplayCooldown()— low sawtooth "buzzer"playError()— triangle wave "bloop"Features
Tests
Code Review — REQUEST_CHANGES
Bon travail sur l'engine Web Audio, c'est clean dans l'ensemble. Quelques issues à régler avant merge:
🔴 Bugs
1. Double volume scaling (quadratic)
Les sons individuels multiplient par
volume * 0.4puis connectent àmasterGainqui a déjàgain.value = volume. Résultat: le volume effectif estvolume² * coefficientau lieu devolume * coefficient. L'effet est non-linéaire et le slider va se comporter weird.Fix: utiliser un coeff fixe dans les play* functions (ex:
0.4) et laissermasterGaingérer le volume user.2. PR description dit « State persisted in localStorage » — mais y'a ZERO code localStorage
Ni le toggle mute ni le volume ne sont sauvegardés. À chaque refresh, l'utilisateur perd ses prefs. Soit implémenter le localStorage, soit retirer la claim de la PR.
🟡 Minor
3.
playPlace()est dead code — défini mais jamais appelé dans app.js. SeulplayPlaceVariety()est utilisé. Soit l'utiliser, soit le retirer pour éviter la confusion.4.
lastStatevariable dansinitSound— assigné mais jamais lu. Dead variable.5. Volume slider sync — Le slider HTML a
value="30"et le JS default est0.3. Ça marche par coïncidence, mais si quelqu'un change le default dans le JS, les deux seront désynchronisés au load. Le JS devrait lire la valeur initiale du slider (ou vice-versa).Le design de l'IIFE module est propre, les sons procéduraux sont bien pensés. Fix le bug de volume et le localStorage, et c'est bon à merger. 🎵