Salut tout le monde,

Quoi ? On n'a pas fait de post cette semaine encore ? Laissez-moi corriger ce rythme pas très sérieux !

Cette semaine, on va parler son. Je préviens, je ne suis pas expert en programmation sonore, alors certains risquent d'avoir le poil qui se hérisse !

Le son jusqu'alors

Depuis le début du développement de Seasons, nous nous sommes très peu préoccupé de la partie sonore. La seule passe de sons a été faite par William lors de la conception du 1er prototype. Elle consistait en la fabrication de bruitages sonore style 8bits avec l'excellent logiciel sfxr !

Pour poursuivre l'aventure, nous avons besoin de sons (bruitages et fonds sonores) plus réalistes, moins 8 bits style ! Et la manière de jouer ces sons doit aussi être plus "réaliste".

 

Nouveaux types de sons

Nous avons deux types de sons : les sons spatiaux et les sons ambiants.

Les sons spatiaux sont des sons dont le volume varient en fonction de la distance entre l'émetteur sonore et le récepteur sonore (micro).

Les sons ambiants sont des sons que l'on entend de partout, quelque soit la position du récepteur sonore.

Voici un petit schéma récapitulatif qui montre 2 niveaux de jeu. L'un des niveaux possède un son spatial et l'autre un son ambiant. Les deux niveaux de jeu sont reliés par un système de portes.

Spécificités du son spatial

On remarque que le son spatial possède 3 caractéristiques :

- une position : c'est de là que le son est émis

- un périmètre intérieur (ici en jaune). Si le récepteur sonore (micro) se trouve à l'intérieur de ce périmètre, alors le son est joué à 100% de son volume maximal.

- un périmètre extérieur (ici en orange). Quand le récepteur sonore entre dans ce périmètre, le son devient audible. Plus le récepteur sonore s'approche de la frontière avec le périmètre intérieur, plus le son devient fort. Bien entendu, lorsque le récepteur sonore est positionné au delà du périmètre extérieur, le son n'est plus audible du tout.

Certaines librairies sonores permettent de gérer ce que l'on appelle des "sons 3D". La librairie que nous utilisons actuellement (irrklang) permet sur le papier de gérer automatiquement des sons 3D.
Malheureusement, on n'a pas la maîtrise totale sur la manière dont les sonorités sont atténuées. Ceci car on ne peut indiquer à cette librairie qu'un périmètre externe au delà duquel un son 3D n'est plus atténué. La fonction d'atténuation n'est pas réglable et on se retrouvait avec des sons audibles depuis bien trop loin... on a donc décidé de gérer nous même l'atténuation et le "pan" (répartition gauche-droite du son).
On se retrouve donc avec des sons 2D classiques qui ne gèrent pas d'eux-mêmes l'atténuation sonore et le "pan", c'est notre moteur qui va modifier le volume sonore et le pan de chaque son 2D que l'on veut gérer comme s'il s'agissait d'un son 3D.

Spécificité du son ambiant

Le son ambiant est un bête son 2D que l'on entend de partout. Nous avons cependant limité son écoute à l'intérieur du niveau où il a été créé.

Un son 2D dit "ambiant" joué en boucle peut aisément faire office de fond sonore à l'intérieur d'un niveau.

Mise en pratique

C'est bien beau tout ce texte et ce baratin technique, mais ça donne quoi pour le moment l'intégration des sons dans Seasons ?

Et bien ça donne ce que l'on trouve dans la vidéo suivante. Attention toutefois : les sons présents ne sont pas les sons définitifs mais des sons pour tester. Les niveaux sonores n'ont pas été affinés non plus.

 

Alors qu'est-ce que l'on voit dans cette vidéo ?

- un son ambiant de pluie qui tombe pour le printemps (bon certes on est dans une map de test donc y'a pas les effets de pluie... mais laissez libre cours à votre imagination)

- un "crossfade" lors du changement de saison de printemps à automne

- le "crossfade" laisse place à un son ambiant d'automne (qui serait plutôt un son ambiant pour l'été mais bon... faut pas trop en demander à un programmeur, en général ça connait pas les saisons parce que ça sort pas très souvent).

