Les 14 sons, soit 4 bruitages et 10 annonces françaises, ont été générés le 6 septembre 2026 et importés dans /Game/Audio. Le jeu lit des ressources locales : aucun appel ElevenLabs ni lecture de .env pendant le vol.
| Fichier source | Utilisation |
|---|---|
drone_motor.wav |
Boucle de petit quadrirotor ; hauteur du son et volume suivent les régimes moteurs |
wind.wav |
Boucle de vent ; intensité selon la vitesse relative de l'air |
rain.wav |
Boucle de pluie ; présente dans la météo pluvieuse |
collision_impact.wav |
Contact bref de plastique et d'hélices ; un choc au premier état de crash |
armed.wav, disarmed.wav |
Armement et coupure des moteurs |
takeoff.wav |
Décollage assisté demandé avec X / T, vers environ 1,5 m au-dessus du support |
landing.wav |
Descente assistée demandée avec B / L, avant coupure au contact |
mission_start.wav, mission_complete.wav |
Lancement de mission et fin d’atterrissage, local ou en mission |
manual_control.wav |
Reprise manuelle de la mission |
collision.wav |
Avertissement après un choc ayant endommagé le drone |
low_battery.wav |
Avertissement à 20 % de batterie ou moins |
restart.wav |
Redémarrage du vol |
Les annonces utilisent une seule piste et une file limitée : elles ne se superposent pas. Les ambiances baissent pendant une annonce. Une annonce devenue périmée est abandonnée ; un crash peut interrompre une annonce moins urgente. Les essais automatisés et captures laissent les composants audio silencieux. Les sons de repli procéduraux sont conservés pour les couches dont une ressource manquerait, avec un tampon borné pour limiter les coupures lors d'un ralentissement de rendu.
En MANUEL STABILISÉ, RT / Page haut augmente le réglage de propulsion et la vitesse de croisière demandée ; LT / Page bas le réduit. Relâcher les gâchettes conserve ce réglage. Le son moteur suit les RPM réellement simulés, que le contrôleur adapte à l'inclinaison, au vent, à la traînée et à la charge. Un réglage constant n'impose donc pas un son de régime parfaitement constant.
Y / Espace et A / Ctrl commandent une montée ou une descente ; relâcher ces boutons fixe l'altitude cible. Relâcher le stick gauche conserve la vitesse horizontale cible dans le monde. Le maintien de ces consignes peut faire varier les RPM et le son. LS / K commande un freinage puis un vol stationnaire.
À 0 % de propulsion, les consignes moteurs sont nulles et le maintien est désactivé, même si Y reste pressé. Les hélices ralentissent et le drone chute. Remettre RT peut relancer les moteurs en vol sans réinitialiser l'état physique ; la hauteur et le volume du son suivent la réponse mécanique. Ce comportement du simulateur ne reproduit pas le firmware commercial du Tello.
X / T déclenche le décollage assisté, puis le maintien manuel stabilisé. B / L commande une descente vers un support valide avec coupure au contact. Les annonces takeoff et landing distinguent ces actions du lancement d'une mission. AUTO, choisi après maintien de LB / Tab, suit le parcours de la carte ; MANUEL reprend le pilotage stabilisé sans repositionner le drone. La carte sépare ce plan de la trace réelle. Le menu ne met pas le monde en pause.
Les bruitages utilisent eleven_text_to_sound_v2 ; les trois ambiances demandent une boucle. Les annonces françaises utilisent eleven_multilingual_v2 et la voix de catalogue George (JBFqnCBsd6RMkjVDRZzb). Aucune voix n'a été clonée. Les textes, prompts, paramètres, dates, empreintes SHA-256 et coûts techniques renvoyés par le service se trouvent dans SourceAssets/Audio/manifest.json.
Ces sons sont des créations synthétiques inspirées d'un petit Tello ; ce ne sont pas des enregistrements ni des mesures acoustiques de ce modèle. Le régime change la hauteur d'une boucle de référence, sans résoudre l'acoustique de chaque pale.
Les MP3 originaux sont conservés dans SourceAssets/Audio/raw. Les WAV importés sont en PCM 16 bits, mono, 48 kHz. Une courte superposition raccorde les boucles (7,92 s chacune) ; les sons ponctuels reçoivent un fondu de bord très court pour éviter les clics. Les fichiers sont normalisés avec une marge de crête : 85 % du maximum PCM pour les voix, 65 % pour les bruitages.
Références API : génération d'effets sonores, synthèse vocale.
La clé reste dans .env, ignoré avec ses variantes par .gitignore. Le nom fourni ELLEVEN_LABS_API_KEY est accepté, ainsi que ELEVEN_LABS_API_KEY et ELEVENLABS_API_KEY. ELEVENLABS_VOICE_ID permet de sélectionner une autre voix déjà disponible. Le jeu ne contient pas la clé.
python3 Scripts/generate_audio.pyPrérequis : Python 3, requests, ffmpeg, et permissions ElevenLabs Text to Speech / Sound Effects pour les générations concernées. Le script réutilise les MP3 lorsque les paramètres correspondent au manifeste. --only rain sélectionne un fichier ; --force demande explicitement une nouvelle génération, consommant les crédits du compte. Il n'y a pas de nouvelle tentative automatique après une requête POST incertaine. Un verrou empêche deux générations simultanées dans ce projet.
Importer les WAV dans Unreal :
${DONIFY_ENGINE_DIR}/Engine/Binaries/Linux/UnrealEditor \
"$PWD/Donify.uproject" -run=pythonscript \
-script="$PWD/Scripts/import_audio.py" -unattended -nullrhi -nosplashL'importeur valide les sources puis crée les SoundWave ; seules les trois ambiances bouclent. Le journal Saved/Logs/Audio-import.log contient le marqueur d'import DONIFY_AUDIO_IMPORT_COMPLETE clips=14 loops=3 voices=10. Ce marqueur confirme l'import, pas la validation du comportement audio en vol ; les contrôles d'exécution figurent séparément dans le journal de validation.
Les 14 clips étaient chargés et les annonces déclenchées en session interactive (qa_silent=0). La sortie HDMI système présentait une balance anormale : gauche 119 %, droite 0 %. Les deux canaux ont été rétablis à 70 % sur cette machine. Ce réglage de périphérique appartient au système, pas aux assets du jeu. Le projet fixe aussi UnfocusedVolumeMultiplier=1.0 pour éviter la coupure par défaut lorsqu'on revient dans Codex ; l'utilisateur avait signalé le silence jusque dans la fenêtre de jeu.
Un vol explicite -DonifyAudioProbe -DonifyShot=9 active les sons pendant une fixture de 25 secondes, puis quitte. Contrairement à DonifyCheck et DonifyCapture, ce diagnostic est volontairement audible. À six secondes, les boucles moteur et vent sont actives, le gain moteur vaut 0,271 et le rapport de régime 1,006 (Saved/Logs/Audio-output-probe.log). Une mesure de la sortie HDMI, sans microphone ni fichier audio conservé, a trouvé un signal identique sur les deux canaux : crête −28,86 dBFS et RMS −42,44 dBFS (Saved/Logs/Audio-output-levels.log). L'utilisateur a ensuite confirmé : « Oui, le son est revenu ». Aucun gain artistique des sons n'a été modifié.