L'utilisation du format tracker pour transformer de la musique

Le but est de générer (une partie) de la musique en temps-réel, à l'exécution du jeu. Calculer la musique en temps réel n'a finalement rien de nouveau : c'est ce que font les logiciels de MAO, et en particulier les trackers. Une idée est donc de stocker, non pas un fichier mp3/ogg, mais plutôt la partition et l'ensemble des instruments. Le logiciel a donc beaucoup d'information pendant l'exécution et peut plus facilement effectuer des modifications sur le son.

Pour que les choses soient claires : il n'est pas question ici de créer de la musique à partir de rien, mais plutôt d'adapter la musique à la situation. On ne souhaite fabriquer des mélodies, mais moduler l'ambiance de la musique. Musicalement, une mélodie créée par informatique est très pauvre, sa qualité est très loin de ce que ferait un musicien professionnel. Nous voulons une musique riche et complexe, mais qui s'adapte pendant le jeu. Concrètement, il y a deux points importants : il faut être capable d'une part de modifier subtilement l'ambiance dégagée par la musique, et d'autre part de fournir des transitions fluides entre les différentes musiques.

Si la musique est stockée sous forme de module (.it, .xm...), un certain nombre d'opérations sont faciles à implémenter. On peut activer ou désactiver des channels à tout moment. Par exemple, si un personnage parle, il peut-être judicieux de couper momentanément les percussions (pour mieux entendre la voix). Il est facile aussi d'effectuer des modifications sur le volume des instruments : si dans la scène un personnage joue du piano, le volume de piano pourrait varier en fonction de notre position ; il est possible aussi de jouer sur le panning, mais de façon très douce (sinon, ça peut devenir très désagréable quand c'est une musique de façon). Mieux encore : il est possible de changer d'instrument à tout moment. Par exemple, une flute paisible pourra se transformer en trompette menaçante à l'approche d'un ennemi. Ou encore, il est possible d'effectuer des transformations sur les notes elles-mêmes. Un changement de gamme de la mélodie principale, ou le changement d'octave peuvent avoir des effets intéressants sur l'atmosphère créée. Enfin, il est possible d'influer directement sur le tempo : accélération et ralentissement de la musique sont assez enfantins à faire.

L'autre aspect concerne les transitions entre les musiques. Comment passer d'une musique à une autre, de manière fluide ? Le fondu naïf étant bien sûr à éviter. Dans un module, il est possible de définir des patterns supplémentaires, qui ne font pas vraiment partie de la musique. On peut donc les utiliser pour les transitions. Pour passer d'une musique A à une musique B, on peut jouer un pattern (composé à l'avance) entre les deux.

Limitations

La principale limitation concerne la qualité du son. Pour obtenir une bonne qualité sonore avec un tracker, il est souvent nécessaire d'utiliser des générateurs (de type VST). Cela se révèle très couteux en terme de CPU, sans compter les problèmes de licences pour les VST non libres. On peut convertir certains sons obtenus par ces VST en wave (ou les compresser), mais ça reste toujours limité. On perd en qualité de son et il faut limiter les effets sur la musique. Bref, on retrouve la qualité des musiques de la fin des années 90. C'est assez loin de ce qu'un bon compositeur peut faire. De plus, il n'est possible de retoucher la musique en studio, d'effectuer les réglages et le mixage nécessaires à une musique de bonne qualité.

Si cette solution pouvait se révéler très efficace pendant les 90, périodes où les trackers régnaient en maitres, elle relativement mal adaptée à la musique contemporaine. Dans 10 peut-être, on pourra générer de la musique de haute qualité, à partir de sa partition, en temps réel pendant les jeux. À l'heure actuelle, quand un compositeur crée une musique sur ordinateur, tout le CPU est utilisé.




Dans le prochain billet, je décrirai une technique permettant d'adapter interactivement de la musique de très bonne qualité, en temps réel et à faible coût en CPU.