- le moulin se met à tourner en automne, on vous laisse deviner pourquoi (y'a un indice sonore avec un son spatial). Le moulin émet également un son spatial de couinement.

- le son spatial de couinement du moulin s'atténue lorsque le renard s'en éloigne, et redevient plus audible lorsque le renard est à proximité. Ne cherchez pas l'effet stéréo, la vidéo est encodée en mono !

- lorsque le renard marche, on entend un bruit de pas générique synchronisé sur son animation.

- le renard passe à travers une porte pour atteindre un autre niveau. C'est l'occasion d'un nouveau "crossfade" sonore. Ce nouveau niveau possède un son d'ambiance caverneux. 

Les backstages : Blender !

Les plus curieux peuvent se demander comment sont joués les sons. Est-ce un script spécial qui lance les sons au cas par cas ? Ou est-ce un procédé plus ou moins automatisé.

Nous avons choisi d'automatiser au maximum la gestion des sons. Pour se faire, regardons comment le son de couinement du moulin est paramétré dans l'outil favoris de William : Blender !

 

Cas du moulin

Dans le cadrant haut-gauche de l'image se trouve la scène visuelle où a été placé une enceinte rouge qui est un objet invisible au final mais qui nous permet de positionner le son.

Blender ne gérant pas les sons, nous avons créé un composant permettant d'indiquer que l'enceinte rouge doit être considérée comme la source émettrice d'un son. Ce composant se nomme "SSSSound" et est visible dans la partie bas de l'écran.
On retrouve dans ce composant des paramètres qui indiquent entre autres que le son est spatial, que sa portée maximale est de 8 mètres et qu'il est parfaitement audible quand on est à 4 mètres ou moins de l'émetteur.

Le son ne doit pas être joué directement, car le moulin n'est pas obligatoirement en mouvement. Il nous fallait donc rajouter dans Blender un élément permettant de déclencher/arrêter des sons. Cet ajout a pris la forme d'un nouveau bloc de séquence visible sur la partie droite de l'image (rectangle vert).
Ce "Trigger Area" va démarrer un son si une animation est jouée dans un intervalle donné (ici l'intervalle fait la largeur de toute l'animation).
A l'inverse, le "Trigger Area" va stopper un son alors en lecture si l'animation vient à s'arrêter.

Le son déclenché par un "Trigger Area" est forcément un son joué en boucle. Pour les sons joués une seul fois de temps en temps, nous avons intégré un autre bloc de séquence...

 

Cas du renard

Le renard, lorsqu'il marche, émet des petits sons de pas. Ces sons non bouclés vont être joués par le bloc de séquence "Trigger Start".

On retrouve la même configuration de fenêtre Blender que dans le cas du moulin. Mais cette fois-ci, le séquenceur de la partie droite possède 2 séquences dites de "Trigger Start" qui sont là pour lancer des sons non bouclés (en l'occurrence des bruits de pas).

Pour bruiter la marche du renard, il suffit de faire avancer l'animation aux endroits voulus (en général quand un pied prend appuie sur le sol). De là on rajoute une séquence "Trigger Start". L'important dans ce type de séquence, c'est l'endroit où elle démarre. En effet, dès que l'animation "rentre" dans le trigger, alors le son non bouclé est joué. Contrairement au type de séquence précédant, on se moque de la longueur visuelle de la séquence, le son étant déclenché à chaque fois que le temps de l'animation (représenté par un trait transversal et vertical vert foncé dans la partie droite de l'image) rencontre un bloc de séquence "Trigger Start".
Dans le cas présent, à chaque boucle d'animation, 2 sons sont joués.

 

Conclusion

Le système embryonnaire actuel va bientôt pouvoir être utilisé par William (qui trépigne d'impatience à l'idée, je le sens !).

Il reste cependant pas mal d'améliorations à apporter, comme une intégration plus correcte du "pan" (répartition gauche/droite) pour les sons spatiaux. Les sons spatiaux auront certainement aussi besoin de zones d'atténuations non circulaires. Par exemple une forme de capsules comme suit :

 

Avec une forme de capsule pour la zone d'action des sons spatiaux, on pourrait donner plus de verticalité ou d'horizontalité aux sons. Nous allons voir si les cercles actuels suffisent en testant les sons sur de vraies niveaux et en s'appliquant sur le paramétrage des sons.

Voilà, c'est à peu près tout pour ce post un peu technique (et potentiellement chiant). N'hésitez pas à réagir dans les commentaires si vous voulez plus de précisions sur certains points ou que vous voulez partager votre expérience sur la question avec nous.

Pour ma part, n'ayant jamais touché à de la programmation sonore auparavant, je pense que certains ici auront beaucoup à m'apprendre, donc n'hésitez pas !

Guillaume