Remarque: je ne vous demande pas comment créer un clone de l’un d’eux. Je demande comment ils fonctionnent.
Je suis sûr que tout le monde a vu les jeux dans lesquels vous utilisez vos propres fichiers de musique (ou ceux fournis) et les jeux génèrent des niveaux basés sur ces fichiers, tels que Audiosurf et Beat Hazard .
Voici une vidéo d'Audiosurf en action, pour montrer ce que je veux dire.
Si vous fournissez une chanson heavy metal, vous obtiendrez un ensemble complètement différent d'obstacles, d'ennemis et d'expérience de jeu de quelque chose comme Vivaldi.
Ce qui m'intéresse, c'est comment fonctionnent ces jeux. Je ne sais pas grand-chose de l'audio (du côté des données), mais comment traite-t-on le morceau pour comprendre quand il se stabilise ou quand il s'accélère? Je suppose qu'ils pourraient simplement alimenter les valeurs de hauteur (en supposant que ce genre de choses existe dans les fichiers audio) pour former un niveau, mais cela ne l'expliquerait pas complètement.
Je cherche soit une explication, des liens vers des articles sur ce genre de choses (je suis sûr qu'il existe un terme ou des termes), soit même une implémentation open source de ce genre de choses ;-)
EDIT: Après quelques recherches et un peu d’aide, j’ai découvert la technologie FFT (Fast Fourier Transform). C’est peut-être un pas dans la bonne direction, mais c’est quelque chose qui n’a aucun sens pour moi… ou correspond à ma connaissance de la physique des ondes.
la source
Réponses:
Le terme que vous recherchez est traitement / analyse du signal. Il existe de nombreuses techniques mais la technique fondamentale utilisée par ces jeux est la détection de battement . Ceci essaye de calculer le tempo de la chanson et où sont les battements dans une mesure et donc de placer les obstacles à la distance appropriée pour qu'ils coïncident avec chaque battement.
La façon dont les jeux savent à quel moment entrer, etc. peut aller de très simple à la mesure de l'amplitude (volume) de la forme d'onde ou à quelque chose de plus complexe, comme isoler le volume de certaines fréquences et en mesurer le volume.
Si cela vous intéresse, examinez le traitement du signal numérique pour voir comment analyser les formes d'onde, ce qui correspond essentiellement à la fonction de chargement de ces jeux.
Ces liens sont bons pour vous aider à démarrer:
Introduction à la
théorie du traitement du son et aux techniques de la musique électronique
Introduction aux filtres numériques
J'espère que ça t'as aidé :)
-Rayon
EDIT: Je viens de voir votre montage concernant les transformations de Fourier et je me suis dit que je pourrais en ajouter un aperçu, bien que je ne sois en aucun cas un expert en la matière!
La FFT est un moyen de calculer la transformée de Fourier réelle d'une forme d'onde. En gros, si vous chargez un fichier audio dans Audacity , vous verrez la forme d'onde avec la timeline en haut, c'est le domaine temporel . La FFT convertira un signal du domaine temporel dans le domaine fréquentiel (essentiellement toutes les fréquences présentes dans l'audio).
Cette conversion est utile pour l'analyse spectrale. Dans un exemple de jeu, si vous réalisiez une transformation de Fourier, vous pourriez facilement calculer la quantité d'occurrences de haute fréquence dans l'audio, puis ajouter des effets visuels clignotants, des étoiles ou quelque chose associé à des sons généralement à haute fréquence. Pour les basses fréquences, vous pourriez avoir de gros monstres gloutons se déplaçant au rythme des sons de basse, etc.
la source
Voici une excellente série de tutoriels en sept parties sur ce sujet par Badlogic Games. Ils couvrent tout, des bases à la mise en œuvre.
http://www.badlogicgames.com/wordpress/?cat=18
Ils essaient d'imiter l'algorithme Audiosurf avec le code et tout.
la source
Les données issues de l'analyse de la variation d'énergie spectrale suffisent à générer ce type de carte. Ici, le problème peut être s'il y a trop de données à traiter: pas quel type de données est utilisé, mais comment.
Après avoir visionné certaines vidéos, je commence à croire que les données sont déplacées plus loin dans le domaine de la fonctionnalité (domaine de temps -> domaine de fréquence -> domaine de fonctionnalité). Le logiciel génère des données en utilisant les changements d’énergie spectrale et tente de reconnaître les caractéristiques connues, puis utilise les informations relatives à ces caractéristiques pour configurer la carte. La reconnaissance peut être effectuée par clusterisation, maximum de vraisemblance, réseaux de neurones, algorithme génétique, etc.
Une fois la reconnaissance terminée, vous avez des informations telles que: où la caractéristique est trouvée dans le temps et la fréquence , quel type de fonctionnalité est trouvée, la vitesse de déplacement du vecteur de caractéristique, etc. vous pouvez utiliser ces données pour alimenter une génération de carte algorimth, laissant ainsi la place à des améliorations telles que l'amélioration des algorithmes de reconnaissance, la reconnaissance d'un plus grand nombre de fonctionnalités, l'extraction de plus de données, la recherche de nouveaux moyens de "restituer" ces données, etc.
la source