Messagerie


Gestion sonore réaliste.

Poum
lundi 23 janvier 2017 à 09:21
La sonorisation d’une scène et de ses acteurs permet d’ajouter une touche de réalisme à votre jeu.

En effet, un aigle qui vous attaque en silence n’aura pas le même effet que s’il vous fonçait dessus en hurlant. Dans la même lignée, votre concurrent lors d’une voiture de course peut « annoncer » sa présence par le bruit de son moteur mais surtout, en gérant sa distance d’approche ; plus il est proche, plus on l’entend. Et inversement, plus il s’éloigne, moins on l’entend. Et ce, même s’il n’est pas visible à l’écran.

Cette gestion sonore n’est pas une prouesse technique. Il suffit juste d’y penser et de se donner la peine d’ajouter trois lignes de code à votre application.

Afin d’illustrer ce tutoriel, je vous propose cet exemple ( CF : ci-dessous ) qui sera décortiqué plus bas.

L’idée générale

    On utilise un son que l’on pourra facilement mettre en boucle. A savoir, soit un son coupé parfaitement, où la fin de ce dernier correspond parfaitement à son début, soit un son avec un fondu en entrée et en sortie.
    [/li]

  • On laisse tourner ce son en permanence sur un canal dédié.


  • On agit sur le volume du canal en lui attribuant des valeurs allant de 0 (silence) à 100 (son le plus fort).



Pour y parvenir, on détermine un champ auditif. Au-delà de cette distance, le son ne sera pas audible. On converti dès lors la distance en niveau de volume à l’aide d’un simple calcul.

Volume = 100 – (Distance / (Champ Auditif / 100))

Détails du code


Il s’agit de la gestion de votre jeu.


Fixe le « Champ Auditif » en pixel.


Fait tourner (boucler) le son en permanence.


Initialise la "Distance Minimale". Par défaut elle est égale au « Champ Auditif » puis, effectuer une boucle sur toutes les occurrences que l’on souhaite sonoriser.


on teste si l’on trouve une distance plus faible que la précédente. Si oui, on modifie la variable « Distance Minimale » avec cette nouvelle valeur.
Ainsi, à la sortie de cette boucle, la variable « Distance Minimale » contiendra la distance la plus courte entre le personnage et l’ensemble des autres actifs.


On applique notre calcul au volume du canal.

Simple non ? Oui mais efficace.  :)

On peut évidemment pousser la méthode en gérant la stéréo, l’appliquer à plusieurs types de son, utiliser des « qualifieurs » …

Pour info, si vous êtes démunie, afin de manipuler vos échantillons sonores, je vous propose d’utiliser le logiciel gratuit Audacity.
De même, si vous cherchez des échantillons sonores : http://www.universal-soundbank.com/bruitages.htm
Pièces jointes
denisstephane
lundi 23 janvier 2017 à 09:30
Ca me manquait les bidouilles. ;)
J'avais pas penser a utiliser les fonctions de distance pour gérer le son.
C'est plutot une bonne idée.
Par contre par moment j'ai l'impression que le son baisse un peu trop brutalement.
Poum
lundi 23 janvier 2017 à 09:34

Par contre par moment j'ai l'impression que le son baisse un peu trop brutalement.


Effectivement, la dégressivité est linéaire.
Qui pour trouver la bonne formule ?  :P
Seyjin
1471 messages
Fusion 2.5 Dev
Exporteur Android Exporteur HTML5 Fusion 2.5+
lundi 23 janvier 2017 à 09:49
En pièce jointe directement.

J'avais commencé un système à peut près similaire pour un vieux projet (pour le moment en stand by), en utilisant la balance gauche/droite pour faire un semblant de spatialisation.
Poum
lundi 23 janvier 2017 à 09:57

En pièce jointe directement.


Tout simplement  ;) Merci
Emmanuel
2412 messages
Fusion 2.5 Dev Fusion 2.5
Firefly Exporteur UWP Exporteur iOS Exporteur Android Exporteur HTML5 Fusion 2.5+
lundi 23 janvier 2017 à 13:04
Autre exemple sur un seul objet en deux line.
Pièces jointes
Wolkam
lundi 23 janvier 2017 à 22:52
pas mal ces petites astuces !
Patrice
2784 messages
Fusion 2.5 Dev Fusion 2.5
Firefly Exporteur UWP Exporteur iOS Exporteur Android Exporteur HTML5 Fusion 2.5+
mardi 24 janvier 2017 à 09:36
Un petit panoramique en plus ?
Pièces jointes
Utilisateurs en ligne
  • Aucun utilisateur en ligne
  • 54 visiteurs au total

Derniers messages