Génération d'un environnement sonore et musical dans Unity3D

Annotation


Bonjour à tous. Cet article est le premier d'une série sur le thème de la génération de contenu basé sur la musique et le son. En fait, une telle génération est une tâche technique assez compliquée, donc ce matériel sera introductif, plus axé sur la conception de jeux et une compréhension générale du sujet, après quoi nous nous plongerons dans les aspects techniques de ce sujet.



Dans cet article, nous considérerons un genre spécifique de jeux dans lesquels le contenu est généré à partir du son et de la musique. La théorie générale du son ne sera pas donnée ici, mais dans le matériel, vous pouvez trouver des liens vers des sources d'information et une brève description des termes que nous utiliserons. Le matériel, bien qu'il contienne des informations techniques sur la théorie du son et la programmation, est conçu pour un public novice. Les illustrations sont réalisées seules et, comme je ne suis pas artiste, ne les prenez pas au sérieux, elles ne sont nécessaires que pour une meilleure compréhension du matériel. Bonne lecture!


Présentation


La génération procédurale basée sur la musique dans les jeux vidéo est un sujet qui, pour moi personnellement, a toujours été enveloppé d'une certaine touche de mysticisme. Il y a quelque chose d'incroyable dans la façon dont les formes sonores sont non seulement visualisées, mais affectent également directement le gameplay. Tout cela semble particulier, mais sacrément amusant. C'est pourquoi ces jeux ont leur propre public petit mais stable. Steam a ajouté des balises distinctes pour ces jeux: «Generation based on music» et «Rhythm game». À l'heure actuelle, ces balises peuvent être trouvées sur environ 200 projets, bien qu'il existe beaucoup plus de jeux qui utilisent cette mécanique.


En fait, la génération basée sur le son donne une portée illimitée pour le développement du gameplay, mais jusqu'à présent, ces idées restent le destin des projets indépendants, tandis que dans les jeux AAA (à l'exception de Guitar Hero), de telles expériences ne sont pas applicables en raison de leur instabilité et de leur inhabituel de gameplay. .


Exemples de bons projets


Avant de passer à l'essence même de la génération sonore (à ne pas confondre avec la génération sonore!), Je voudrais donner des exemples de jeux réussis qui utilisent des mécanismes similaires. Si vous ne les avez pas encore joués, essayez-le! Vous n'avez probablement jamais vu cela auparavant. Beaucoup de ces projets ont reçu des récompenses de joueurs et de la presse.


À proprement parler, la génération pure n'est utilisée que dans Audiosurf. Le reste des jeux j'utilise l'un ou l'autre de ses éléments. Certains jeux sont plus axés sur le suivi des bits, d'autres sur le volume de la piste, etc.


De tels projets sont très difficiles à évaluer par une capture d'écran ou une description. Si vous n'avez pas le temps de jouer, regardez simplement la vidéo sur YouTube.


Audiosurf



