...  08 mai 2024

Mégavoltoulinette

J'étais en train d'ajouter un lance-missiles dans Omeganaut quand je me suis dit : "Hey, ça manque d'un nouveau son pour signifier le départ du missile". Mais après avoir bataillé avec les réglages sonores de ZGameEditor, j'obtiens un PRRRT, difficile à différencier du PRRRT des explosions.

Alors comment obtenir des SHEBAM ! POW ! BLOP ! WIZZZZZ !?

Un aspect que je trouve peu attrayant dans la création de jeux vidéo est la gestion des bruitages. Je n'aime pas le caractère figé des fichiers audio. J'ai le même problème avec le format d'image JPEG. C'est bien pour un rendu final, mais je lui préfère de loin le format PNG qui ne compresse pas l'image et qui peut être modifiable après coup. Sinon, il faut conserver le fichier d'origine, ce qui prend rapidement de la place en taille et nombre de fichiers.

Ce qu'il y a de fascinant avec Omeganaut, c'est qu'il pèse seulement 2 Mo. ZGameEditor, le moteur du jeu, est extrêmement léger, alors j'évite aussi d'importer des ressources encombrantes dans le projet, comme les images et surtout les sons. Jusqu'à présent, j'utilisais le Sound Component proposé par ZGameEditor pour générer les sons à la volée, plutôt que d'importer des fichiers audio. Cette méthode repose sur une série de réglages permettant de créer les bruitages en temps réel. Génial sur le papier, seulement, je ne comprends pas toutes les finesses de l'interface et la signification de certains réglages, et je me retrouve avec des bruitages qui grésillent sur la tonalité monocorde d'un coussin péteur : PRRRT.


ZGameEditor Sound Component

Tout en constatant mon incapacité d'obtenir ce que je veux avec ce synthétiseur, je me suis souvenu de l'existence de sfxr, un logiciel développé par Tomas Pettersson (DrPetter) pour la 10ᵉ compétition Ludum Dare, tenue en décembre 2007. Il génère des sons 8 bits à partir de réglages intuitifs et permet d'exporter les résultats au format WAV.


SFXR

Tom Vian a porté ce programme en Flash as3 en 2010, et Increpare l'a récupéré pour créer une version en ligne appelée bfxr. Bon... Il faudrait qu'il mette à jour son site avec Ruffle, mais c'est la version que j'avais utilisée pour générer les bruitages de Greed, Falling in love et Ju&Ju Adventure. C'était la mode à l'époque !


Greed Falling in love Ju&Ju Adventure
C'était la mode à l'époque

Sfxr a continué d'être adapté sur divers supports et langages, menant à la version qui nous intéresse aujourd'hui : SFXR pour ZGameEditor, par Kjell.

Ce qui est génial avec sfxr, ce n'est pas l'export de fichier audio au format WAV, mais bien la définition du son avec de simples paramètres. Ceci est une explosion :

wave_type = 1, p_env_attac = 0, p_env_sustain = 0.03431918, p_env_punch = 0.36317999, p_env_decay = 0.37426327, p_base_freq = 0.50287283, p_freq_limit = 0, p_freq_ramp = 0, p_freq_dramp = 0, p_vib_strength = 0, p_vib_speed = 0, p_arp_mod = 0.28838133, p_arp_speed = 0.62393651, p_duty = 0, p_duty_ramp = 0, p_repeat_speed = 0, p_pha_offset = 0, p_pha_ramp = 0, p_lpf_freq = 1, p_lpf_ramp = 0, p_lpf_resonance = 0, p_hpf_freq = 0, p_hpf_ramp = 0

Cela me permet de conserver les effets sonores dans un tableur, tout en grappillant quelques octets :

  • Limiter les valeurs à deux décimales
  • Supprimer les valeurs nulles inutiles
  • Supprimer le zéro avant la virgule pour les nombres décimaux

Et obtenir :

1,,.03,.36,.37,.5,,,,,,.29,.62,,,,,,1,,,,

J'ai donc créé une nouvelle moulinette, comme celle me permettant de convertir les données de collisions des objets d'Omeganaut. Là où la version de Kjell permettait de charger les fichiers générés par sfxr, je l'ai modifié avec son aide pour lire le texte généré par ma moulinette au lancement du jeu et mettre en mémoire les sons générés par ces paramètres pour qu'ils soient réutilisables en cours de partie.


Moulinette ZGameEditor Sound Export

Et maintenant que je peux ajouter du SHEBAM ! POW ! BLOP ! WIZZZZZ ! dans mon jeu, je peux refermer cette parenthèse et revenir à mon lance-missiles...