# Temps mort : d'où viennent les ressources

## Les basketteurs de la salle en 3D (`persos.bin`, `persos-normales.webp`, `persos-normales-1024.webp`)

- **Le corps** : le corps masculin réaliste (« GEO-body_male_realistic », un scan de Dan Ulrich avec ses niveaux de détail) des **Human Base Meshes** v1.4.1 de Blender Studio et de la communauté Blender, le même que pour Mêlée.
  - Licence : **CC0 1.0** (domaine public). Le fichier du pack le dit : « All provided assets are public domain under the CC0 license. »
  - Source : https://www.blender.org/download/demo-files/ (rubrique Asset Bundles), archive `human-base-meshes-bundle-v1.4.1.zip` (https://mirror.blender.org/demo/asset-bundles/human-base-meshes/human-base-meshes-bundle-v1.4.1.zip).
- **Ce qu'on en a fait** : `scripts/persos-tempsmort/` (Blender 5.2, en arrière-plan ; `sh scripts/persos-tempsmort/fabrique.sh <dossier>` refait tout), repris de `scripts/persos-melee/`. Le corps est rigué sur les 15 os de `figurine.js` (mêmes noms, rotations nulles au repos), posé, mis à 1,95 m, puis taillé en basketteur par `forme.py` (jambes 7,5 % plus longues, corps 7 % plus fin sous les épaules, ventre et entrejambe aplatis devant, tête et cou intacts) ; habillé en coques : maillot sans manches (encolure et emmanchures coupées net, liseré), short long et ample, chaussettes à mi-mollet, baskets montantes, poignet éponge ; deux niveaux de détail (environ 14 000 triangles pour l'ordinateur, 5 900 pour le téléphone, les traits du visage protégés). Les coupes de cheveux (ras, dégradé, tresses, dreads en cordes, afro, mi-longs) et le bandeau sont des coques ajoutées par le script. L'ombre des creux est calculée par le script. Les couleurs (clubs, numéros, noms, peau, sourcils, lèvres, barbe, yeux, chaussures) sont peintes par `figurine.js` pour chaque joueur.
- **La carte de normales** (2048 pixels pour l'ordinateur, 1024 pour le téléphone) : cuite par Cycles depuis le niveau 3 de la multirésolution du même scan pour la peau, et depuis la tenue en haute définition pour le tissu (plis, coutures, côtes des chaussettes, fronces de la ceinture : `tissu.py`, aucune ressource extérieure). R et G : la normale dans l'espace tangent ; B : l'ombre fine des creux. Même licence que le scan (CC0) ; le WebP est produit par Pillow (qualité 95).
- **Les mouvements** et les poses de repos : écrits à la main dans `figurine.js` ; aucune capture de mouvement ni ressource extérieure.

## La foule de la salle (`foule.webp`)

- **L'atlas de Mêlée, copié tel quel** (le même fichier, 82 Ko) : 120 supporters de 64 × 128 (cinq allures, six poses, quatre angles), rendus dans Blender 5.2 par `scripts/foule-melee/` à partir du même scan **CC0** que les joueurs (« GEO-body_male_realistic » des Human Base Meshes v1.4.1). Le détail est dans `../melee/SOURCES.md`, section « La foule du stade ». `arene.js` en fait des imposteurs (chaque supporter est une image tournée vers la caméra) et met les couleurs. Fait par nous, à partir d'une ressource CC0.

## Les sons de la salle (`sons/lits.m4a`, `sons/foule.m4a`, `sons/jeu.m4a`)

Tous les enregistrements viennent de **freesound.org** et sont sous licence **CC0 1.0** (domaine public, usage commercial permis, sans attribution obligatoire). La licence a été lue sur la fiche de chaque son le 27/10/2026. On a pris l'aperçu public de chaque son (Ogg Vorbis, environ 192 kb/s), qui se télécharge sans compte.

Ce qu'on en a fait : `scripts/sons-tempsmort/prepare.py` découpe (les rebonds, crissements, filets, planches et cercles sont pris aux attaques les plus nettes de chaque enregistrement), nettoie (passe-haut, passe-bas, fondus), règle le niveau et encode en AAC 32 kHz. `lits.m4a` (les trois boucles de la salle, stéréo, 64 kb/s), `foule.m4a` (les réactions, stéréo, 64 kb/s), `jeu.m4a` (les bruits du jeu, mono, 48 kb/s) ; `sons.json` dit où est chaque son.

### La salle (boucles et réactions)

| Dans le jeu | Son (fiche freesound) | Auteur | Morceau pris |
|---|---|---|---|
| `rumeur`, `rumeur2` | [basketball crowd.wav](https://freesound.org/people/tennisers/sounds/643345/) | tennisers | 120 à 135 s ; 160 à 170 s |
| `chaude` | [Boston Garden Celtics Ambience 2](https://freesound.org/people/Douglas711/sounds/424297/) | Douglas711 | 5 à 19 s (passe-haut à 150 Hz) |
| `clameur3`, `sirene2` | [High school basketball game with crowd noise](https://freesound.org/people/blurry_bear/sounds/719952/) | blurry_bear | 448,55 à 452,9 s ; 284,22 à 286,55 s |
| `applaudir3` | [Hockey arena goal horn with crowd applause](https://freesound.org/people/SEF7/sounds/702099/) | SEF7 | 12,4 à 19,4 s (après la corne) |
| `ovation1` | [Hockey arena pregame applause](https://freesound.org/people/SEF7/sounds/706732/) | SEF7 | 2 à 14 s |
| `clameur1`, `clameur2` | [19 Football Crowd - Reaction To Goal](https://freesound.org/people/D.jones/sounds/528799/) | D.jones | 3,75 à 10,25 s ; 55,3 à 61,3 s |
| `montee1` | [crowd large cheer arena stadium hockey game Montreal](https://freesound.org/people/kyles/sounds/629884/) | kyles | 11,2 à 17,95 s |
| `applaudir1` | [Clapping Large Crowd at Choir Concert 18](https://freesound.org/people/pluralz/sounds/735578/) | pluralz | 1 à 5,6 s |
| `applaudir2` | [applause cheer ext medium crowd enthusiastic whistling](https://freesound.org/people/kyles/sounds/455659/) | kyles | 20,4 à 25,4 s |
| `bouh1` | [JM_AMB_INT_Crowd Sport 01 - Booing](https://freesound.org/people/Julien_Matthey/sounds/557189/) | Julien_Matthey | 1,6 à 7,6 s |
| `bouh2` | [AF Crowd Boo Hiss LOOP](https://freesound.org/people/mglennsound/sounds/678538/) | mglennsound | 0,6 à 5,1 s |
| `deception1` | [crowd oh disappointed](https://freesound.org/people/mrrap4food/sounds/619007/) | mrrap4food | 0,05 à 2,05 s (canal gauche) |
| `ooh1` à `ooh3` | [Crowd Ooohs and Ahhhs in Excitement](https://freesound.org/people/noah0189/sounds/264499/) | noah0189 | 5,9 à 7,6 s ; 11,1 à 13 s ; 14 à 16,4 s |
| `siffletsFoule1` | [crowd ext large cheering parade +whistling](https://freesound.org/people/kyles/sounds/637438/) | kyles | 9 à 13 s |

Les réactions de la deuxième partie du tableau (de `clameur1` à `siffletsFoule1`) sont celles de Mêlée, reprises telles quelles.

### Le jeu

| Dans le jeu | Son (fiche freesound) | Auteur | Morceau pris |
|---|---|---|---|
| `rebond1` à `rebond4` | [Bouncing basketball](https://freesound.org/people/DigPro120/sounds/811910/) | DigPro120 | 0,42 s à partir de 0,30 ; 1,42 ; 3,35 ; 4,01 s |
| `rebond5` à `rebond7` | [Basketball bounce.WAV](https://freesound.org/people/cribbler/sounds/396309/) | cribbler | 0,42 s à partir de 2,11 ; 3,63 ; 5,14 s |
| `crisse1` à `crisse7` | [sneaker squeak rubber.wav](https://freesound.org/people/shakaharu/sounds/88502/) | shakaharu | 0,3 s à partir de 1,71 ; 2,12 ; 3,41 ; 4,65 ; 5,76 ; 7,01 ; 8,67 s |
| `filet1` à `filet6` | [Basketball Net Swish Sound.wav](https://freesound.org/people/Hann90/sounds/518048/) | Hann90 | 0,42 s à partir de 0,21 ; 1,65 ; 2,79 ; 3,51 ; 4,15 ; 5,03 s |
| `planche1` à `planche4` | [S02-28 Basketball hard against backboard.wav](https://freesound.org/people/craigsmith/sounds/675319/) | craigsmith | 0,8 s à partir de 2,25 ; 3,91 ; 5,56 ; 17,49 s |
| `cercle1` à `cercle4` | [basketball.wav](https://freesound.org/people/reedhos/sounds/244348/) | reedhos | 0,95 s à partir de 1,71 ; 3,22 ; 4,60 ; 5,97 s |
| `siffletCourt1` | [Referee whistle sound](https://freesound.org/people/Rosa-Orenes256/sounds/538422/) | Rosa-Orenes256 | 0 à 0,42 s |
| `siffletCourt2`, `siffletCourt3`, `siffletLong2`, `siffletLong3` | [metal whistle](https://freesound.org/people/strongbot/sounds/568995/) | strongbot | 15,58 s ; 3,66 s ; 12,7 s ; 6,72 s |
| `siffletLong1` | [Referee whistle blow, gymnasium](https://freesound.org/people/SpliceSound/sounds/218318/) | SpliceSound | 0,05 à 1,08 s |
| `sirene1` | [Buzzer Sound](https://freesound.org/people/rabeladdie/sounds/828060/) | rabeladdie | 0,09 à 0,95 s, le son tenu prolongé à 1,7 s par fondus enchaînés |
| `orgue1` | [Baseball calvary sting long sustain.wav](https://freesound.org/people/vckhaze/sounds/380696/) | vckhaze | en entier (4,6 s) |
| `orgue2` | [Baseball cavalry sting short sustain.wav](https://freesound.org/people/vckhaze/sounds/380695/) | vckhaze | en entier (3 s) |

Les sifflets sont ceux de Mêlée. L'air « Charge ! » de l'orgue est une sonnerie de cavalerie traditionnelle, sans droits.

Écartés : les chants de supporters dont on ne comprend pas les mots (« Fans at Basketball Game », phillyfan972), les passages du TD Garden où l'on entend la musique de la sono (des chansons protégées), la corne de but du hockey (elle ne sonne pas basket), un « bounce » sans parquet (zmobie, Blankened).

Toujours fabriqués par le navigateur (`son.js`) : les chants « DÉ-FENSE » et « CHAR-GE ! », le cœur des moments clés, la passe, le contre, les sons de l'interface, la réverbération de la salle ; et toute la synthèse d'avant, en secours si les fichiers manquent.

## Les sons de l'appel et du gymnase (`sons/appel.m4a`, `sons/gym.m4a`, vague 1 de la révolution)

Tous les enregistrements viennent de **freesound.org** et sont sous licence **CC0 1.0** (domaine public, usage commercial permis, sans attribution obligatoire). La licence a été lue sur la fiche de chaque son le 29/10/2026. On a pris l'aperçu public de chaque son (Ogg Vorbis), qui se télécharge sans compte. Aucun son de marque, rien de copié d'un jeu.

Ce qu'on en a fait : `scripts/sons-tempsmort/appel.py` (il reprend les outils de `prepare.py`) découpe, nettoie (passe-haut, fondus), règle le niveau et encode en AAC 32 kHz. Il en sort `appel.m4a` (mono, 48 kb/s, 43 Ko, chargé avec les autres sons) et `gym.m4a` (stéréo, 40 kb/s, 226 Ko, chargé seulement quand un match se joue au gymnase, comme la voix du speaker). Il ajoute leurs entrées à `sons.json`. `prepare.py` garde maintenant les entrées qu'il ne fait pas.

### L'appel

| Dans le jeu | Son (fiche freesound) | Auteur | Morceau pris |
|---|---|---|---|
| `carte1` | [cardDrop2.wav](https://freesound.org/people/deathpie/sounds/19244/) (« snapping a card down onto a table surface ») | deathpie | 0,141 à 0,291 s |
| `carte2`, `carte3` | [Playing cards on a wooden table](https://freesound.org/people/snuq/sounds/564128/) | snuq | 0,14 s à partir de 14,316 s, puis 0,12 s à partir de 19,389 s |
| `feutre1` à `feutre3` | [sharpie_on_cardboard.wav](https://freesound.org/people/ve6ji/sounds/253901/) (un feutre sur un carton lisse) | ve6ji | de 0,5 à 2 s, de 3 à 4,6 s, de 9,5 à 11 s (passe-haut à 400 Hz) |

### Le gymnase du BBB (U18 et séniors)

| Dans le jeu | Son (fiche freesound) | Auteur | Morceau pris |
|---|---|---|---|
| `gymLit1`, `gymChaude` (boucles) | [Basketball Ambience - Small Gym.wav](https://freesound.org/people/fattirewhitey/sounds/381411/) (« a small high school gym with a small crowd ») | fattirewhitey | de 312 à 324 s, puis de 400,5 à 410,5 s (là où l'on n'entend ni sifflet ni sirène, passe-haut à 120 Hz) |
| `gymApplaudir1` | [Small applause](https://freesound.org/people/Breviceps/sounds/462362/) (« ~30 people ») | Breviceps | en entier (4,5 s) |
| `gymApplaudir2`, `gymOoh1`, `gymOoh2`, `gymDecu1` | [Small crowd reactions](https://freesound.org/people/IENBA/sounds/488472/) | IENBA | de 31,8 à 35,3 s (applaudissements joyeux), de 0 à 2,3 s et de 10 à 11,4 s (surprise), de 6,4 à 8,4 s (désapprobation) |
| `gymClameur1`, `gymClameur2` | [small crowd cheering](https://freesound.org/people/HowardV/sounds/264377/) (« about twenty people ») | HowardV | de 2 à 5 s, puis de 10,4 à 13,4 s |

Toujours fabriqués par le navigateur pour l'appel (`son.js`) : la pression grave qui monte pendant la fenêtre, les sons des tirs du résumé (une note claire dedans, un « toc » sourd dehors), l'écho du gymnase et l'acoustique de chaque salle (réponses de salle fabriquées), et un claquement et des traits de feutre de secours si `appel.m4a` manque.

Écartés : les claquements de cartes saturés à l'enregistrement (mmarin2358, « Card Slap1 ») ou suivis d'une longue traîne (khiser83, « cards thrown »), les feutres sur tableau blanc qui grincent, les applaudissements d'un concert scolaire (trop de monde pour une trentaine de parents).

## La voix du speaker (`sons/voix.m4a`)

- **Fabriquée hors ligne sur le PC** par `scripts/sons-tempsmort/voix.py` avec **Piper** (synthèse vocale libre, https://github.com/OHF-Voice/piper1-gpl ; l'outil n'est pas livré avec le jeu, seulement les phrases qu'il a dites).
- **La voix** : `fr_FR-mls-medium` (https://huggingface.co/rhasspy/piper-voices, dossier `fr/fr_FR/mls/medium`), locuteur 79. Entraînée sur **Multilingual LibriSpeech** (http://openslr.org/94/, des livres audio du domaine public lus par des bénévoles), données sous licence **CC BY 4.0** (fiche MODEL_CARD de la voix, lue le 27/10/2026). Par prudence, on cite la source : « Voix : Piper, fr_FR-mls-medium, d'après Multilingual LibriSpeech (CC BY 4.0) ».
- Écartées : `fr_FR-upmc-medium` (CC BY-SA 4.0) et `fr_FR-gilles-low` (CC0), qui perdent les voyelles nasales (« points », « défense », « temps »), et `fr_FR-tom-medium` (données sous AGPL).
- **Ce qu'on en a fait** : 21 phrases génériques, sans nom de joueur ni d'équipe ; `prepare.py` retire le silence autour, les passe dans une sono de salle (280 Hz à 7 kHz, saturation douce, deux échos du toit) et les range sur une planche mono à 32 kb/s.

## three.js

- `vendor/` : three.js 0.185.1, licence MIT (`vendor/LICENSE-three.txt`).
