From 2d7001105d4b7fe9bc6c956090ec5323e6290c67 Mon Sep 17 00:00:00 2001 From: Denis Defolie Date: Sun, 11 Oct 2026 22:57:37 +0200 Subject: [PATCH] Add sound effects, ambient music and volume mixing (0.5.0) Co-Authored-By: Claude Sonnet 5.5 --- CLAUDE.md | 1 + Makefile | 5 +- README-EN.md | 2 +- README.md | 2 +- assets/CREDITS.md | 1 + assets/audio/music/forest.ogg | Bin 0 -> 77028 bytes assets/audio/music/forest.ogg.import | 19 +++ assets/audio/music/marsh.ogg | Bin 0 -> 80266 bytes assets/audio/music/marsh.ogg.import | 19 +++ assets/audio/sfx/click.ogg | Bin 0 -> 4012 bytes assets/audio/sfx/click.ogg.import | 19 +++ assets/audio/sfx/fanfare.ogg | Bin 0 -> 12932 bytes assets/audio/sfx/fanfare.ogg.import | 19 +++ assets/audio/sfx/star.ogg | Bin 0 -> 6296 bytes assets/audio/sfx/star.ogg.import | 19 +++ assets/audio/sfx/success.ogg | Bin 0 -> 7459 bytes assets/audio/sfx/success.ogg.import | 19 +++ assets/audio/sfx/try_again.ogg | Bin 0 -> 6157 bytes assets/audio/sfx/try_again.ogg.import | 19 +++ autoload/audio_manager.gd | 106 ++++++++++++-- autoload/settings_manager.gd | 26 +++- data/localization/fr.json | 6 +- docs/specs/decisions.md | 12 ++ docs/testing/manual-checklist.md | 2 + project.godot | 2 +- scenes/exercises/exercise_host.gd | 2 + scenes/profiles/profile_select.gd | 1 + scenes/ui/reward_screen.gd | 8 ++ scenes/ui/settings.gd | 37 ++++- scenes/ui/settings.tscn | 45 +++++- scenes/world/world_map.gd | 1 + scripts/audio/audio_buses.gd | 20 +++ scripts/audio/audio_buses.gd.uid | 1 + scripts/audio/sound_catalog.gd | 27 ++++ scripts/audio/sound_catalog.gd.uid | 1 + scripts/settings/app_settings.gd | 6 + tests/audio/test_sound_catalog.gd | 44 ++++++ tests/audio/test_sound_catalog.gd.uid | 1 + tests/settings/test_app_settings.gd | 7 + tools/generate_sounds.py | 192 ++++++++++++++++++++++++++ 40 files changed, 665 insertions(+), 26 deletions(-) create mode 100644 assets/audio/music/forest.ogg create mode 100644 assets/audio/music/forest.ogg.import create mode 100644 assets/audio/music/marsh.ogg create mode 100644 assets/audio/music/marsh.ogg.import create mode 100644 assets/audio/sfx/click.ogg create mode 100644 assets/audio/sfx/click.ogg.import create mode 100644 assets/audio/sfx/fanfare.ogg create mode 100644 assets/audio/sfx/fanfare.ogg.import create mode 100644 assets/audio/sfx/star.ogg create mode 100644 assets/audio/sfx/star.ogg.import create mode 100644 assets/audio/sfx/success.ogg create mode 100644 assets/audio/sfx/success.ogg.import create mode 100644 assets/audio/sfx/try_again.ogg create mode 100644 assets/audio/sfx/try_again.ogg.import create mode 100644 scripts/audio/audio_buses.gd create mode 100644 scripts/audio/audio_buses.gd.uid create mode 100644 scripts/audio/sound_catalog.gd create mode 100644 scripts/audio/sound_catalog.gd.uid create mode 100644 tests/audio/test_sound_catalog.gd create mode 100644 tests/audio/test_sound_catalog.gd.uid create mode 100644 tools/generate_sounds.py diff --git a/CLAUDE.md b/CLAUDE.md index 4027865..88af383 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -18,6 +18,7 @@ Le `Makefile` est le seul point d'entrée pour les opérations système. Tenir c - `make check` : lint + validate-data + test (à passer avant chaque commit) - `make content-review` : régénère `docs/review/content-review.md` à partir de `data/` - `make generate-dictation-audio` : génère l'audio provisoire des dictées (voix neuronale Piper via `.venv`, `ffmpeg` requis sur la machine) dans `assets/audio/dictations/`, sans écraser l'existant (`--force` pour régénérer) +- `make generate-sounds` : génère les effets sonores et musiques d'ambiance (synthèse procédurale numpy + `ffmpeg`) dans `assets/audio/sfx/` et `assets/audio/music/`, sans écraser l'existant (`--force` pour régénérer) - `make export-linux` / `make export-windows` : exports dans `build/` - `make screenshot SCENE=… OUT=… ARGS=…` : capture le rendu réel d'une scène dans une fenêtre (outil de développement, ouvre brièvement une fenêtre) - `make package` : réexporte puis produit les archives distribuables (exécutable unique + licence + crédits + notice) et `SHA256SUMS` dans `dist/` diff --git a/Makefile b/Makefile index a9cc21f..a29a65c 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ PYRIGHT := $(VENV)/bin/pyright PYTHON := $(VENV)/bin/python3 GD_SOURCES := autoload scripts tests -.PHONY: setup run lint format validate-data test check content-review generate-dictation-audio export-linux export-windows package screenshot +.PHONY: setup run lint format validate-data test check content-review generate-dictation-audio generate-sounds export-linux export-windows package screenshot setup: tools/setup.sh @@ -35,6 +35,9 @@ content-review: generate-dictation-audio: $(PYTHON) tools/generate_dictation_audio.py +generate-sounds: + $(PYTHON) tools/generate_sounds.py + export-linux: mkdir -p build/linux $(GODOT_BIN) --headless --path . --export-release "Linux" build/linux/aventuriers_des_mots.x86_64 diff --git a/README-EN.md b/README-EN.md index 47611f3..efad594 100644 --- a/README-EN.md +++ b/README-EN.md @@ -2,7 +2,7 @@ An educational French-language game for 7-9 year olds (French grades CE1-CE2): an offline 2D adventure with an explorable map, a guide character, and grammar, spelling, and dictation exercises. -Open source project, in development. Current status: version 0.4.0, playable offline on Linux and Windows — profiles, saves (with export and restore in the adult area), stars and an item collection, settings (volume, text size, animations), a progress dashboard for adults, three exercise types (multiple choice, sentence correction, dictation), a CE1 chapter on noun-group agreement (3 rules) and a CE2 chapter on grammatical homophones (a/à, et/est, son/sont, on/ont), 21 missions. All pedagogical content is still `draft` (awaiting validation) and dictation voices are placeholders (see `assets/CREDITS.md`; see `docs/specs/decisions.md` for scoping decisions and `docs/specs/cahier-des-charges.md` for the full specification, both in French — this is a French-curriculum product). +Open source project, in development. Current status: version 0.5.0, playable offline on Linux and Windows — profiles, saves (with export and restore in the adult area), stars and an item collection, sound effects and music, settings (volumes, text size, animations), a progress dashboard for adults, three exercise types (multiple choice, sentence correction, dictation), a CE1 chapter on noun-group agreement (3 rules) and a CE2 chapter on grammatical homophones (a/à, et/est, son/sont, on/ont), 21 missions. All pedagogical content is still `draft` (awaiting validation) and dictation voices are placeholders (see `assets/CREDITS.md`; see `docs/specs/decisions.md` for scoping decisions and `docs/specs/cahier-des-charges.md` for the full specification, both in French — this is a French-curriculum product). ## Tech stack diff --git a/README.md b/README.md index d030db4..976e1cf 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Jeu éducatif de français pour les CE1-CE2 (7-9 ans) : une aventure 2D hors ligne, avec une carte à explorer, un personnage guide, et des exercices de grammaire, d'orthographe et de dictées. -Projet open source, en développement. Statut actuel : version 0.4.0, jouable hors ligne sur Linux et Windows — profils, sauvegardes (avec export et restauration dans l'espace adulte), étoiles et collection d'objets, réglages (volume, taille du texte, animations), tableau de progrès pour l'adulte, trois types d'exercices (choix multiple, correction de phrase, dictée), chapitre CE1 « accords dans le groupe nominal » (3 règles) et chapitre CE2 « homophones grammaticaux » (a/à, et/est, son/sont, on/ont), 21 missions. Contenu pédagogique entièrement en brouillon (`draft`, à valider) et voix des dictées provisoires (voir `assets/CREDITS.md` ; voir `docs/specs/decisions.md` pour les décisions de cadrage et `docs/specs/cahier-des-charges.md` pour la spécification complète). +Projet open source, en développement. Statut actuel : version 0.5.0, jouable hors ligne sur Linux et Windows — profils, sauvegardes (avec export et restauration dans l'espace adulte), étoiles et collection d'objets, sons et musique, réglages (volumes, taille du texte, animations), tableau de progrès pour l'adulte, trois types d'exercices (choix multiple, correction de phrase, dictée), chapitre CE1 « accords dans le groupe nominal » (3 règles) et chapitre CE2 « homophones grammaticaux » (a/à, et/est, son/sont, on/ont), 21 missions. Contenu pédagogique entièrement en brouillon (`draft`, à valider) et voix des dictées provisoires (voir `assets/CREDITS.md` ; voir `docs/specs/decisions.md` pour les décisions de cadrage et `docs/specs/cahier-des-charges.md` pour la spécification complète). ## Pile technique diff --git a/assets/CREDITS.md b/assets/CREDITS.md index df9f4bd..9019faa 100644 --- a/assets/CREDITS.md +++ b/assets/CREDITS.md @@ -7,6 +7,7 @@ Tous les graphismes et sons actuels sont provisoires et crees pour ce projet ; s | `icon.svg` | Forme geometrique simple, creee pour ce projet | AGPL-3.0 (code et assets du depot) | | `fonts/AtkinsonHyperlegible-*.ttf` | Atkinson Hyperlegible, police conçue pour la lisibilité (Braille Institute) | SIL Open Font License 1.1 (`fonts/OFL.txt`) | | `environments/*.svg`, `characters/*.svg`, `interface/*.svg`, `interface/items/*.svg` | Illustrations vectorielles originales créées pour ce projet (décors, hibou Plume, étoiles, pictogrammes, objets de collection) ; provisoires | AGPL-3.0 (code et assets du dépôt) | +| `audio/sfx/*.ogg`, `audio/music/*.ogg` | Effets sonores et musiques d'ambiance synthétisés de façon procédurale (sinus et partiels, aucun échantillon tiers) par `tools/generate_sounds.py` ; provisoires | AGPL-3.0 (code et assets du dépôt) | | `audio/dictations/*.ogg` (toutes les dictees) | Voix de synthese neuronale generee hors ligne avec Piper (modele `fr_FR-siwis-medium`, entraine sur le corpus SIWIS de l'EPFL), via `tools/generate_dictation_audio.py` | MIT (Piper) ; dataset SIWIS en CC-BY 4.0 (attribution requise) ; fichiers generes verses en AGPL-3.0 avec le reste du depot | Chaque nouvelle dictee ajoutee a `data/dictations/` doit avoir son audio genere avec `make generate-dictation-audio`, puis une ligne ajoutee ici. Toutes les voix actuelles sont provisoires (`audio_provisional: true` dans la donnee, badge « voix provisoire » affiche a l'enfant) : a remplacer par une vraie voix humaine avant diffusion. diff --git a/assets/audio/music/forest.ogg b/assets/audio/music/forest.ogg new file mode 100644 index 0000000000000000000000000000000000000000..7b8e9f3ccfadaec440463a2034b076a2e95234d3 GIT binary patch literal 77028 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 J-V6&z{{bSxl({S9R5SsP16w5VZRvx- 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 literal 0 HcmV?d00001 diff --git a/assets/audio/music/marsh.ogg.import b/assets/audio/music/marsh.ogg.import new file mode 100644 index 0000000..a70ade2 --- /dev/null +++ b/assets/audio/music/marsh.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://xgpmpw4t7c21" +path="res://.godot/imported/marsh.ogg-5b5643dcdd68a2b954773bebef7cfaaf.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/music/marsh.ogg" +dest_files=["res://.godot/imported/marsh.ogg-5b5643dcdd68a2b954773bebef7cfaaf.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/sfx/click.ogg b/assets/audio/sfx/click.ogg new file mode 100644 index 0000000000000000000000000000000000000000..0a970201fcbf76a2c623d86c2336342d3ed932b8 GIT binary patch literal 4012 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 a636f~V0-TK^Yr;M8>6>f&J8)w2LBIFv_g6S literal 0 HcmV?d00001 diff --git a/assets/audio/sfx/click.ogg.import b/assets/audio/sfx/click.ogg.import new file mode 100644 index 0000000..3ba530b --- /dev/null +++ b/assets/audio/sfx/click.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://be5vn175scho" +path="res://.godot/imported/click.ogg-3cad29b0a7122f4b91444dafe5dd3781.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/sfx/click.ogg" +dest_files=["res://.godot/imported/click.ogg-3cad29b0a7122f4b91444dafe5dd3781.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/sfx/fanfare.ogg b/assets/audio/sfx/fanfare.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8f3a56c9de371b293f3ac89ede3f877716b7c8aa GIT binary patch literal 12932 zcmajF2{=^W8#sPu7{=NpgoY4VlRcE0WM9HC*6az{vn1CG7-6rjo&N=SDT!ke zQj#*1(Fftr(Zj*>yyGQh*yjNIq!eMN6tA0${hw(F)SoB6${7;`zyToO!y&3(=))d` z;ZiZ+{D@WQcm2w#qPsT&E3IqUE9jHRSCFR?YbhK)m`H%@1>oxG0M@9u(`ddZL1nY# zNFildi&cbeE|fNm%HKCNMQ7N18qFQ`QBr|1^0UGkHcCy=3Ws>sCIGTxQJ(xjqFj>a>DTupCr3SA{kU-vm&+R*0`daP6x36!69&3Gcl6p zbT>zo`f0cV8pTG|sNT~hTv4Km=z~$bvgg@AA^>@Jh2!oD(_^@5=|MLD7@Q$%mpAr# z683owmI2LVj-rSG4aaH56=)`W(o7aGPZr$0zFaF4@2%avq<5!l0$^assOHT|yF2eZ z0O&l0xI(kILg%=d*aUP`Oa&4U0icFxWX~9#&`4DsFeZ%GyHEb-vP^g6+?@`2hqZ@{p(ulinlF6p_`tFw}HT#-2{^Fy=F1*uAC!8C8Yw$LAjBLNQ07tM;-{QG7f z%NN6OsYj$ZFG5?iwB&BQbg%e>7rQs5uN4oNk26X=!<-STe1`&g0UoJ;hgC4bn-OA!qK`rolbd%6F;mazkS z1r1r?b!1ptZrDhT;O97=?q}W*VmT3QwHopkUTc1KX6cUR|8xBz9ojfARQ5lFh;(xJ zyilAKNX7h3CKM>}V%6ByH?3L$otFZAFU9qL$m;J?He^*BmL&|aSs5O4H z0RX`GyqdLl2&=~;IEp_)Fgh}dR~t1V{J)Ccu&mxb$XGgx!46vZyr|4bI6YgD(Jfq% zH-1*}OTqXH;fS0WjFdxW7hdWNV`uv5s8keW8Z|J4b|uv<^$dHdUu#}KtzS`;yRcJH zqx9a0p>|D?#c}PzdSlm*Iq_u7UwwhD+=FE?NJoEox&ng2wz2Ja#H)XzT~95)DnjJK|;Wvim>c? zHGmNU(_UD;6j?o1LA`xy`m9#t`_x9$Wcy_042=nTta_uy1ao#hLb{-yjGi7V!Dycv zfsJ64u1BbI9FTQ?WlVU>P8h9sv|I@>P4{~%qxXvP3VZ$Ft5v=G+l+re5yp)Plk%`v z&d}G&kl<(zA^TgIj}uJCLLlT(BfVE_1VTFD)uytZPqR${YhaUoS}SeLS(QB^~No@t%Ck)ONeKDBW+!f3jhkspK-V&mud zYFu^5PmPe~NI{wAXm#1qv;j_WC-{d<`C3_J_*t1KgN# zTGbt{*Bc-88z%Tojro1Pot)sVt(3~7Y=Xt;uzOm{1@(2ujfTcmycEaBXm z7cEsM9(()7oP;({g9QMoD@+v~Q-KB_r~yY*&Kcd)v8<8M6^KM7;-7Iuy-*b4^ueo$ zlt$z6*Eu2+6%PygoYfZ2FEr5B$&VUS5vhsBTeww@W?5X9i+X7xTv%tIeZ91h%hFX& zJ^plePD-+(P+{tB#|uT#+mX###dTMB~msQEm0+WANUi-WLWC%Z#cWgXWUkw3^s z*&QmIDaZvoleKS9kl%O&-Qn4q&si1~k2)q?-5>qR@)<0xvoO+qL|N4%l)2Bh=Ey-v zd53{^d}W=5WxV3mzmUh(K~SzWE3gBC($SWy=WtDsTgkF0haIjLYrbUpEJ=NtFmjb^ z;BbXFEFh>aV-7I+p<;&a;c#j=w0k7Q?y32-rD*a`$4bo<$fBjbE5li^#e5}X*m$?4KH5f>UMgr#h2jKO+vP~7nNNT7Y9iiMYRtlC zsX1fJzCv#1O(drMA*(~xqm}8PC6Rgy*FNPn-YA2bQ41e3C7HY~wfZKK3=_{jJ`jHawO^;Oz5uvdx=2pksvgv3R6sJ-q$`EpK2NPJVms9+*6&prTpO;Q`( zu@lQNLT{$2Z{Nk!QuY(j7Qh|=x=@(CLs<2gP8yA?U9_4o8-|4pNVI^&hg4OSy_%F? z(>C;e8NmXRl)nl!HT7-{>LH+}{W{gh*>gL+sOxIwsDLd8e?RFmN* z!|uf9m9;(QS#EgF@U&eX6=S(mujB_0!?S08zCh2&TrbskG{12p=IDB|>6NtIi;z|1 zl2ydd_6ey}ivO_x&U*J!Y^d;R>+J{^$$`Ygq(M z)hsOlknm}(Woa`D@Ej5Z&X*j0x2oS?tvvbqXvIf`^SmvMcXsUYB7 zB~6t+)i412|G%Id^V9<*S3nA;0(t`}aGsl-Bo`Fpv{En!1*Y@eZ*3Xe+cmuz^V>#> zl1$Y{FNcK$Vm0Uhc}oqh_mnFf^>-m+BF=Ap7~fp?pas+JOwa<5xTP5DlOKn*U` z@`P>pb*>*I+a7e|OMY(05mOHYO83jz&5SP<^C_bdU^Lq2;)X1se=5oNRB~j{HQ8bv z-Ae{n`Ef6C~Y8DUY!E{>c=Fcqsr{_7QJGz<23I{$4jA-IU769m#Uh^N3gk zwxei+#b^!$bslBYu+-2hJCbqgc()=3ZV$`!*eH`iOZj>Bv~f@LIXof6*qoC0)1?C9 zf7nZe$=|<)w9ev20A64g8m`|1ns#N4R%(#>DEugJYb~ZCT0vXM3=n0fObESYfAjh@ z^W7g4SO)7>mcSweUYLzW@Q4eym?43Y-yDC`Mr1T^l!6B(wC!D zxX;HJ0JzsRxob=-&iKzlJLKt^ALUQG+$5x!nnEWnTelJ{{jA320BJJ_ac)%G7LjO_ zLQ$DNg?uzuqxaa}L6b||2;L$f{&R@URwVje&{DI|49Yr(b9EJ4c3qGt=Wv}e9$VU# zOsp4vc~IA2u#E9Ts&tPkPEJmv)9k^GUto5i)gFDOcb& z8(FzxaGej;Y96zn)^_Gf?nhI-3pO$X=Oc88EREJwI6W@n_P@jc;zd_E-xt1He%zkx z;~Wn0U4Zmao*uKgY~jj83{(^a0Vg(HnL;1ob8RA=$SRv#{xXf`+oCc|zzYF%smRc% ziF1E(=C21SY#(E;Jc%B-m4gvb4b~7Fy`=g*cuqz^fcudc3P5+!1_FGw-#H6~`r(dE z#O7f1^5o(L-v?EMTP}cz0t!SYhHX4%p-kyutl$%+yfCSTkm1Lw0 z$cZ$zI}-mw9}HTm>h%`T2~N|LCsqeyfCP9uj8#FO2EU!*d6O?wdxS%mze8$?p8oz` zS-oNEPi6Wm*M0>bow-Rsx4@8r0o|3AF+xMuV6at);b)b8!}E%Uf%7Qeg&%an)IdSg zRDb4}^PwXRjAx{;9CwMab7uNoGSCyn-eA*E8xcx=iYOr^6_jf~d9Kz6BHmPb9hxV+ z^P3wUfXH%~vw_8WZF>1MRXcX|yNi3_#v@Lqhc31=>!alrVXK?yJP~@6dTH91~{(m zz`B1i!dl`FRcX0tc7Q{GMs3_d;`4j}Dy+~!I^`?TjJ^o7SKnyBD|&F=x(wRA>iLY> zVZbXv2SVpq2GqO`y50P4>FM6#@WxIyu^0ikfGrA;hm|R)B)R_w5AQqb>=ML%1Zcej z+mpl)RAgpiQZ3p)=2MqS6L`_$F9^(-z{3X{1n{Yb9muaJGXY>dXFqVp>)7 z2U%a0r0y!683LShLQu51z;6EH|KJ(Su&oiChUu)71#~x!EY%+Y;ao1FsDFI|8yF97etXh0?x6cmf3 ztDM!(_pCGwG;nI`>H~^9x#x{-tXE-1>B@kgMGYCuXCA!^{g#5e zF$uF61o8IM8Z{4JvpspjjxjV}iyA!HXe66M)b}=aEujE424E%^6HnfxnW8y42fmi+ z*OP3QA0PGjWj{D0XADmKlqr8fCTyfzpJaTR_{8tHi-%y!bGz!NNXGI3oi035qJKot z?MEbt@_y&X9h4|*=t;tkEj0h}SUu&wS60gw3uHq!WwhKZ)?a(AA6g^k4sRLyYJL8p zk&YZDofv@musR*^azajk4OU>UA~enLU#@W z$hOpg_#QP;U4=dsQb=w4u<9z9)>T1a(pf>t>;erq3GqPJjcJTN!XDcABWaEi2Kf^J z=s>U(Bl=&@O?>IuX3K!{BvNA$yd1>+L?IC1jIFOtU`%;i2WIR257CiExdp+k86hfw zJ8$qhff}6OhY$lTYd!RiVIwEI(o5}sE~5DWj( z(YB!KPcB+EYj$rBX7~RkCnN~CZ-UI@?F$0iPDI%!mH(S>t|w|1fgFGgI0|>WMQdjf zwl@!g6P_rL_nNzwhL9a%#6a{oIzmM(F$G{-lm8n;68niWxrO}nSWuA`ln-=rP<8;9 zwF-XoOZ{J7?lRT$QQ9|1MjXs4%>cQRo`fQ2JdPl9 z@ggLk4AJjs!LuYJDBcT`)2zhA+xiziGH`1xp zd=!R;US&aWvR+B7mvjz0ZF# z8u(@5V0GIFaU6gLlutUjIv~~`;BLXZb8If#>+aR+f$Uk7?U&b25z}4ru%Dwn<0=I~ zf|gA{*IQQP2m(|<{_O|J5PBwf>1DkOeRt#X78lOt#f%{>P$KN9Y%rM42)@B{5?DwJ zHQbFK?nTTn%p$9Q&bd7#ZG!xwDQ4nm1LoxUw6i_e8 zFw2Gfrraon=!tQoTcZJaZ4fX06*SmO1%6nKg04?5%?|wqLI3AZ$O*gF&#n z5u^qif96s)f|R8t%$sHN+d8>ro3+XtGJ_DHv@a8}q!dNR1YXtHFp;7t%NO{|s(KGUZo>*<}4S@YY zL2!>q%L0DV>VlKANt5N%$`zlev?P4Z!j$uvDM+dbfLH4t(g3)?SO6p?B~?`cXlfI% z1SbIyAA{JC^>pBfC}5=!32|pHG&+dgbBvXDK}>{fG$2X#2LP`D5d~1}jkGwhFJRUd z33z7nGaf^Ek{|NZMs_`Mr_e-8K{qG_Fa?GP;c(dzXvs0QvFJZrU9VPNL&R?+AQK=C zhGqtEksADtg$wfVQ%EYP75)XH_UUs2VjK^G$c)*-*yhhh1Mzee;xMk5DgbPc=XdFm zdFG$wpDyehN6;fEsviPy$rr=`Dlz6V1R8-;rG_8f1dIU8tzps)h~cq-*91Y@*(EFN zj_XsBMp`eeFZlYoFdM-;i3X|6bnWL3hrT>;I|ii*_7U5WN}xrE#anDG;@X#WXa3L3 zKgx6?7rB!Va90e294nBt69aVnx&iL+Jyt=!*;=tji&Mp>!Ale8kz@vdyAS0RGY|Le ztOi6|C{drI?VTnr`oHr5T8REWz&%C~8VUt?RUB(X6$Rn|jxJBh=iVoF~RmYvl2 zVmkK2-EUl})y9LrKM?m)Yv-MTnw((i)JaL>y;JGFudSQgmrL{KeSXOW2Ah>`1aHRW z7KIhU_duT~VVb8*ZSHk#UX=~;EK?9G>~z^&)Pb*M1EXTtJ6tatOz+PwyNL3;{E~y% zMDLVm?77Of^(G@>&!?s6RjN`Pk4zH!U02eK6`4~s0GWihG^K?JJ4^?^!c_1T5`*L7 zfhld$-o1=%J+|IQrlGKCA&I5KXdnynphW;s?R!SqIQPz(^gecy#C;h$FpISPVCb)w ztrNW+<6+{tpZVvf<4Q~;-TBQ!dKaG6RokDee(q{U#Ipym)0+WI9%yMu>VgYUpZ?9R zYNF(3>A(f15tK!^L7#pC#Tzc`2EX<7VBjhkAwsgvge?o16A(q9xbx+a045yJhMeyU zOrWBhH)Cjcb$_*>LD~t>6s=UlzqRG}L0TnLF#JI9lD%;vtv)ze%zu?h6}w zOiD8O!hJdP{+cL|NrpO!VgioZ$pVPA;?rmIn^q1Qt&^^Ox5j8!l^Nb;GLa(wQE}q7OwY%KL)LuX5Um@6G=_t zTi;;_W%;d~X2B#{<}Q29YP~$34smj3$Zvlz&Gj##7>~62BQi{R@YEWJ0peLG0Upd<5Vg|cxn{EzYujrZaRhM;fMQXolx+w=L&{=|S{qW`d-yU;O22orf(Z^#auz6a zo@BwMXQZrdYN%LO)&KN7HlC@pC{U66ytB%)KG59Cv3LH$;)hWgr~JTMt2bAp>d)QC z=(`|i&|J}Q^CofQ(%jV2zWLtX!0V?}t*!g@RgmIB+1p!(oUN9=o?;PB&v+lAd_m+^ zh-Gnl#;@R3y7UZzg#@Fc>C?)GGk(QaM+BAzqhE{r>Ao=l)?HEydSuSKc00Ls_g=nd zl7K-yU^l3&{}JJ9>jIHS`L2OA*HvvKGyppRcWxHz^}ZA z$b15v?2_6fka@mT9#gMVlqi+cEHZqqPrK8CN|XkqC|cVX&M(xw7FvSW_R4(}9N9vF z1_Yp|0$3t42ZhQ53Y^RNY#@S)G_DLd_e_@}oK1xuYPaXVP`uR`bi^#yI=A)5n#+CJ z4#^+O0epw3dYQ^1=C78UIo*{ul%IZSPx!NjDaIIzH`R?#o_ropkM! z_tfcVl&<}J!N<_E?a1xc_!Ci@VdHu9$3C+e0$noTX^`qNA#XSTiedaX6kG@s^>Y+` zf=;6-0B{xM?IUswYvxCxfdLojzpPt}2tWZZn1td=gg{=aZvi@rE&7|DobKSYkawCf zJssLWdOzIj@Pg{O*;8dZ$1mM5{5+o#^X>Kz z!Jogi-nw&~`HpkGA@VFe-@SvhVUkc`YxTPM7~kw|Ln%z{wWMqV$Mp}^f@lNwmQK4u z`j$wg+=GOorp5GIG(S6`_SD-jfu9!ITFC;uD@i=#1yAcXL=uIG{YZdTtI!BR9r#sd zXH%9=Js4^+m-}tbkb60!pg1VdcqVE1v35?mvpPZJ=(oAty7K<^pjWH4snzvl>y>74 z!HOeKgjSn%v;X%Uwky}x3-uFZ@2R=&zvg4oH`^X`X{s0hq@JAnW)*+<&os*PXU{{9 ze*Waj(DF6NT-(etwznli+S)QUWz+f+91L-M3UF`B2sx_r^mRl=$N+?Zfp3oOuiJyn zgG4^op=?%~U-Z|JB{r>Vtt`p4OM+dl43wpHxW0>#>NO#Af4Qz-BAYg15A%L@KurB3 z>Z}SiK|?<10l|qxVW0ts^qgQVe9f8roJ7_4&>QUFmgfk9$ON7Q0{$EK*DlhmZgQMK zf~z5f?|r{G2EE0#7jtjk3wk^|F{JE2!_a7Q`S9J(4NX!{gCB2x&u2&)+PiLa%jGn)7I&zmwGb(Fbxl^4%T9o!5hV0;c@UlaFWxq7G|Vp4v{d_`KL{ z_@u&JEgN&gxX?Bz3@hgt5$Gqu8HzFrK((k3^@^-9hg>;RRC?Bs?v0+HjZwfIc3ww7 zq{{}?L=-MYN?nNkLssdJsvZg81# zeoX9|@N(m;&3EUwzD%~ne|&s8IpNT6>ysJ*wtgOs%DsJihfDmtPO=-Vrj%Jz870mv ziw~Gk=PxZN3qMav7wXwj_wo6L`N~-*u6n`$OTox-6JXsbB|_g~+xEjD`t_{6LiM~J z`H(qVE?uY+m3YEMT2NA`dq^vpcrxYo@?KTN@zka}Yita>3m2`Lbc95#JU6WFyU&a` z2=p3mn2u^6$?)dX_!XuuTK+MuWP3pK*Zf+T@s3kLnBNnY(H+iGYwr81zrxNM-%r>P zD{>Qaz4>M_NUi;p+_S#bTIOS+DfI^`x`NC#ObXm?eGKMZ=svJ@Cux3kIn1%A{_5*P z=KCS+vlSHyrt#YY*I@gO=8n^ON59_(=5}%_YL%?7{e-Yhy2O%Tch4^B8C6G!dTuBF zuV&599G~H&g1-h&j4sE0-NC*ZUDhtxk@--SV0wP1_&!7cLQRr-C7=SYt0PB6q@mDZ z!VHDpoZ);o#et7nSlCsE=)b2el}Hb&y&M|9R#gvJ4uZt5UYba zQd-yH&I^GOf>`+}3-jtU?z~ay@JD#%oL>zhQtM6P6N<+x)(-cdGF&cLQA-%R_)b^P zuE8MrU{;@Wh@}PN!TMsKhw9Z*mV0a(P3a5A6uw~IS4qtHahmWOrZ$Z@USfE)KU6(w zQ)Jo+{b^V!T>GL_9tL_F0Ot3exhJgkqEa=F8opsX+22{M(4;tuk%nkUl{I+ig3zGf zkT+b0_u9f!xplOcYBesp3Y{f>#?<74OUL~e_cxM^-#sEs#z{oHrcW5py1BThmsh^k z_FS2;zNswTFT9i)`Sy{e3r*Ub8|R+k?MrGGZ}r{c(;^wFHJmHt`P7zrdh^ag?+1?G z+8^UpFRcAcKT>hz1Lo{w&kGH#g|&`{ueF<`o3Qrp)-eENuK>8pY~7x%LL>2n-M)`RE`TX5lE3 zB0V+EUflR?u5w?JF)PbCnTNuw)PAXkFV1^91wY^aVSCCY(oM7=+IL;6%Kh(uH zJ;U!=&ee57?%}C(ZTh`SB0vNIWIGG4#U)1_?T|7)!VUysNH9Q5_b%GBz@sf3Qqs_t z$Qqm9@3D2G(9u=rYx7q5buDwX9o>qr&7qTo+YcoY?2>xMXw5tBNIiU0A6gWsb28;a z?_TM=&!zq4CruIvY8sp4LKnfzp<834!Bxezef1xH(zi-Pnl_uYV_#hy5A?4c%Tcwl zOKt2aS@)B*k>3$2uDp_a_`#R%Hyjyy4HvP@k8buI#U_pL;& zm@=tt#ri=|b+``q%DKoOLJ++c^+rX6&xPw383GEK<_piprj_`p>~y>)Pbjr_2;bAc zza*Sc`eja;)8N|Bu`zMK=P!o68)N;`-u~#G)@-&8Hy#-bv$<;=x%A$%niK0G9~Ey~ zx8Jo~=HZJ$v#ox%RPI+MUz22AdHLn5&?S{d4367nw4w6XHu=|bZt8z!E1)r;1vqVZ z0+lmVARy&%fCZID1&xCbF+F}#8`trm=O(`(_~qvTNkJ3UiF`HAfpKY1?zv?ZRA^?U zDp!3yWKcKe&DZ(LrTWchyQ7>B?*8aw`mXQ4=nG7!^1eGljf`r7I~ zrrj!cev<~Vp`N*TDuc7S*~`MayEFa5*mV5ksZ?a)a4if2{`gR*um0p<@WNT(=rq+*nT)zetJN8#`CVBx7_{PtV&pI@`R)={2?1|R zJvr^J2Jb7y-bPh>I0$rQD%?=#m5IDFG+R04$K9y1us5mHYdDae=dz*fRZkByK4;12 zxn*t?r%*b;9|O|WGF1$=o=R^Wee6`Ldn2F zMY=;obn7+Jb>gy9yt8TSQP+Z!H#Qi;C9<5?IZ_kVZ;?~Gv2PHp^Y6o()(3np5mwD{ zms^oZ?2EzJ`sHuGE}gr>oukO1f!$HE4~`6W^RL}M7OQGFW~-z$`f8B&Lb;Um`itnP zKyQoi^G)AaM9)mzPf~vqV$_vDek#I4Gayf+b3oBrXeIQx`lS%gC+wl}B3;63j7?W8 zJnwBqtZ3-89A2BF&RlZ^I0u!idTP|I9b8h}4+fyIwo8B}2uRI4qmCFfPS&}%E?2V0 zJ51np;r>sDul>rKyCo5(k@2+B;MqAj9)JDJ$Ikj;2j;9Q1ll&S@`_3NT=Te^w-Fzv z$Tj#g@)aFT&0;sIbjzOFT0LOC^1<^+=E64pW1eU4U9W9un%@Z&4O2xA{E>zuR(vX~cUBm3H+e?+r z-iTuQQ@4>1Y*0W}LN-^YCdzqFoO@0Y2!4Xv*;Vvd`9#iU8m7PmWAahPp~o2^X`{TE8fDHruZP)DO^s%@WhTK&DC+G4{<$FtM$C@{rd)XX6T<;l3 zUF(tV98B)y-kys-Irs4!UC*tuqPbfqFU)zc2Dh0$ve~1b`rbC^xb({vqXOmpeVLnR zfDx7T*SyWBLOr*@m$uCpx*)OM`C4woJ2oz6cvADss*3SQcssj&W5R^T!zI0=64X3z zy1&w&bvwzRK=$8nuHHY^b6zOd zv(GsF8n%1#DYj#9ol3Crik)=B>E);U7*2#9UJsG`lG)%c{s7zZ7u?=DFW5t}E6e@{RW~I*2SXb`2bUCFf=XCo$pXqYGfBl}4`` z$dI@a+ki4dZTKa5MZ6FJpgsG=-i;6OKP84}-XCV*D3qUq2)libh z!dXbH7DW_g*ersh90r8NBQQMs+ryi&8qTtCrjmya&N>;7ohOMBZ$<FjeQ z8PyE9*pluWlA+ERBTBB=lk?IW9nKj^Fm!T$`Xh&yo(yevPDzFzebPj-ij`_K#lw>2 zTbQBFY9UA#v!Dd(jB|#P>#Rx>i7f+XE+NrkXMjQg$_|n94w1F+Cbe3i1pquV)UbIy zv2`c0RYBCoO^d`LZot8HzIheC1&@4-EF+7oRDC4(nEmxyRd-aO`vMRWs^h)hP(y_m z3jnUnIZqyuCtsa6np1$2WL2Yq7yt}pL-P!C^O1Vp4CnRNC*J)}k1CEcR-r>1;=AKl zR;lMWs2QuP`~bxe>*YB#ioY3IOyKAq(yU<&$sU$P>XvX63{#nJ-KL`bc@2zFnXsdE zL`Lm^qeHStof5ciRMuD)sWmmSQEcigu|;6(JDx<#^sd2?b6)XXV9);{BaXa1?y)$)F7XeTizF%E(Y(CO&KX@_Q6q z_vmWUV!ah6j!#$QWu=n?)6-b&6L5>fQhrnH01hzd#uQ@$RZ@S zQI3|Sb8M?B59K>vw?Eykdbm8VKCSDjLv6%++SN32!xHIz5eY9Cqa_(bM+= zT*}o_*^dNm&sH~%Eeu5{ugIYsl_hK0R!*6dgt!KP;Mc@1J<}ik74fE?Rj5Afb8k7) zZ-sgDL~;GaqR6vpQMWS%6KMmmPl}dD6vsvWPoGj9<~Ruk`;;P-YXo6CW6V;D|E4B% zC|GCcql!1bT1)?K%NyPH!Eb2628%)sy>HQYT{8rsPKlul<8ILfVG9MkC5cOm6Qk-y zclX5Iok$z{PZwyYRMZE+rDzVNXf~zjp>u(yA9Hn!Enuo68JYKhT=3Aj$kMOKD!ypd zrsB$dB~SL1+8$Fa0eEBy((;a^=2fNURi+k<kN!U)lu)Sta0c)&!PYb!CtUrh`QqkW|PM3}1 zsWE$-xl~V`YsD;y6bp@p0iiIjs4dh+VseMyQ%mm-hOMdm8pEgRa8D>lafI*6k=KVO zJe0xDHnN=Wf810ao^VV7k$?vLX_t2v&Ok8@0oba;)uLodS9DND3%PBK5#owG#!*>J z2ZMY-+QzUsuuGpJho6*DnY6=iM7FEjj|}5OiGn{inHK8}@HSw09WihhEzr;^(7-#` zP|$DS-MgE1gGLVx=LH%D_J;E!jRJYaR)Grw0}Xj$2Hw0Gys+XxUR~TxTH>8>-hdIW zw>~cFecIAu(ZGVhJIE)T6~RwIed55L@1%JB;k>&G;VeBgMG(r1i-eRn2qOD=OZ(Cw z<=(KsJ2QB^V&0wJI9{=6Sqg7piQrB@FS0M~ZeQlIzO*Zq$Id6Uoj7s4w)#WuybtI9 zekS$16@UoT>lMliTw0eHCQ6Jl@a~_%>n-*U6G19z%S3T^`n|eD-n`v$2+Q4Zf{k%Y z&q9<$-iEZH6oFumND#3yY9jNNNF>-DH?%Y^aw1O9+$S2E2)I=r*xxI<#S;zni5~Au zygLceM7-k6WpG`8=KW1c12aoQd7=TSU>QW4nY7I5uS-d8Clh1ty4RkZqvLbwl)d2Y z!t<8`_lgF_W_jLs%A(ymlL+YzqzIPn5e=+wJ8yN!@h$gs8&264#c@(_-H zxulOxQDk!YYioK-_}l1`Za!IF7sAK^g)kHhP_CN+Kp|H^L z?I}$W3>&MA0*;1-yoeKEB`0{=Dt1d(z=_-ZwGB;sg=BeC5ofKHJR&N9QBM#SAk1x4 z%;j}lZo+OM7m|w8<=8?}91ayq1xe|$IgnHs2THZVj?x>!S)+iY{Hc8*+--2epF@SD zk`#~oSgYq&=*N()t{KIgsHrpYq)ajIHHxXZh%mRhR>awkFyGz)%VCh>aS6Y=q3L!) zV#B)KBYiRO@S~;+%Y(IaE6jT|lJ^)34pqIJ zl|vn^py8+^GHD)llvKf`ju0hW$5E2Bh>MK4TJnk_ZbG?~%Ux3g^B#@l{VbZ5kp@g# zD^REfqSq0xzjh0y@$PJ}Z++v{MT41Ts)E4mOT0b>5s3y=Yj`4oV8Sbu4g(kl_#%h} zA(8LXZiTBL^_k0PyrmFQ95)mpK-ScYq6kZR5lCW`Q&v>JXka39Im6{_(zEj~KU{g` z+6=%rMgx?gXD#t@rkH5ktE7SlH|SfIuSEtPZl!WOmji1fVI4e{IF#!cn$+rp92l#( zop6iXE=Bf9WF(jBe?Oc3IHmp12n!~Iox!BX?J|nOnOSaOhY~}gN`icEvW|-;g`Uq) zFPBQ8rIzPYaq@~DzW;6^p5s?lcY8&(EF*-=scABaficy`uU7PxxWc$KN~mVsCUWBE zUW*WRT%0K6CQ$qM!j~8K^sT6-kKW6`UpZqKbE4t>@UJf^_56ezizZ2u5JfLvIF1}9 zw^1kVWsJiE=1=*IQ8UT-WsT(kY|KytUg_HxR9haHQJ_8((H5r(Nca`d!7`YKP;I!H z2sdZ46;}n*W#g=3zrp0v{Hb-Ca%s`mb?_YFI9djAA&kpW;o^|dlkYGJa_d&8ImhqxNZeFEkJm<~WQ7O&SuT%2`H-6y+Q!xx^0VH*cZ4WP6@ zdwJ2aca|$Icin%5(uaqXuMLC2s75dj0S2SG++dJkLK9f2?GqWhc5~+T{kzJKU)<4iWC;KCjrqXd`ZGS=qx28@rD(h|-qSTj{M)jB z-bbUv%L)HxJ&_$dvrwXmIellu@R3D|PVxKqxuYk5xakMsFCSMCM;gR&^>ENw@&QTuZA4jbBnGrU4 zd|3CfkL>f$kDM*cqFn%h#{yssCU4SM(Dzeqq#eEP(==p!t``Lee{9SE_$_)q(D-@) z3{t`dvxjy6arktxWv7Mie@MivarjCAj5p6ze!hUPR4#G_%nwg>fYSY8e=aBX*Zvd2AK5S=!;b&pnp$|1d z=|9}Tqr-Rf<`sop2tA>Lq3~;ES4){o=6TXp{d7MHGPH9e1G(Er9{}T&Xfannsh*IJr{) zKYj>D2&kI)Xf}9*WCnN|1;CY$!gp%mLlwL zrJNsuAkrOHN6>rD0ubJIawbq}e}W1Wf=j8ji2c$uE(^{Q15rQpPgP+%03=)MO~i8$ z?8;a*AUS#OEed3{ZUMj-Sc|cxt7|=iP%kkXF*d=BtaPm(K@hBouvD=FHqA@|Fsf10)?w!LFxkEj80{%18L1oy-97*IlV0M?Fz@zYbL^u>VT zHy&@%WY7Wd?#>AE{?DdOiEZUYD%ZuHGx&~-*MquGo(JnTBQ}5qLl-zqQq-BKP8J#s ztP90hGcz)x{1AR)Y_s&R-x|bsh2=2iwEzitc|o)&tav^21}t?GZ{8wr<GKcNTrFJ^HfAb+R%d~BxAC7}f4Y5mPsfGWrY&0} zNr2L2wlxi`rw-f&=P_p5pmai0rB6g<(6C#7lcp+K_M$-{3i#o7cCjHZ<{9Wr9pxnb=`(KaM-MB@e~7X!BRBb*1vwNqX!Hvj1lKtB$_qzVMv`HGH|_@@N|+ zu+K?*uths^kj`X#se9JDoD&{yZDBvhVF=p$|IGU1*;zXmDt#^>kx($&o2S%w=w#%& zum2mO3_!xxI|&k3anwGnNWyE^cFJ_pid7>SXM4cb=HC2mz4D>5G9l+&>>T>;lT*zR!%u z4x8j2I|j4&PJvt>3MD?TK9=;je*Wk97XI7);mx~>uf9r>PE_W;tdHM}b3D7&F0@-X z`_-iF5D_D|Q9H7&I@-TIhI1|GUX+o1aDi?FbtFt{@vbVS#pLrOMUza;V!T%)H6w!^ zBWqTh##ds@&O$rEkTe{Vd6~;z0wkYw762yaRBk2TYcZw_1tOto0Qj(X*?go#O)iie z?b?ymm~Gm2K zx3SpwDsmsX729u~b)R&Mc5?PaS%{We(B4N2>_Q1i3!7*I^KsIq*J82m=i;d>c`()< z^0-qY2gwpoG^iL>_|}oVFykpG{9ITa;J<|qr^8f*?oZmOi4(toTz=2Z8l8iO-E9w_ zYkpdub|q-0soxVq!nCWeJa$IP=UylaBXtkZD{9Wvl+g3C95~(?F85=YJ%O0m*}G2d zIH*W;a@wEFTWK=LX#K>+dF_8>a`-{twinH}@BDgZY));tg>;RrW-@v(tM#|f`s3Rl zoRbv_gsrYjq*hQg!8)pW{AB9BkeV~A9fsap-`&uBQL(xG_#uOn(`u@HEL&aH z7(1Am#VK4GEkSnqno_3;r#tsNeJk{PY>&-Q=C|&Vn2_9J(EI-VsomLbj_m%l&I^l9 zSK5Kn4VoU8GAC{pT<_a7d}EW*>|jLHJ2;v)Ah;N3>nQaA%MIK(?u8-*mNfqRc{tnr zuR$}@CjYJY=Jh&~zU<@r;I(N5X74}ya~;=w*{Hq5&ypIjHudNm%hs7hQa(ATd2-}n z>5~h>{`KBE9p>Fm&vJI>+j(sdV=bsX^w-gm$$g9G6M zA!+f3l27t7=hRh_9ZUBn(e@wid^N})(;o^9n*{V?3!ry zVMqPEaORELrtwC9#r)&56mcTDo4ICttNqIz(-jxi)_Rw{p&Zc*`1m9HSc-P`~9BzjFq=H86d&WBCX!T%jzD8Sj$2v zAWj@T?%^BE0w6#bs{w!@gJ8Fh5LPVC--X4=!q{NAV}$ms{ij^uSQjGzu@>$p4)4Tl z+qDg&t;3?;2!FId&!b+n;|37t32_)aL}C>EeLdFM5S;7nCSwyj1RwyQ94xK5Hz!z< ziIz3CmU%C4-0n9kV{9Q3F2BRVxm6`NUMV}nINDkLLPtCW>I=X{qfl{Xj1i9#Q^mj` zAwtan_M-6+=F5Vijeq@_;e8<1h-U-yy|%7E#JKLVJkt#CfQGOsMW(Rvqm+n3JS0}e znOjG2;iu%8bz9V9!e3}Vl4PQA>apP;w42^U@Eb>`MC`{c%QC%XHUefr;@oULF93Kl zbYpTHVsd<9CZpqcm{EmDzyJURr@@+#_4g&3zOtqCRs;tYKbacb-aL_t zX@|Y6R7ZgnNH>}KBEykyy{A@ksv|{{1q*7Qc1sm$fIZcsQ}HQR%3+VQ$Tu$KKnd)b zSDhmLaexI2W{G0|&D2lJr;4$LdDT_Pe{|Hto>jy2P%8R237d{>WVl`eI_ir1I}M)B zNgu_%A|A3krj3@Sw0UJCQjKR`Px)jg>hY)~1(Aqq>jp;x0*_LpILZ9ipGUM(l=Sfy zjk_7)M9uuXtk@l`TOPKt|MX@H9}4Xjz`Q`4XcfI6kppl&4t{^(CsQKI?410H%1K0x zoJ0~I+kT4B_QqT?Uhy_8$sW-fcT zJ8)fOGYXy7n@o4C40G;_q%MUG!n#a%cSxo={!d+BI*f5e=wOPI*7Ur%4kKxL6SxGo~K*UN=E`e}al{ zg7>N9yjv;Lw{C0RW0L?hi-c8TazkVCLu2wn)1qT z1|URv-*M%ABxN%a?69rN5MWtX{!fgu+3_u{o!Ip?z7{ip2DJ}aPZ~cr004pJ2jZ=- z{La(Ny7$CiU!$-h=pw?A|u@ z@YG2(#`9()31cGAkZiTXOzv_@tPZQ8u0t_@4T@gmgG9^ zCgxPw`n^wu!xr@%rvn8Wa%}zXl|UxI4S)QZ9q|$ff;a#d1W0@uk%=Dd8k6y)7W{;~ zM-2XMs%JZ1JuR^Xua|vDC4&6sM5I%qS8RagOa<+mi-bGN;0Ltn?^~dyM|B(?Wp~|6vv*hfu2a$p0K*SdyfNK?%yvcEnF?# zw)*(f$He_z7A%FjO>HQa_T>R&dVsT-S+4}8JK2m(hf=~^>9qb{)7Nw}N)nAVWfF~g zl4f5CSpq00!iGbr)EjiF!(r#8$SyjannWA6r#UXssEs}J;U$Z%3d`PZdKZO0+(RF~ z6)><2+31wyNLNVL8##I^a8T;D4TV0KNOgs5Qh~0!-qr-_7YBF_7?u`q7T8zwU<-9% z=i?g7oAkjcIg`;{QP{4s04Q%Tgz9>OKIrrDv9&FQYESE5qS!BnK_x~P!-l0Py-U#K zQQgUD?n_}gfAJ?#Dk7la=E=aL5iX`#*$ z8CA#w#!x_-nQCHT6fGVBQ-KCEp7cVR*@oAU2__k9EJll zZz{MAnAF(s9e@WV}0^&NzbBc*5oP;3B)U`$*)wwba=32JjJQ7 zs=m)Jpz3Q%a7TW*6WOAQrBxNDWAId{o-(oDNY3t;di8DA|-eZGto!(!&OTA!8x3usEHm=c=_QFg6Tmu@dAu{BrEPw zN<<7-rcpFzG8@Z-nMh5H!AvS>t4HF?$xa~oWhRnHM~YzFBUy1T zhgFf}hGDA$;`xBvG5OZd`Zicf|A{Tlf1AF>!pPddhQR0xXkCZU>4R(<3Y|(_GPS`$ z2Zj!A0J$K_BDFRM4HJ?Ydcz0Ows%&b{=(rAT+YUS;6N z$8)Q73%eTum`8Dg45XahK3xr2{w-{+;KdE@t&zD>1R5TtIcO3Q=0@pb@LHmsDIhLe zDhi^Zuku`jN92`6);Y=QOYCA{N!ldP1M-aVjk7N!bnk zR?@E!-zQJ>-P+&~++MvDPx8a`I0esD-{|ou#7(}7K-ZOtd)}{F962+mQQ_qG(qLJU zXMA5QOvso=#p@R=Coy)NjyESU;U^uuN9>r)fV>b!BC>gTSiR}r zFb&qtmW|a=`Q6K5qKWD(I%r$8G5q^!dic|`YQ9@?c+a0Kf z2Rj-Cc%TWi3D(*iKtKp>$Ze!XI93L4x5i#k=GZN$i`+>-1S0{IRnCCI za+|~3Ff8++mK)S6Ax%xO7q4ZOJbyj9fDnb3l%EBKLa}?$4*?3r{6R+Mw(+{rH&rZ~VHJW7zuxds2?bp~Q>4TNw&(xgP)$Lv-t3@m)IK?kA29_4#~O zDgLbayH>lT=lbfkVG$|)WAD|{zcmd<*VwMOrlGprZhOC9{M3wTPzJTwV(*_TS#Jod zaZfFgtwFO(dVsMRUo*E_qsnMB=LKJ8H&9&+&z5&zT#cm5H#RTL=Uv?dYOjHs=FgP{ zBZAqX{`S`wK9Vo^0>&A@Q28IJtiktZY6wsXz!^0#AG;d@9`rsw&H8M7`qUjd2ym$? z{kVPfOxpZ+To~!A)UKnl2XhgR@B8@x#*!;ii0}+Bc(@?ldSP0~eHTDv} zbsM$TDCHt1PTkH#fSRKmv*NXYQK^{rYZBPbOMj(#2|xd2sm)(|NQY3~Q;K{eivW4b z3waP*NQt_hJ`_|qIzDcL(jDp#?|m{N_+>uO%HWRuUJZjTmRr@boyGP)GJ*A~%AJdL4BDU3;^iUcN8Y*ZY=_YcOo$JU9A~JfaI#NRp)umZ)4xSedW71yfGkZ zUoPTJW#HgroQ)I!!@;$7e*jUC8^LyC_8eb^1~uslt*@DnL=fdbib$6CGw<8P1_)QfwLPAK>jQ?Sig zUp|GXOoVvBs|sG9m!DdF_s=7&k-e1r3WG;o^7}lBoDRB3FpZ>5BRUG6wiJBvP058d z7rdQ*oAF(1WMl0@@!HWb>Ny!h`Pm;!uGOb;um0Aza(-K!;!O;PrCNruVN%R!{r9Tf|+#2S`HEWnj%g03+OqRu(rkZEf$h@`7Wl z*4qKFwIU~fR&Qv##k@Ft?8rbcWG`|8hBsnfh^#f*=wtS1>46o1F7-rr z^gD35Wn5f2B9oi>{cX*)f&#KS)YeTFB>k@q2r9SSw16DwyM*lEhb{xx3xI!FUi$3n zM^jzjJYlfoSufPxn~nfz)ioJ8V0a37^~Q*Sg~=+edb52oSsSV=1!@tq;M|G;5bOHa z0a}Ih`b6 zW)U4JFq;j_Y(BBY3kimzcU1l{VxVul>N9~I8WohY<^dfmVF&_LZRwX7_>iL9i^yXo zIQTZzcLrV@vbI018y~y3Vdae=gy}=m*7zhWJsB}beY`Mmj4OW^+j0cI0zio8s@)0* z4EBr6y2O>;J8y}On8B5M0pOE#;iMC9+qH`K=2VDoQU{EDfCA?n5-OjJ7}_p##GHwL ziiAc(p4J0!g=Cf%1ZW_TA)w#`uu!9T`1o)ZCd%8ZTGss`YW^pBVGcUMqitXfdQiZ{ zd=a{dNoIuP6AQTd~06(W7 z1F4|CqqkthAU67<#FFZ`r!0&HU_PtNT0DHz6M^M9OIbx1>v;jjc|Ld@gic~Rl4fz! z-^IqU6nek_sO{?T1H3#jaoin_*eAeTPm+NW6L&+*Yd`1M0RE9WUU_-M;H=2oqc8E< z?V+f1rkrzK-$hps zs5dCRDW=BTJ9Zf;!af^)DRFzSW!xZpuZ-j^5b6U|hZ-@J1&q1T1UYOx3OWQoAQ&S+ zE|k?Txp~v3aMmgqC$B!Y11)eBiU4%vB3)r8S)hI9aU1wSN6<1%f(Oxyq2sq*aP z?3nK-`vI@d4*lC^cBU`k-Z`X8xkzxG9B|(J!AezUcQwZxCbB`j;}{;1+Z@HbrD~@3 zJX{Lsqe0D5P%l)(UFUWmL6l((J?0=n@wxS7mMwi$uCvZHhJ+8?oUq#uz9ot7?%)8c zCJ@-bH)wU`OSh~TZZ4Gb(8eE^hI!BUmJk9C`5XQfTw#M}>a{$cDU?DYB* zaiafPzL-Tqb7*qi%aYa2Jb>)y%$;raST#h@VCy_U>49^1g9a``lgR(Q#6^NB3vO*R z8Spe&8+$>E!zsrERc}Ev+h>3V%?m&9X62)fFnVf(#URdSpnT@w@(m(JYNVrPjc%@X z^j*sob=CE}6JP3hM({4-Qb^@z76 zZS&ufR|2vxiE}>Nz@s&vBBb{$LkWSs&RxslGP%Ev|DRfh1n7#sV|aR>m)B7az)(dn zvfI@6C#1aOHmO@WaMm^CLPCLXXjR@9>!B>4sqIB-W?M}xPt0B91B(78l$FJ=hjm{* zNT>;`j_MN7nx6bB8z-zaJy1|Qy8IyFoC~|Dsa}yi*!3)-#$dyGHFD&)9xjEqua_`+~qv1xpa?Wq=<>iN@BdHbku6G(&?e7`dyZ-6B!fsjP&R5;N zQw#rO&IEtOoql>ght+cahK)hRaI@0IQ^LhXGGLTtEt+_@nj4#j!mR3c`|vy?Q|xa3 z;>?l|aD~|w=?|Ktm#a2arnPst77j8?ce*Vy>-bDBJ6s;8oLYEQf5^Xg{OAn1OX=y= z6AzumEBb}YO9(5=9t}fha0fqbUYpx}^3naGM#tFxYaea5UB2_k9b64I_BreKwaZ`h zb<)GR&nM(|%8J~7<{cGVz#nO*=$(FcF@|sZ6LU2J#}}at4u#5~t59JpJ`)pB2K1u% zGQJ|gD;}6lXI03^+9BcF4Ywb=$T0!{Jll1SgmhI0otAU*evy{yA#%Ot$*4#CRsDc* z-(wp)$M_y?q=;>}9$oV76aLIxYtn1tl=jeg+QueZDbAjo$iTk$wT$R1-Y@x2bdCV=$@Z9mM4GQg zRj0lz_-Aoph_}WKa4>u;)OLO}n96%sjb&j3Z$VihTqYf&5 z?W^VkrcT#N)80#0t!BA|wl)2yBRb8-B%7Ha`p z%*vk4UBz+sLsRSHQ+L*MNN1Ek9y6;OXgU4#2K~{(A7z7X2761l4TaVX;J->Y>m7n~ z==_*jK5x4=`Ql5#`!$;%>DOku7h2?CJ8j>n1;=9D1@Dvc{&{r?!q;GHPNRR{a}Ua{ z)^oWuvleR$=ZyUg?y|RIbBR2G*e~Y~_H{21v)9^K*!h2y2!C6}-Ahoq1Z4FXYm(>OeB;zK}~x z^Q*`?r-1f*KUy|@ecp(*zj(OJ+)_30L8;Dkx7G3=4@>Wu&E#KlefzB?OQ)$RHEF}v zvBkY@UN3h!l_^+?5BNB3|NKF->UwJM^WvBPBUx7O^EdfzK~qr9q7 zL`F_{vr|LLaKiNESskgTWhPpcxWG(wvR%*FhZ#7JzmR6bjEx1ZX&its9u|BW z(FarFNRNMb^~$D0XOf$?R1Q`;|IiiLs~vwdVlVg1r(-W|EzPHib}Ap|>a}H?T;eKI zUderCl;M)jlYpO|RQ{QxA08&&o!G?}EqU6WXf9E`%KbICfw=I&^T`XL0p?*hzJ9)w zwBzwxdA8Foi5G=T$UV{$ycJ*m1Q_lN8rWaE%GCZgeT$gwDO;O)e?vdK*gj_L+7fMS z#GFz1aHuHBehI11;lHa8*K{b?AuQ0!Ox}}&fe92`^zj(2DE)$&?4xPl`PB25rGt-*tGpa!zSj!}I_vEQ$>)dyC(! z6nK4838)`%9B%5p@^_lhm8!1MzR4c`XI=%pX4$zr+&&%1YTbGM?6#729R->0Ee7qM WSL<$Bk10Rfp4#3??$V7A0{;h&*7AD* literal 0 HcmV?d00001 diff --git a/assets/audio/sfx/success.ogg.import b/assets/audio/sfx/success.ogg.import new file mode 100644 index 0000000..0c2d141 --- /dev/null +++ b/assets/audio/sfx/success.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://deei1e3jakk8h" +path="res://.godot/imported/success.ogg-9a43de578b0ebd8a0f2f9ab78212bc97.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/sfx/success.ogg" +dest_files=["res://.godot/imported/success.ogg-9a43de578b0ebd8a0f2f9ab78212bc97.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/audio/sfx/try_again.ogg b/assets/audio/sfx/try_again.ogg new file mode 100644 index 0000000000000000000000000000000000000000..dc82ddb8101fb6ed77995972a01e7e15561ec8db GIT binary patch literal 6157 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 literal 0 HcmV?d00001 diff --git a/assets/audio/sfx/try_again.ogg.import b/assets/audio/sfx/try_again.ogg.import new file mode 100644 index 0000000..a024d89 --- /dev/null +++ b/assets/audio/sfx/try_again.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://be8oh2svk2iw6" +path="res://.godot/imported/try_again.ogg-cc39f10d8585af126002feade92b9083.oggvorbisstr" + +[deps] + +source_file="res://assets/audio/sfx/try_again.ogg" +dest_files=["res://.godot/imported/try_again.ogg-cc39f10d8585af126002feade92b9083.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/autoload/audio_manager.gd b/autoload/audio_manager.gd index be51477..b407ac0 100644 --- a/autoload/audio_manager.gd +++ b/autoload/audio_manager.gd @@ -1,26 +1,108 @@ extends Node -## Lecture des voix, dictees, musiques et effets sonores, y compris l'audio -## provisoire des dictees. Aucun fichier audio n'est encore fourni (etape -## "Graphismes et audio provisoires", a venir) : play_dictation se degrade -## silencieusement (avertissement journalise) si le fichier est absent, -## plutot que de faire planter le jeu. +## Lecture des voix (dictees), des effets sonores et de la musique d'ambiance. +## Les sons viennent d'identifiants resolus par SoundCatalog dans un +## repertoire fixe. Un fichier absent se degrade silencieusement +## (avertissement journalise) plutot que de faire planter le jeu. La musique +## baisse pendant qu'une dictee est lue, pour ne jamais couvrir la voix. -const DICTATION_AUDIO_DIR := "res://assets/audio/dictations" +const MUSIC_DUCK_DB := -12.0 +const MUSIC_BASE_DB := -6.0 -var _player: AudioStreamPlayer +var _voice_player: AudioStreamPlayer +var _music_player: AudioStreamPlayer +var _effect_players: Array[AudioStreamPlayer] = [] +var _current_music_id := "" +var _stream_cache: Dictionary = {} func _ready() -> void: - _player = AudioStreamPlayer.new() - add_child(_player) + AudioBuses.ensure() + _voice_player = AudioStreamPlayer.new() + _voice_player.finished.connect(_on_voice_finished) + add_child(_voice_player) + + _music_player = AudioStreamPlayer.new() + _music_player.bus = AudioBuses.MUSIC + _music_player.volume_db = MUSIC_BASE_DB + add_child(_music_player) + + for _i in range(4): + var player := AudioStreamPlayer.new() + player.bus = AudioBuses.EFFECTS + add_child(player) + _effect_players.append(player) + + # Un clic sur n'importe quel bouton du jeu produit le meme petit son. + get_tree().node_added.connect(_on_node_added) func play_dictation(audio_id: String) -> void: if audio_id.is_empty(): return - var path := "%s/%s.ogg" % [DICTATION_AUDIO_DIR, audio_id] + var path := "%s/%s.ogg" % ["res://assets/audio/dictations", audio_id] if not ResourceLoader.exists(path): push_warning("Audio de dictee introuvable (pas encore genere) : %s" % path) return - _player.stream = load(path) - _player.play() + _voice_player.stream = load(path) + _voice_player.play() + _music_player.volume_db = MUSIC_BASE_DB + MUSIC_DUCK_DB + + +func play_sfx(sfx_id: String) -> void: + var stream := _load_stream(SoundCatalog.sfx_path(sfx_id)) + if stream == null: + return + for player in _effect_players: + if not player.playing: + player.stream = stream + player.play() + return + # Tous les lecteurs sont occupes : on coupe le premier plutot que d'ignorer. + _effect_players[0].stream = stream + _effect_players[0].play() + + +## Lance la musique d'ambiance en boucle. Sans effet si c'est deja celle-ci. +func play_music(music_id: String) -> void: + if music_id == _current_music_id and _music_player.playing: + return + var stream := _load_stream(SoundCatalog.music_path(music_id)) + if stream == null: + return + if stream is AudioStreamOggVorbis: + (stream as AudioStreamOggVorbis).loop = true + _current_music_id = music_id + _music_player.stream = stream + _music_player.play() + + +func current_music_id() -> String: + return _current_music_id + + +func stop_music() -> void: + _current_music_id = "" + _music_player.stop() + + +func _load_stream(path: String) -> AudioStream: + if path.is_empty(): + return null + if _stream_cache.has(path): + return _stream_cache[path] + if not ResourceLoader.exists(path): + push_warning("Son introuvable : %s" % path) + return null + var stream: AudioStream = load(path) + _stream_cache[path] = stream + return stream + + +func _on_voice_finished() -> void: + _music_player.volume_db = MUSIC_BASE_DB + + +func _on_node_added(node: Node) -> void: + var button := node as BaseButton + if button != null and not button.has_meta("silent"): + button.pressed.connect(play_sfx.bind("click")) diff --git a/autoload/settings_manager.gd b/autoload/settings_manager.gd index e0b9bf3..7d96a62 100644 --- a/autoload/settings_manager.gd +++ b/autoload/settings_manager.gd @@ -1,5 +1,6 @@ extends Node -## Volume, taille du texte et animations. Les reglages sont ceux de l'appareil +## Volumes (general, musique, effets), taille du texte et animations. Les +## reglages sont ceux de l'appareil ## (user://settings.json), pas ceux d'un profil. Les valeurs sont nettoyees par ## AppSettings a chaque lecture ; un fichier absent ou abime redonne les valeurs ## par defaut sans erreur. Le volume agit sur le bus principal ; la taille du @@ -11,6 +12,8 @@ const SETTINGS_PATH := "user://settings.json" var animations_enabled := true var volume := 0.8 +var music_volume := 0.5 +var effects_volume := 0.8 var text_scale_index := 0 var _base_font_sizes: Dictionary = {} @@ -36,6 +39,16 @@ func set_volume(value: float) -> void: _commit() +func set_music_volume(value: float) -> void: + music_volume = clampf(value, 0.0, 1.0) + _commit() + + +func set_effects_volume(value: float) -> void: + effects_volume = clampf(value, 0.0, 1.0) + _commit() + + func set_text_scale_index(index: int) -> void: text_scale_index = clampi(index, 0, AppSettings.TEXT_SCALES.size() - 1) _commit() @@ -54,6 +67,8 @@ func load_from_disk() -> void: raw = JSON.parse_string(file.get_as_text()) var clean := AppSettings.sanitize(raw) volume = clean["volume"] + music_volume = clean["music_volume"] + effects_volume = clean["effects_volume"] text_scale_index = clean["text_scale_index"] animations_enabled = clean["animations_enabled"] @@ -62,6 +77,8 @@ func load_from_disk() -> void: func save_to_disk() -> bool: var data := AppSettings.defaults() data["volume"] = volume + data["music_volume"] = music_volume + data["effects_volume"] = effects_volume data["text_scale_index"] = text_scale_index data["animations_enabled"] = animations_enabled var tmp_path := SETTINGS_PATH + ".tmp" @@ -79,7 +96,14 @@ func save_to_disk() -> bool: ## Applique les reglages au moteur : volume du bus principal et tailles du ## theme global. func apply() -> void: + AudioBuses.ensure() AudioServer.set_bus_volume_db(0, AppSettings.volume_db(volume)) + AudioServer.set_bus_volume_db( + AudioServer.get_bus_index(AudioBuses.MUSIC), AppSettings.volume_db(music_volume) + ) + AudioServer.set_bus_volume_db( + AudioServer.get_bus_index(AudioBuses.EFFECTS), AppSettings.volume_db(effects_volume) + ) _apply_text_scale() diff --git a/data/localization/fr.json b/data/localization/fr.json index 7ac1435..44b5d99 100644 --- a/data/localization/fr.json +++ b/data/localization/fr.json @@ -75,7 +75,7 @@ "world_map.settings_button": "Réglages", "profile_select.settings_button": "Réglages", "settings.title": "Réglages", - "settings.volume_label": "Volume du son", + "settings.volume_label": "Volume général", "settings.text_size_label": "Taille du texte", "settings.text_size_0": "Normal", "settings.text_size_1": "Grand", @@ -107,5 +107,7 @@ "skill.accord_groupe_nominal": "Accords dans le groupe nominal", "skill.homophones_grammaticaux": "Homophones grammaticaux", "settings.animations_on": "Avec animations", - "settings.animations_off": "Sans animations" + "settings.animations_off": "Sans animations", + "settings.music_label": "Musique", + "settings.effects_label": "Effets sonores" } diff --git a/docs/specs/decisions.md b/docs/specs/decisions.md index 48f10d0..2f9a613 100644 --- a/docs/specs/decisions.md +++ b/docs/specs/decisions.md @@ -314,3 +314,15 @@ Ajouts à l'arborescence proposée : **Export et restauration** : l'export écrit la sauvegarde du profil telle quelle (JSON versionné) dans `Documents/AventuriersDesMots/` (repli `user://exports` si la plateforme n'expose pas Documents), sans jamais écraser un export précédent (`_2`, `_3`...). La restauration liste ce dossier, valide chaque fichier (migration + schéma ; les illisibles sont signalés et non restaurables) et crée toujours un NOUVEAU profil avec un identifiant neuf : aucun profil existant n'est jamais modifié. Aucun accès réseau, aucun sélecteur de fichier système (limite assumée : l'adulte dépose le fichier dans le dossier indiqué). **Tests** : AppSettings, ProgressReport, AdultGate, SaveTransfer (export, non-écrasement, restauration non destructive, fichiers invalides, dossier absent), intitulés de notions présents dans la traduction, barrière de l'espace adulte. **Non vérifié** (sans humain) : curseur de volume à l'oreille (aucun son d'interface n'existe encore, phase suivante), tactile, export vers un vrai dossier Documents sous Windows, résolutions autres que 1152x648. + +## 33. Phase « Son et musique » (version 0.5.0) + +**Sons** : 5 effets (`click`, `success`, `try_again`, `star`, `fanfare`) et 2 musiques d'ambiance en boucle (`forest` pour le CE1, `marsh` pour le CE2), synthétisés de façon procédurale par `tools/generate_sounds.py` (`make generate-sounds`, numpy + ffmpeg, aucun échantillon tiers, donc aucune attribution à ajouter). Résolus par identifiant dans un répertoire fixe (`SoundCatalog`). Fichier absent : avertissement, pas de plantage. + +**Intentions** : le retour « à retenter » est une courte phrase de deux notes douces qui montent, jamais un buzzer (une erreur n'est jamais punie) ; la fanfare ne retentit que pour 3 étoiles ou un objet gagné, sans lien avec la vitesse. Musiques calmes, sans percussions. Un clic sur n'importe quel bouton produit le même petit son (`AudioManager` observe les nouveaux boutons ; méta `silent` pour en exclure un). + +**Mixage** : bus `Music` et `Effects` créés à l'exécution, enfants du bus principal. Réglages : volume général, musique, effets (trois curseurs, `user://settings.json`, format des sauvegardes de profil inchangé). La musique baisse de 12 dB pendant la lecture d'une dictée pour ne jamais couvrir la voix. + +**Voix plus naturelles** : non traité. La voix Piper `fr_FR-siwis-medium` reste la voix provisoire (point 19) ; une voix plus naturelle suppose un enregistrement humain ou un autre modèle à évaluer à l'oreille, ce que je ne peux pas faire ici. Les dictées gardent le badge « voix provisoire ». + +**Tests** : catalogue (fichiers présents, aucun chemin libre), `AudioManager` (lecture, musique mémorisée), bus idempotents, bornes des volumes. **Non vérifié** : tout ce qui s'entend (timbre, niveau relatif musique/effets/voix, boucle sans claquement, agrément) ; vérifié seulement : durées et niveaux de crête des fichiers (aucun écrêtage). diff --git a/docs/testing/manual-checklist.md b/docs/testing/manual-checklist.md index 2d8e7a5..883b11b 100644 --- a/docs/testing/manual-checklist.md +++ b/docs/testing/manual-checklist.md @@ -43,6 +43,8 @@ Tout ce qui suit ne peut pas être vérifié sans écran (rendu, mise en page, a ## Audio +- Son et musique (point 33 de `decisions.md`) : clic sur les boutons, « Bravo » (accord montant) et « Pas tout à fait » (deux notes douces, jamais agressives), étoiles une à une puis fanfare à 3 étoiles ou objet gagné ; musique de forêt (CE1) et de marais (CE2), en boucle sans coupure audible, qui baisse pendant une dictée ; trois curseurs de réglages qui agissent bien chacun sur leur bus ; tout reste agréable à volume moyen et il n'y a jamais d'écrasement de la voix. + - `ce1_accord_adjectif_dictee_01` a un fichier audio provisoire généré par `make generate-dictation-audio` (voix neuronale Piper, voir `assets/CREDITS.md`). Testé manuellement : voix claire et bien comprise. - Toute dictée ajoutée sans régénérer son audio se dégrade silencieusement (avertissement en console, pas de plantage) : vérifier qu'aucune dictée manquante ne passe inaperçue avant diffusion (`make generate-dictation-audio` ne régénère pas l'existant, `--force` pour forcer). diff --git a/project.godot b/project.godot index 71aeab4..d67bc16 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="Les Aventuriers des mots" -config/version="0.4.0" +config/version="0.5.0" run/main_scene="res://scenes/boot/boot.tscn" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="res://icon.svg" diff --git a/scenes/exercises/exercise_host.gd b/scenes/exercises/exercise_host.gd index 767c536..b5f4090 100644 --- a/scenes/exercises/exercise_host.gd +++ b/scenes/exercises/exercise_host.gd @@ -66,6 +66,7 @@ func _ready() -> void: _skill_id = _rule.get("skill", "") _current_difficulty = ProgressManager.next_difficulty_for_skill(_skill_id, 1) $Backdrop.kind = "marsh" if _rule.get("level", "CE1") == "CE2" else "forest" + AudioManager.play_music(SoundCatalog.music_for_level(_rule.get("level", "CE1"))) _show_rule_panel() @@ -171,6 +172,7 @@ func _handle_result(result: CorrectionResult) -> void: ProgressManager.record_attempt( _skill_id, result.is_correct, _attempt_number > 1, _mission["exercise_type"] ) + AudioManager.play_sfx("success" if result.is_correct else "try_again") _show_feedback(result, support_level, is_terminal) diff --git a/scenes/profiles/profile_select.gd b/scenes/profiles/profile_select.gd index 0588ec2..29cfff0 100644 --- a/scenes/profiles/profile_select.gd +++ b/scenes/profiles/profile_select.gd @@ -28,6 +28,7 @@ func _ready() -> void: _new_profile_button.pressed.connect(_on_new_profile_pressed) _delete_confirm_dialog.confirmed.connect(_on_delete_confirmed) + AudioManager.play_music("forest") _refresh_profile_list() diff --git a/scenes/ui/reward_screen.gd b/scenes/ui/reward_screen.gd index 05f7f46..0b2f424 100644 --- a/scenes/ui/reward_screen.gd +++ b/scenes/ui/reward_screen.gd @@ -28,6 +28,7 @@ func _ready() -> void: var mission := ExerciseEngine.get_mission(GameManager.pending_mission_id) var rule := ExerciseEngine.get_rule(mission.get("rule_id", "")) _backdrop.kind = "marsh" if rule.get("level", "CE1") == "CE2" else "forest" + AudioManager.play_music(SoundCatalog.music_for_level(rule.get("level", "CE1"))) var summary := ProgressManager.complete_mission( GameManager.pending_mission_id, GameManager.last_outcomes @@ -47,6 +48,10 @@ func _ready() -> void: "%s %d" % [UIText.get_text("reward_screen.total_label"), summary["total_stars"]] ) _show_new_items(summary["new_items"]) + if summary["stars"] == MissionScoring.MAX_STARS or not summary["new_items"].is_empty(): + get_tree().create_timer(0.25 + 0.2 * MissionScoring.MAX_STARS).timeout.connect( + AudioManager.play_sfx.bind("fanfare") + ) _collection_button.text = UIText.get_text("reward_screen.collection_button") _collection_button.pressed.connect(_on_collection_pressed) @@ -64,6 +69,9 @@ func _show_stars(earned: int) -> void: _stars_row.add_child(star) if i < earned: Motion.pop_in(star, 0.25 + 0.2 * i) + get_tree().create_timer(0.25 + 0.2 * i).timeout.connect( + AudioManager.play_sfx.bind("star") + ) func _show_new_items(new_items: Array) -> void: diff --git a/scenes/ui/settings.gd b/scenes/ui/settings.gd index 77120b0..1838e76 100644 --- a/scenes/ui/settings.gd +++ b/scenes/ui/settings.gd @@ -7,6 +7,10 @@ extends Control @onready var _title_label: Label = %TitleLabel @onready var _volume_label: Label = %VolumeLabel @onready var _volume_slider: HSlider = %VolumeSlider +@onready var _music_label: Label = %MusicLabel +@onready var _music_slider: HSlider = %MusicSlider +@onready var _effects_label: Label = %EffectsLabel +@onready var _effects_slider: HSlider = %EffectsSlider @onready var _text_size_label: Label = %TextSizeLabel @onready var _text_size_box: HBoxContainer = %TextSizeBox @onready var _animations_label: Label = %AnimationsLabel @@ -23,11 +27,14 @@ func _ready() -> void: _adult_button.text = UIText.get_text("settings.adult_button") _back_button.text = UIText.get_text("settings.back_button") - _volume_slider.min_value = 0.0 - _volume_slider.max_value = 1.0 - _volume_slider.step = 1.0 / AppSettings.VOLUME_STEPS - _volume_slider.value = SettingsManager.volume - _volume_slider.value_changed.connect(_on_volume_changed) + _music_label.text = UIText.get_text("settings.music_label") + _effects_label.text = UIText.get_text("settings.effects_label") + _setup_slider(_volume_slider, SettingsManager.volume, _on_volume_changed) + _setup_slider(_music_slider, SettingsManager.music_volume, _on_music_changed) + _setup_slider(_effects_slider, SettingsManager.effects_volume, _on_effects_changed) + # Un petit son a la fin du geste fait entendre le niveau choisi. + _volume_slider.drag_ended.connect(_on_drag_ended) + _effects_slider.drag_ended.connect(_on_drag_ended) _build_text_size_buttons() @@ -65,10 +72,30 @@ func _build_animation_buttons() -> void: _animations_box.add_child(button) +func _setup_slider(slider: HSlider, value: float, handler: Callable) -> void: + slider.min_value = 0.0 + slider.max_value = 1.0 + slider.step = 1.0 / AppSettings.VOLUME_STEPS + slider.value = value + slider.value_changed.connect(handler) + + func _on_volume_changed(value: float) -> void: SettingsManager.set_volume(value) +func _on_music_changed(value: float) -> void: + SettingsManager.set_music_volume(value) + + +func _on_effects_changed(value: float) -> void: + SettingsManager.set_effects_volume(value) + + +func _on_drag_ended(_value_changed: bool) -> void: + AudioManager.play_sfx("success") + + func _on_text_size_pressed(index: int) -> void: SettingsManager.set_text_scale_index(index) diff --git a/scenes/ui/settings.tscn b/scenes/ui/settings.tscn index 7a582c4..5452a13 100644 --- a/scenes/ui/settings.tscn +++ b/scenes/ui/settings.tscn @@ -49,14 +49,55 @@ layout_mode = 2 theme_type_variation = &"CardTitle" horizontal_alignment = 1 -[node name="VolumeLabel" type="Label" parent="Margin/Center/Card/VBox"] +[node name="VolumeRow" type="HBoxContainer" parent="Margin/Center/Card/VBox"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="VolumeLabel" type="Label" parent="Margin/Center/Card/VBox/VolumeRow"] unique_name_in_owner = true layout_mode = 2 +custom_minimum_size = Vector2(230, 0) theme_type_variation = &"Emphasis" -[node name="VolumeSlider" type="HSlider" parent="Margin/Center/Card/VBox"] +[node name="VolumeSlider" type="HSlider" parent="Margin/Center/Card/VBox/VolumeRow"] unique_name_in_owner = true layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +custom_minimum_size = Vector2(0, 40) + +[node name="MusicRow" type="HBoxContainer" parent="Margin/Center/Card/VBox"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="MusicLabel" type="Label" parent="Margin/Center/Card/VBox/MusicRow"] +unique_name_in_owner = true +layout_mode = 2 +custom_minimum_size = Vector2(230, 0) +theme_type_variation = &"Emphasis" + +[node name="MusicSlider" type="HSlider" parent="Margin/Center/Card/VBox/MusicRow"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 +custom_minimum_size = Vector2(0, 40) + +[node name="EffectsRow" type="HBoxContainer" parent="Margin/Center/Card/VBox"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="EffectsLabel" type="Label" parent="Margin/Center/Card/VBox/EffectsRow"] +unique_name_in_owner = true +layout_mode = 2 +custom_minimum_size = Vector2(230, 0) +theme_type_variation = &"Emphasis" + +[node name="EffectsSlider" type="HSlider" parent="Margin/Center/Card/VBox/EffectsRow"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 4 custom_minimum_size = Vector2(0, 40) [node name="TextSizeLabel" type="Label" parent="Margin/Center/Card/VBox"] diff --git a/scenes/world/world_map.gd b/scenes/world/world_map.gd index cf23295..be52827 100644 --- a/scenes/world/world_map.gd +++ b/scenes/world/world_map.gd @@ -40,6 +40,7 @@ func _ready() -> void: func _refresh() -> void: var is_ce2 := _viewed_level == "CE2" _backdrop.kind = "marsh" if is_ce2 else "forest" + AudioManager.play_music(SoundCatalog.music_for_level(_viewed_level)) _title_label.text = UIText.get_text("world_map.title_ce2" if is_ce2 else "world_map.title") _level_toggle_button.text = UIText.get_text( "world_map.review_ce1_button" if is_ce2 else "world_map.back_to_ce2_button" diff --git a/scripts/audio/audio_buses.gd b/scripts/audio/audio_buses.gd new file mode 100644 index 0000000..0eaf769 --- /dev/null +++ b/scripts/audio/audio_buses.gd @@ -0,0 +1,20 @@ +class_name AudioBuses +extends RefCounted +## Bus audio du jeu, crees a l'execution (pas de fichier de disposition a +## maintenir) : « Music » et « Effects » sont des enfants du bus principal, +## dont le volume est le volume general. Les voix des dictees restent sur le +## bus principal : elles ne sont jamais couvertes par la musique. + +const MUSIC := "Music" +const EFFECTS := "Effects" + + +## Cree les bus manquants. Idempotent. +static func ensure() -> void: + for bus_name in [MUSIC, EFFECTS]: + if AudioServer.get_bus_index(bus_name) != -1: + continue + AudioServer.add_bus() + var index := AudioServer.bus_count - 1 + AudioServer.set_bus_name(index, bus_name) + AudioServer.set_bus_send(index, "Master") diff --git a/scripts/audio/audio_buses.gd.uid b/scripts/audio/audio_buses.gd.uid new file mode 100644 index 0000000..9de3488 --- /dev/null +++ b/scripts/audio/audio_buses.gd.uid @@ -0,0 +1 @@ +uid://04s3ocs22q7g diff --git a/scripts/audio/sound_catalog.gd b/scripts/audio/sound_catalog.gd new file mode 100644 index 0000000..2a9c3f0 --- /dev/null +++ b/scripts/audio/sound_catalog.gd @@ -0,0 +1,27 @@ +class_name SoundCatalog +extends RefCounted +## Identifiants des effets sonores et des musiques, resolus vers un fichier +## d'un repertoire fixe (jamais de chemin libre : voir CLAUDE.md). Code pur. + +const SFX_DIR := "res://assets/audio/sfx" +const MUSIC_DIR := "res://assets/audio/music" + +const SFX_IDS: Array[String] = ["click", "success", "try_again", "star", "fanfare"] +const MUSIC_IDS: Array[String] = ["forest", "marsh"] + + +static func sfx_path(sfx_id: String) -> String: + if not SFX_IDS.has(sfx_id): + return "" + return "%s/%s.ogg" % [SFX_DIR, sfx_id] + + +static func music_path(music_id: String) -> String: + if not MUSIC_IDS.has(music_id): + return "" + return "%s/%s.ogg" % [MUSIC_DIR, music_id] + + +## Musique d'une region selon le niveau scolaire de la regle. +static func music_for_level(level: String) -> String: + return "marsh" if level == "CE2" else "forest" diff --git a/scripts/audio/sound_catalog.gd.uid b/scripts/audio/sound_catalog.gd.uid new file mode 100644 index 0000000..31b8b17 --- /dev/null +++ b/scripts/audio/sound_catalog.gd.uid @@ -0,0 +1 @@ +uid://dvg367cd47sam diff --git a/scripts/settings/app_settings.gd b/scripts/settings/app_settings.gd index 8d53581..c565f0d 100644 --- a/scripts/settings/app_settings.gd +++ b/scripts/settings/app_settings.gd @@ -20,6 +20,8 @@ static func defaults() -> Dictionary: return { "format_version": FORMAT_VERSION, "volume": 0.8, + "music_volume": 0.5, + "effects_volume": 0.8, "text_scale_index": 0, "animations_enabled": true, } @@ -35,6 +37,10 @@ static func sanitize(raw: Variant) -> Dictionary: var volume: Variant = source.get("volume") if typeof(volume) == TYPE_FLOAT or typeof(volume) == TYPE_INT: result["volume"] = clampf(float(volume), 0.0, 1.0) + for key: String in ["music_volume", "effects_volume"]: + var other: Variant = source.get(key) + if typeof(other) == TYPE_FLOAT or typeof(other) == TYPE_INT: + result[key] = clampf(float(other), 0.0, 1.0) var index: Variant = source.get("text_scale_index") if typeof(index) == TYPE_FLOAT or typeof(index) == TYPE_INT: result["text_scale_index"] = clampi(int(index), 0, TEXT_SCALES.size() - 1) diff --git a/tests/audio/test_sound_catalog.gd b/tests/audio/test_sound_catalog.gd new file mode 100644 index 0000000..549f355 --- /dev/null +++ b/tests/audio/test_sound_catalog.gd @@ -0,0 +1,44 @@ +extends GutTest +## Chaque identifiant sonore pointe vers un fichier present ; un identifiant +## inconnu ne produit jamais de chemin libre. + + +func test_every_sfx_file_exists() -> void: + for sfx_id in SoundCatalog.SFX_IDS: + assert_true(ResourceLoader.exists(SoundCatalog.sfx_path(sfx_id)), sfx_id) + + +func test_every_music_file_exists() -> void: + for music_id in SoundCatalog.MUSIC_IDS: + assert_true(ResourceLoader.exists(SoundCatalog.music_path(music_id)), music_id) + + +func test_unknown_ids_give_no_path() -> void: + assert_eq(SoundCatalog.sfx_path("../../etc/passwd"), "") + assert_eq(SoundCatalog.music_path("inconnue"), "") + + +func test_music_follows_the_level() -> void: + assert_eq(SoundCatalog.music_for_level("CE1"), "forest") + assert_eq(SoundCatalog.music_for_level("CE2"), "marsh") + + +func test_audio_manager_plays_without_crashing_and_remembers_music() -> void: + AudioManager.play_sfx("success") + AudioManager.play_music("marsh") + assert_eq(AudioManager.current_music_id(), "marsh") + AudioManager.play_music("marsh") + AudioManager.stop_music() + assert_eq(AudioManager.current_music_id(), "") + + +func test_buses_exist_and_are_idempotent() -> void: + AudioBuses.ensure() + AudioBuses.ensure() + assert_ne(AudioServer.get_bus_index(AudioBuses.MUSIC), -1) + assert_ne(AudioServer.get_bus_index(AudioBuses.EFFECTS), -1) + var count := 0 + for i in AudioServer.bus_count: + if AudioServer.get_bus_name(i) == AudioBuses.MUSIC: + count += 1 + assert_eq(count, 1) diff --git a/tests/audio/test_sound_catalog.gd.uid b/tests/audio/test_sound_catalog.gd.uid new file mode 100644 index 0000000..9cf79e5 --- /dev/null +++ b/tests/audio/test_sound_catalog.gd.uid @@ -0,0 +1 @@ +uid://c61j06k8itgcq diff --git a/tests/settings/test_app_settings.gd b/tests/settings/test_app_settings.gd index 0ad5bf0..16ee29a 100644 --- a/tests/settings/test_app_settings.gd +++ b/tests/settings/test_app_settings.gd @@ -35,3 +35,10 @@ func test_zero_volume_is_real_silence() -> void: assert_eq(AppSettings.volume_db(0.0), -80.0) assert_eq(AppSettings.volume_db(1.0), 0.0) assert_lt(AppSettings.volume_db(0.5), 0.0) + + +func test_music_and_effects_volumes_are_bounded() -> void: + var clean := AppSettings.sanitize({"music_volume": 3, "effects_volume": -1}) + assert_eq(clean["music_volume"], 1.0) + assert_eq(clean["effects_volume"], 0.0) + assert_eq(AppSettings.sanitize({})["music_volume"], AppSettings.defaults()["music_volume"]) diff --git a/tools/generate_sounds.py b/tools/generate_sounds.py new file mode 100644 index 0000000..7bd3e8c --- /dev/null +++ b/tools/generate_sounds.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python3 +"""Genere les effets sonores et les musiques d'ambiance du jeu. + +Synthese entierement procedurale (numpy, aucune banque de sons, aucun +echantillon tiers) puis encodage en Ogg Vorbis par ffmpeg. Les sons sont donc +originaux et sous la meme licence que le depot. Outil de redaction de +contenu : il ne tourne jamais pendant le jeu. Ne regenere pas un fichier deja +present, sauf avec --force. + +Intentions sonores : un retour « a retenter » reste doux et interrogatif +(jamais de buzzer : une erreur n'est pas punie) ; les musiques sont calmes, +sans percussions, pour ne pas distraire de la regle etudiee. +""" + +from __future__ import annotations + +import argparse +import subprocess +import tempfile +import wave +from pathlib import Path + +import numpy as np +from numpy.typing import NDArray + +REPO_ROOT = Path(__file__).resolve().parent.parent +SFX_DIR = REPO_ROOT / "assets" / "audio" / "sfx" +MUSIC_DIR = REPO_ROOT / "assets" / "audio" / "music" +SAMPLE_RATE = 32000 + +Signal = NDArray[np.float64] + + +def _time(duration: float) -> Signal: + return np.arange(int(duration * SAMPLE_RATE)) / SAMPLE_RATE + + +def bell(freq: float, duration: float, decay: float = 5.0, brightness: float = 0.4) -> Signal: + """Note de cloche douce : fondamentale + deux partiels qui s'eteignent.""" + t = _time(duration) + tone = np.sin(2 * np.pi * freq * t) + tone += brightness * np.sin(2 * np.pi * freq * 2.0 * t) * np.exp(-decay * 1.6 * t) + tone += brightness * 0.5 * np.sin(2 * np.pi * freq * 3.01 * t) * np.exp(-decay * 2.2 * t) + attack = np.minimum(t / 0.004, 1.0) + return tone * np.exp(-decay * t) * attack + + +def pad(freq: float, duration: float, attack: float = 1.2, release: float = 1.5) -> Signal: + """Note tenue, douce (sinus + octave legere), a attaque et fin lentes.""" + t = _time(duration) + tone = np.sin(2 * np.pi * freq * t) + 0.25 * np.sin(2 * np.pi * freq * 2 * t) + tone += 0.12 * np.sin(2 * np.pi * freq * 1.003 * t) # leger battement + env = np.minimum(t / attack, 1.0) * np.minimum((duration - t) / release, 1.0) + return tone * np.clip(env, 0.0, 1.0) + + +def place(target: Signal, sound: Signal, start: float, gain: float = 1.0) -> None: + begin = int(start * SAMPLE_RATE) + end = min(begin + len(sound), len(target)) + if begin < len(target): + target[begin:end] += sound[: end - begin] * gain + + +def normalise(signal: Signal, peak: float) -> Signal: + top = float(np.max(np.abs(signal))) + return signal * (peak / top) if top > 0 else signal + + +def hz(note: str) -> float: + names = {"C": 0, "D": 2, "E": 4, "F": 5, "G": 7, "A": 9, "B": 11} + pitch = names[note[0]] + (1 if note[1] == "#" else 0) + octave = int(note[-1]) + midi = 12 * (octave + 1) + pitch + return 440.0 * 2 ** ((midi - 69) / 12) + + +def make_sfx() -> dict[str, Signal]: + sounds: dict[str, Signal] = {} + + click = bell(hz("A5"), 0.12, decay=38.0, brightness=0.2) + sounds["click"] = normalise(click, 0.45) + + success = np.zeros(int(1.0 * SAMPLE_RATE)) + for index, note in enumerate(["C5", "E5", "G5"]): + place(success, bell(hz(note), 0.8, decay=4.5), 0.1 * index) + sounds["success"] = normalise(success, 0.6) + + # Deux notes douces qui montent legerement : une question, pas un reproche. + again = np.zeros(int(0.8 * SAMPLE_RATE)) + place(again, bell(hz("E4"), 0.6, decay=6.0, brightness=0.25), 0.0) + place(again, bell(hz("G4"), 0.6, decay=6.0, brightness=0.25), 0.18) + sounds["try_again"] = normalise(again, 0.5) + + star = bell(hz("E6"), 0.9, decay=4.0, brightness=0.5) + sounds["star"] = normalise(star, 0.55) + + fanfare = np.zeros(int(2.0 * SAMPLE_RATE)) + for index, note in enumerate(["C5", "E5", "G5", "C6"]): + place(fanfare, bell(hz(note), 1.2, decay=3.5), 0.14 * index) + for note in ["C5", "E5", "G5", "C6"]: + place(fanfare, bell(hz(note), 1.4, decay=2.8), 0.6, gain=0.7) + sounds["fanfare"] = normalise(fanfare, 0.65) + return sounds + + +def make_music( + chords: list[list[str]], + melody_scale: list[str], + seconds_per_chord: float, + seed: int, + melody_density: float, +) -> Signal: + """Boucle : accords tenus + quelques notes de melodie pentatonique. + + La queue de la derniere note est repliee sur le debut pour que la boucle + ne presente ni coupure ni claquement. + """ + rng = np.random.default_rng(seed) + body = seconds_per_chord * len(chords) + tail = 3.0 + track = np.zeros(int((body + tail) * SAMPLE_RATE)) + for index, chord in enumerate(chords): + start = index * seconds_per_chord + for note in chord: + place(track, pad(hz(note), seconds_per_chord + 1.2), start, gain=0.35) + beat = seconds_per_chord / 4 + for step in range(len(chords) * 4): + if rng.random() < melody_density: + note = melody_scale[int(rng.integers(len(melody_scale)))] + place(track, bell(hz(note), 2.0, decay=2.4, brightness=0.3), step * beat, gain=0.28) + folded = track[: int(body * SAMPLE_RATE)].copy() + overflow = track[int(body * SAMPLE_RATE) :] + folded[: len(overflow)] += overflow + return normalise(folded, 0.5) + + +def make_all_music() -> dict[str, Signal]: + forest = make_music( + chords=[["C3", "G3", "E4"], ["A2", "E3", "C4"], ["F2", "C3", "A3"], ["G2", "D3", "B3"]] * 2, + melody_scale=["C5", "D5", "E5", "G5", "A5", "C6"], + seconds_per_chord=4.0, + seed=11, + melody_density=0.45, + ) + marsh = make_music( + chords=[["A2", "E3", "C4"], ["F2", "C3", "A3"], ["D3", "A3", "F4"], ["E3", "B3", "G4"]] * 2, + melody_scale=["A4", "C5", "D5", "E5", "G5"], + seconds_per_chord=5.0, + seed=23, + melody_density=0.35, + ) + return {"forest": forest, "marsh": marsh} + + +def write_ogg(signal: Signal, destination: Path, quality: str = "3") -> None: + destination.parent.mkdir(parents=True, exist_ok=True) + pcm = (np.clip(signal, -1.0, 1.0) * 32767).astype(np.int16) + with tempfile.TemporaryDirectory() as tmp: + wav_path = Path(tmp) / "source.wav" + with wave.open(str(wav_path), "wb") as handle: + handle.setnchannels(1) + handle.setsampwidth(2) + handle.setframerate(SAMPLE_RATE) + handle.writeframes(pcm.tobytes()) + subprocess.run( + ["ffmpeg", "-y", "-loglevel", "error", "-i", str(wav_path), + "-c:a", "libvorbis", "-q:a", quality, str(destination)], + check=True, + ) + + +def main() -> None: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--force", action="store_true", help="regenere les fichiers existants") + args = parser.parse_args() + + jobs: list[tuple[Path, Signal]] = [] + for name, signal in make_sfx().items(): + jobs.append((SFX_DIR / f"{name}.ogg", signal)) + for name, signal in make_all_music().items(): + jobs.append((MUSIC_DIR / f"{name}.ogg", signal)) + + for destination, signal in jobs: + if destination.exists() and not args.force: + print(f"existe deja : {destination.relative_to(REPO_ROOT)}") + continue + write_ogg(signal, destination) + print(f"genere : {destination.relative_to(REPO_ROOT)}") + + +if __name__ == "__main__": + main()