Skip to main content

On Sale: GamesAssetsToolsTabletopComics
Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Excellent !

On est dans le thème, c'est très bien executé, les tirs horizontaux sont plus durs à faire mais ça reste accessibles. La DA est style space invaders, c'est réussi.

Mention spécial pour la musique et l'effet musical en destruction de monstre, ça rend super bien :) Si tu passes par ici, je veux bien un p'tit commentaire sur comment ça se met en place (si c'est galère / simple à faire ) et si t'as un tuto sur le sujet qui te semble bien.

Merci encore et Bravo pour ce joli jeu, félicitations !

(1 edit)

Très content que tu me poses la question !^^ Ce genre de système n'est pas si dur à implémenter, pour peu qu'on ait les bons outils.

Ce jeu a été réalisé en JS (enfin, en Typescript, mais c'est du web quoi) avec Phaser. J'utilise les outils suivants pour gérer la musique dynamiquement :

  • tonal, une librairie de théorie musicale. En soi elle n'est pas indispensable : c'est simplement un raccourci pour ne pas avoir à lister les notes manuellement. Par exemple j'ai juste à faire un Scale("C dorian")  pour obtenir ['C', 'D', 'Eb', 'F', 'G', 'A', 'Bb']. Un utilitaire pratique donc, mais facilement faisable à la main sinon.
  • ToneJS, une riche série d'outils pour manipuler le son et la musique en JS. Plus spécifiquement, j'utilise dans ce jeu son Sampler, qui permet à partir de quelques fichiers sonores de jouer n'importe quel note, en configurant l'attack et la release. Par exemple pour le son des vaisseaux, je n'ai que cinq fichiers qui correspondent à C3, F3, C4, F4 et C5. Le Sampler de ToneJS est capable de calculer les notes entre en choisissant le fichier le plus proche et en modifiant correctement son pitch.
  • OrchestreJS enfin, une librairie créée par moi-même, qui permet de synchroniser plusieurs pistes musicales. Je l'utilise à la fois pour jouer les deux boucles sonores en rythme (basse et batterie), et à la fois pour actionner tous les événements sur le rythme, et ainsi déterminer dans quelle mesure on se trouve (pour savoir sur quels accords jouer).

Ces outils se manient assez bien. Leur doc est plutôt clair (en tout cas pour OrchestreJS, j'ai fait de mon mieux pour que ce soit simple), et il y a pas mal d'exemples. Il faut finalement pas beaucoup de mathématique pour jouer des notes sur un mode (genre do majeur), et activer ou désactiver plusieurs couches musicales. Et faire des animations sur le tempo, une fois qu'on a de quoi le faire y a moyen de faire des trucs stylés !

Je donne ici les outils pour le web, mais il y en a aussi pour d'autres moteurs de jeu. Pour Godot, j'ai créé un plugin Simple Sampler qui permet de faire ce que j'ai décrit pour le Sampler de ToneJS (créer un synthé virtuel à partir de quelques fichiers sonores), et j'utilise parfois le plugin Mixing Desk pour gérer des boucles sonores dynamiquement (même s'il est un peu bancal imho). Unity je m'y connais moins bien, mais je crois qu'il existe aussi des extensions qui font ces jobs (je conseille de chercher avec les mots clés "Sampler" et "Dynamic Music").

Pour coder ces outils à la main, c'est un peu plus compliqué, mais ça se fait aussi ! OrchestreJS et Simple Sampler sont tous les deux open-source. C'est un peu de lecture, mais ce ne sont pas des projets trop gros, donc il y a moyen d'apprendre dessus. Mais d'une manière générale, voici les formules mathématiques clés que j'utilise :

// Pour calculer la durée d'un temps (beat) en seconde :
beat_length = 60 / BPM
// Cela permet, sur un update à la frame, de vérifier à quel temps on en est dans la piste sonore.
if (t >= last_beat + beat_length):
  // do something
  last_beat = last_beat + beat_length
// Pour calculer le pitch à appliquer sur un fichier sonore afin d'obtenir la note voulue, en ayant
// n_from : note du fichier musical, exprimée en entier (ex 0 pour C4, 1 pour C#4, etc)
// n_target: note que l'on veut jouer
pitch = 2^((note_target - n_from) / 12)

Et en ressources complémentaires, il y a ce long article sur la création de musique générative avec la Web Audio API (mais qui parle aussi beaucoup de théorie musicale, de mathématique, minimalisme, etc).


Voilà, j'espère que tout ça aidera ! ^^' Merci beaucoup pour ce feedback. Je suis très content que la musique procédurale du jeu plaise !