Pour de nombreux joueurs, Audiosurf a été le premier jeu à utiliser la génération de contenu musical. Le projet a été créé par un développeur indépendant de Invisible Handlebar - la société de Dylan Fiterer. Lorsque Audiosurf est apparu sur Steam, ce marché commençait tout juste à se développer et le taux de croissance monstrueux actuel était encore loin. Audiosurf avait l'air très frais et pas habituel, en plus, c'était le premier jeu sur Steam (à l'exception des jeux Valve), qui contenait des succès!


Le slogan d'Audiosurf - "Ride your music" - reflète très précisément le gameplay: sur la base de votre morceau de musique, le morceau que vous devez conduire est créé. Le jeu prend en compte la vitesse de la piste, les changements dynamiques (augmentation et diminution du volume) et le bit. Vous pouvez y utiliser différents genres de musique et les combiner avec différents modes de jeu. De plus, chaque morceau a sa propre table d'enregistrement, et vous serez peut-être surpris de découvrir que votre "Death metal Undeground" préféré est écouté par dix autres personnes.



Malheureusement, en statique, Audiosurf n'est pas perçu. Besoin de jouer.


En parlant de gameplay, Audiosurf est génial. Par exemple, si la piste commence par une introduction silencieuse, votre bateau rampe lentement vers le haut, mais lorsque la texture musicale devient plus saturée et corsée, la vitesse augmente et vous vous précipitez à tout moment. Le soi-disant Drop est particulièrement bien ressenti, pendant lequel le son «se détache» au milieu du développement, puis revient au moment de l'apogée. Un kit de batterie diversifié peut transformer votre piste en une route vallonnée, ainsi que des effets spéciaux. les effets. De plus, les blocs que vous devez collecter lors du passage de la trace générée sont également placés sous le bit.


10 ans se sont écoulés depuis la sortie du jeu, mais il est toujours très populaire auprès des joueurs. Pour le moment, deux parties du jeu ont été publiées, et le développeur Dylan Fitterer a continué à développer ses idées et a créé Audioshield, où vous repoussez des blocs de réalité virtuelle volant vers vous sous un battement de bits.


Nous vous recommandons de jouer sur des pistes telles que:


  • Système d'un Down - Chop Suey!
  • Martin Garrix - Animaux
  • Skrillex - Bangarang

Partagez vos morceaux préférés pour Audiosurf dans les commentaires!


Le jeu peut être acheté sur Steam .


Battre le danger


Dans ce projet, les créateurs ont repris la mécanique standard de Shoot'em et y ont ajouté une analyse de vos morceaux de musique. Cela s'est avéré très cool. La musique affecte tout: la puissance de votre vaisseau, le nombre d'adversaires, la vitesse globale du jeu. Mieux encore, le jeu peut être ressenti avec de la musique, où il y a des transitions nettes entre le silence et un son puissant, puis votre écran explose à cause des effets et le navire commence à tirer avec d'énormes rayons.


Le jeu a une mécanique assez riche, plusieurs modes et d'énormes boss. En général, tout ce dont vous avez besoin pour vous amuser!



Nous vous recommandons de jouer sur des pistes telles que:


  • The Prodigy - Les envahisseurs doivent mourir!
  • Champignon infecté - La légende du Shawarma noir
  • Daft Punk - Contact

Écrivez dans les commentaires les pistes qui vous plaisent le plus à détruire les navires ennemis!


Le jeu peut être acheté sur Steam .


Soundodger +


Le jeu est une sorte de mélange de Beat Hazzard et du populaire Super Hexagon. L'essence du gameplay est que vous devez esquiver des objets dont l'activité dépend de votre piste musicale. Le processus est très compliqué et donc - super excitant.



Le jeu peut être acheté sur Steam .


Crypte du nécrodancier


Un jeu qui transfère incroyablement avec précision le rythme et vous fait danser avec une manette de jeu. Crypt of the NecroDancer est un projet Roguelike dans lequel vous et les monstres devez vous déplacer strictement sur la musique. Si vous n'entrez pas dans le rythme, le jeu vous inflige une amende lorsque vous bougez. L'endroit entier en même temps bat au rythme, ce qui crée une atmosphère irréelle. La bande originale a été écrite par le célèbre Danny Baranowsky (Super Meat Boy, The Binding of Isaac). Soit dit en passant, le jeu prend en charge les tapis de danse!



Le jeu peut être acheté sur Steam .


Tableau de bord de géométrie


C'est un coureur très hardcore dans lequel vous comptez non seulement sur votre réaction, mais aussi sur le sens du rythme, car tous les obstacles sont clairement battus et à la fin de la piste (si vous atteignez), vous vous déplacez déjà à un niveau intuitif. À proprement parler, il n'y a pas de génération en tant que telle, mais les développeurs ont utilisé l'analyse des morceaux de musique pour mieux construire le niveau.



Comme presque tous les jeux de ce genre, Geometry Dash est très brillant


Le jeu peut être acheté sur Steam .


Beatbuddy: conte des gardiens


Un magnifique jeu de plateforme musical, dont l'action se déroule dans le monde sous-marin, vivant sous un swing swing électro lumineux. Chaque créature de ce jeu génère son propre son. Krabik tape un rythme rapide, les anémones sont responsables du baril ... Dans le même temps, le personnage principal peut influencer les habitants du monde et changer la musique et le gameplay lui-même. Pour le jeu, les pistes de musiciens tels que Parov Stelar, Austin Wintory, Sabrepulse et La Rochelle Band ont été utilisées.



Le jeu peut être acheté sur Steam .


Après nous être inspirés par d'excellents projets, nous pouvons passer à l'étude de la question "comment ça marche?"


Options sonores de base


Options audio analogiques


Le sujet choisi n'étant pas trop simple et comportant de nombreux aspects techniques, j'ai décidé de ne pas gonfler l'article de théorie, mais de définir des concepts de base. Si vous voulez étudier de plus près la théorie du son, alors sur Habr, il y avait de nombreux articles sur ce sujet. À la fin de l'article, vous trouverez de nombreux liens utiles.


Les paramètres de base du son, nous inclurons les suivants:


  • Fréquence ou hauteur des ondes sonores, Hz
  • Amplitude des ondes sonores ou volume sonore, dB
  • Le coefficient d'atténuation est le taux de diminution de l'amplitude dans le temps.
  • Forme d'onde - une vue générale d'une onde sonore. En utilisant ce paramètre, vous pouvez diviser les sons en groupes (net, lisse, bruit, etc.)

Pour plus de clarté, j'ai cité les principales caractéristiques de l'onde sonore dans les graphiques suivants (les unités ne sont pas définies, je m'excuse):



Son fort avec une grande amplitude



Son silencieux avec moins d'amplitude



Aigu, haute fréquence



Son faible avec moins de fréquence



Son fort et aigu (prenez soin de vos oreilles!)


En général, ces données sont suffisantes pour avoir une compréhension suffisante de ce qu'est le son et passer à autre chose. Mais si vous êtes intéressé par ce sujet, alors, bien sûr, vous devez l'étudier plus en profondeur.


Options audio numériques


Lors de l'écriture de jeux et d'autres programmes, nous travaillerons avec la forme numérique du son. Le son numérique est obtenu par échantillonnage (division en petits points dans le temps), quantification (arrondi à un certain niveau) et codage (en fait, transformation du son en zéros et en uns). Vous pouvez trouver beaucoup d'informations sur ce sujet dans l'article Theory of Sound. Ce que vous devez savoir sur le son pour pouvoir l'utiliser. Découvrez Yandex.Music , que j'ai vraiment aimé. Vous y trouverez des informations sur la mesure du volume et une description des filtres que je mentionnerai.


La principale chose que nous devons savoir sur le signal numérique est:


  1. Taux d'échantillonnage - caractérise la précision avec laquelle votre son sera numérisé. Par exemple, lorsque nous disons que la fréquence d'échantillonnage est de 44,1 kHz, cela signifie que le signal est mesuré 44 100 fois en une seconde. Aujourd'hui, les fréquences d'échantillonnage les plus courantes sont 44,1 kHz et 48 kHz.


  2. Profondeur de bits d'un signal numérique - caractérise la façon dont la large gamme dynamique "s'intègre" dans votre numérique. Il est mesuré en bits et est généralement de 16, 24 et 32 ​​bits. La plage dynamique est la différence entre le son le plus fort et le plus silencieux, exprimée en décibels. Par exemple, pour un signal 8 bits, il est de 48 dB, pour un signal 16 bits, il est de 96 dB, pour un signal 24 bits, il est de 144 dB, et pour un signal 32 bits, il est de 192 dB.


  3. Le débit binaire est ce que tous les internautes ont regardé en 2002 lorsqu'ils ont téléchargé de la musique. Le débit binaire est le nombre de bits utilisés pour transmettre ou traiter des données par unité de temps. Dans les formats de streaming vidéo et audio (par exemple, MPEG et MP3) qui utilisent la compression avec perte de qualité, le paramètre «bitrate» exprime le taux de compression du flux.



Métadonnées dans les fichiers musicaux


En plus des paramètres sonores eux-mêmes, nous pouvons utiliser des informations cachées dans les fichiers audio eux-mêmes. Ces informations sont généralement appelées balises et chaque format de fichier a son propre format de balise. Nous parlerons des fichiers mp3 comme les plus courants.


Les balises sont plus faciles à lire à l'aide d'une bibliothèque prête à l'emploi, par exemple à l'aide de TagLib .


Le format mp3 contient des métadonnées dans sa structure ID3, dans lesquelles nous pouvons stocker beaucoup d'informations. Il existe plusieurs options pour le format ID3, mais nous parlerons d'ID3 v2.3, dans lequel vous pouvez stocker la plupart des données. Parmi les informations utiles, vous devez faire attention à: nom, année d'enregistrement, genre, BPM (nombre de battements par minute), durée de la piste . Comment ces champs peuvent-ils nous aider lors de la génération de contenu? Si tout est clair avec BPM, il est utilisé pendant la génération tout le temps et nous en parlerons séparément, alors pourquoi avons-nous besoin d'autres champs? Ici, vous devez faire preuve d'imagination.


Par exemple, nous lisons le genre et l'année. Pour commencer, nous devons traiter un peu ces informations. Par souci de simplicité, nous ne considérerons que l'anglais. Les balises MP3 (et autres balises) sont souvent remplies manuellement, à partir de là, suivez différentes orthographes de genres, différentes ponctuations, etc. Il est préférable d'amener la balise résultante dans un format unique afin de la comparer plus facilement avec les autres. Il est conseillé de supprimer tous les signes de ponctuation, les espaces et de convertir la chaîne en minuscules. Cela peut être fait en utilisant des expressions régulières.


Après de telles manipulations, il vous sera beaucoup plus facile de comparer les genres de chansons. Ensuite, vous devrez créer une base de genres, basée sur une source, et la parcourir pour compiler votre base de données de balises. Voici un exemple d'une liste de tous les genres: musicgenreslist.com . Naturellement, vous devez choisir uniquement les plus basiques.


Je n'ai pas répondu, pourquoi de telles difficultés? Je vais donner des exemples (très simplifiés).
En fonction du genre, nous pouvons:


  • Changer de lieu (rock - forêt sombre, musique électronique - espace, country - désert, pop - ville, etc.)
  • Changer de personnage
  • Changez d'ennemis, etc.


Un exemple de personnage basé sur les balises rock, electro, pop.


Et puis vous pouvez trouver quoi que ce soit! Année de sortie de l'album: 1960-1970? Habillez le personnage avec les vêtements de cette période. Durée de la piste 10 minutes? Laissez votre «serpent généré musicalement» avoir une longue queue. Il y a beaucoup d'opportunités et il y a toujours une chance de surprendre le joueur.


Représentation de fichiers audio dans Unity



Tout semble simple ...


Unity a plusieurs composants principaux pour travailler avec le son:


  • L'auditeur audio (auditeur) se comporte comme un microphone. Il reçoit l'entrée de n'importe quelle source sonore (source audio) dans la scène et émet des sons via les haut-parleurs. Pour la plupart des applications, il est logique d'ajouter un écouteur à la caméra principale - l'objet Caméra principale.
  • La source audio lit le clip audio dans la scène. Si le clip audio est un clip 3D, la source est lue à une position donnée dans l'espace et sera coupée en fonction de la distance.
  • Les clips audio (clips) contiennent des données audio utilisées dans les sources audio. Unity prend en charge les ressources audio mono, stéréo et multicanaux. Unity peut importer les types de fichiers suivants: .aif, .wav, .mp3 et .ogg.


Si vous êtes profondément plongé dans le travail du son, vous devrez interagir directement avec les clips audio. Un clip audio contient un tableau d'images sonores (échantillons) que vous pouvez lire et écraser. Avec cela (et des tas de matan), vous pouvez déterminer les paramètres des pistes sonores et créer des effets sonores.


Paramètres de la piste musicale


Donc, nous avons lu quelques données de départ de notre piste et nous avons obtenu les premiers rudiments de génération. Vous pouvez maintenant passer à la partie la plus difficile. Nous devons comprendre quels paramètres dynamiques de la piste nous pouvons déterminer et comment ils peuvent être utilisés dans le gameplay. Une partie du matériel est basée sur le blog du studio Parallelcube . Les gars font des atouts et des tutoriels pour Unreal Engine, pour lesquels merci beaucoup à eux.


Les tâches suivantes peuvent être distinguées:


  • Définir un baril comme déclencheur d'effets spéciaux
  • Déterminer les moments calmes et forts d'une piste
  • Utilisation de ces données pour créer un niveau
  • Utiliser ces données pour créer des effets

Détecter une grosse caisse dans une piste et utiliser ce son comme déclencheur.


Afin de commencer à déterminer les paramètres de la piste, vous devez sélectionner la musique. Pour faciliter le travail, vous avez besoin d'une piste dans laquelle il y a un canon évident et, de préférence, des transitions nettes en volume. J'ai choisi le morceau Perturbator - Future Club , que l'on pouvait entendre dans le jeu Hotline Miami 2: Wrong Number.


Voici une petite analyse de l'entrée de cette piste (la piste audio a été spécialement raccourcie)



  1. Le soi-disant fondu, ou introduction. En ce moment, la piste monte en volume.
  2. La force de choc principale apparaît - le baril. Les moments d'apparition du canon sont très faciles à lire sur la représentation visuelle de la piste audio. De plus, un synthétiseur de fond retentit ici et son bruit est visible sur la piste. Si la piste n'avait pas été compressée, elle aurait été encore plus claire. (détails sur la compression ici )
  3. Un synthétiseur supplémentaire apparaît, ce qui érode légèrement la clarté de la représentation visuelle du canon
  4. Une pause qui apparaît avant un moment lumineux dans la piste (drop).
  5. La partie principale, où, en plus du barillet, un synthétiseur de basse apparaît, ce qui déforme considérablement la représentation visuelle du signal, mais le barillet peut encore être distingué.

Donc, notre tâche principale est de déterminer à quel moment notre baril sonne. C'est une tâche assez difficile, pour laquelle des bibliothèques audio spéciales sont généralement utilisées. N'oubliez pas, s'il existe des options toutes faites, et que vous avez pour objectif de faire un effet, et non d'étudier le tapis. partie, prenez des options toutes faites. Si votre jeu a un budget et 25 $ supplémentaires, vous pouvez acheter un atout spécial auprès du développeur 3y3net, qui s'appelle Beat Detection . En outre, vous pouvez envisager une excellente option du développeur Allan Pichardo . Si vous voulez comprendre comment ces algorithmes fonctionnent, alors, bien sûr, écrivez-le à partir de zéro, vous-même.


Comme nous l'avons vu sur la piste audio, un battement se distingue toujours clairement par le niveau sonore. Telle est son essence. Les musiciens traitent et compressent spécialement la piste afin que le rythme ne soit pas obstrué par d'autres sons et ait sa place dans la plage de fréquences de la piste. Le bit est toujours plus fort que le niveau de volume moyen (moyen). Si le son est plus fort qu'un certain seuil (Threshold), alors nous, en regardant simplement l'affichage graphique de l'onde sonore, nous pouvons dire avec confiance "Oui, c'est un peu!"



Je voudrais présenter une description technique plus détaillée et des algorithmes spécifiques pour déterminer un peu dans un article séparé (il sera publié après un certain temps), car ce sujet dépasse de loin la portée de ce matériel. En bref, dans de tels algorithmes, le son passe d'abord par des filtres pour en faciliter le traitement, après quoi la dynamique de l'énergie sonore est analysée. Voici un exemple d'un tel algorithme (attention, matlab!) .


Une description mathématique complète de cet algorithme peut être trouvée dans cet article: Conception et implémentation d'un algorithme Beat Detector .


Imaginons donc que nous ayons pu écrire un script qui détermine en temps réel à quel moment un tonneau démarre. De plus, à l'aide de l'algorithme, nous pouvons également déterminer le BPM général et comprendre où le rythme principal «bat» avec nous. Que pouvons-nous faire des informations reçues?


Vous pouvez prendre Beathazard comme exemple et vous assurer que pour chaque rythme du rythme principal, notre navire tire avec un laser conventionnel ordinaire, et lorsque le canon frappe, nous tirons avec un super laser. Cela ressemblera à ceci:



De plus, nous pouvons ajouter plus de spéciaux. les effets. Et faites pulser le niveau avec le bit:



Le même algorithme qui détermine le bit en temps réel, nous pouvons utiliser pour calculer le BPM (battements par minute ou le nombre de battements par minute). Les informations BPM peuvent être utilisées, par exemple, pour générer des niveaux de difficulté et calculer des points bonus. Si la piste est rapide (150-180 BMP), le joueur reçoit un bonus X5, etc.


Déterminer les moments calmes et forts d'une piste


Une façon de déterminer les moments forts et calmes est de traiter la piste avec un filtre passe-bas et d'obtenir une moyenne mobile pour le niveau de volume. Après cela, nous pouvons enregistrer ce niveau de volume dans un format qui nous convient, par exemple, dans un tableau flottant.


Si vous parvenez à identifier dynamiquement les endroits calmes et bruyants de la musique, vous pouvez contrôler très efficacement la tension et l'atmosphère de votre jeu. Par exemple, avant la bataille avec le boss, une mélodie alarmante est jouée et lorsque le boss apparaît, elle devient plus forte. Vous pouvez utiliser l'algorithme pour déterminer le niveau de volume et amplifier toutes les lumières qui se trouvent sur la scène. Ainsi, le joueur comprendra que l'apogée viendra bientôt.



Création d'une couche basée sur des données audio.


, , , , ( ). , , 2D-? . :



3D, 2D . , Audiosurf , .



Elastomania, ? !?


, , , - .


Conclusion


, , . , , , , . , , , . , , . Unity. !



Liens utiles


Source: https://habr.com/ru/post/fr429872/


All Articles