Journal AudioRacer : tentative de clone libre d'AudioSurf

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
22
15
mar.
2012

Bonjour!

Je viens vous présenter mon dernier projet de jeu-vidéo, réalisé dans le cadre de mes études. Le semestre dernier, aucun des sujets proposés n'ayant attiré mon attention, j'avais soumis et réalisé le sujet qui a mené au jeu Genetic Invasion.
Ce semestre ci, j'ai récidivé et ai cette fois soumis un sujet consistant à développer un clone du jeu AudioSurf.

Pour ceux qui ne connaissent pas, l'idée d'AudioSurf est de construire une piste de course basée sur l'analyse d'une musique choisie par l'utilisateur parmi les fichiers de son disque dur.
Le vaisseau avance à vitesse constante pour que la piste et la musique soit synchro, donc les seules actions laissées au joueur sont le déplacement sur les cotés.
AudioSurf ajoute un gameplay de type puzzle game avec un système de couleurs de blocs à ramasser pour faire des combos, nous n'avons pas repris cette idée.

Nous nous sommes basés sur le jeu libre Racer, jeu de course de vaisseau classique disponible sur SourceForge : http://sourceforge.net/projects/racer/
Les avantages étant que Racer a un système de gestion de piste de course plutôt évolué nous permettant de faire pas mal de choses (même s'il n'autorise pas tout), un système de menu, d'entrée clavier, de rendu, etc, déjà en place, et un éditeur de piste nous permettant de visualiser les pistes générées par notre analyse.

En se basant sur une analyse de l'enveloppe de la musique et sur une détection de pics sur sa dérivée, on détecte les changements de rythme de la musique, ensuite pour chaque partie de la musique, on fixe la pente de la piste en fonction de la hauteur de l'enveloppe.
Des bonus sont placés sur la piste à chaque pic de l'enveloppe, le type du bonus dépend d'une analyse fréquentielle permettant de savoir si le son est plutôt aigu ou grave.
Enfin la piste va vers la droite ou vers la gauche entre deux changements de rythme selon que le son est en moyenne plutôt aigu ou grave sur cette portion de piste.
Pour ceux désirant en savoir plus sur l'analyse musicale, tout est là, graphes à l'appui : http://projects.haxx.es/p/audioracer/page/Analyze/

Le résultat est plutôt mitigé, ça fonctionne un peu mais pas trop, le rapport entre la musique et le jeu se ressent mais n'est pas non plus bouleversant.
Notamment l'idée d'utiliser grave/aigu pour le droite/gauche de la piste ne donne pas un résultat intéressant.
Du coté du gameplay on retombe sur le même biais qu'AudioSurf, à savoir on a l'impression qu'il est juste là pour occuper le joueur en attendant la fin de la piste.
Ce qui m'avait plu avec AudioSurf, c'était de fouiller mon disque dur à la recherche de musiques créant les pistes les plus tordues, les plus pentues, etc.
Le jeu en lui même ne casse pas trois pattes à un transistor.

Bref, beaucoup de pistes d'amélioration pour en faire un vrai jeu intéressant :

  • Pousser plus loin l'analyse audio : isoler les instruments, détecter les voix, utiliser la stéréo…
  • Enrichir le gameplay
  • Enrichir le rendu : décor animé synchro avec la musique, …
  • Utiliser les possibilités du moteur de pistes laissées de coté : faire pencher la piste, des loopings, des vrilles, une séparation en deux parties, sauts…
  • Ajouter un système de HighScore, idéalement en ligne
  • Ajout d'obstacles

Ça s'appelle AudioRacer (pour l’anecdote, je voulais l'appeler MusicRacer pour plus s'éloigner du nom du jeu original, mais ça existe déjà : http://www.musicracer.de/ ), et ça se trouve ici :
http://projects.haxx.es/p/audioracer/

Je ne pense pas que l'on continue à travailler sur le projet, personnellement je n'ai pas les compétences nécessaires en analyse audio pour le mener plus loin de toutes façons.
J’espère par contre trouver le temps de bosser un peu sur Racer, qui mérite de devenir le jeu de course de vaisseau libre dont on a tous besoin :-)
Si quelqu'un souhaite reprendre AudioRacer là on l'a laissé, cela me ferait extrêmement plaisir, et je serais le béta-testeur le plus assidu!

J'en profite également pour remercier de nouveau le développeur de Racer, qui a répondu à nos mails de manière très précise et fournie quand on avait des soucis avec son code, et qui a ma foi fourni une base de code très bien organisée et plutôt facile à réutiliser dans Racer.

Je suis là pour répondre aux éventuelles questions postées en commentaire.

  • # Petit problème de lien ?

    Posté par  . Évalué à 3.

    Le lien vers Racer renvoie en fait vers : http://www.audio-surf.com/

    j'ai trouvé ceci http://sourceforge.net/projects/racer/ c'est le bon ?

    • [^] # Re: Petit problème de lien ?

      Posté par  (site web personnel) . Évalué à 3.

      Tout à fait, je me suis emmêlé dans les liens entre AudioSurf et Racer :-/

      Un modo pour corriger?

      • [^] # Re: Petit problème de lien ?

        Posté par  . Évalué à 3.

        Voilà, c'est fait.

        « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

  • # manque lib

    Posté par  (site web personnel) . Évalué à 3.

    Toutes les libs nécessaires ne sont pas présentes dans l'archive (libfann2 par exemple). Peut être est-ce possible de tout lier statiquement?

    Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

    • [^] # Re: manque lib

      Posté par  (site web personnel) . Évalué à 4.

      Tout est possible, en fait l'archive a été faite de manière très bourrine, ça a été compilé sur une debian, et comme certaines libs étaient pas dans la même version que sur notre archlinux, on les a copiées dans l'archive pour que ça tourne, mais c'est sûr qu'on a pas ajouté les dépendances qui nous posaient pas de soucis.

      J'avoue qu'autant je fais l'effort pour Genetic Invasion de tenter de fournir des binaires statiques, autant pour ce jeu pas fini je pense que ce n'est pas la peine. (après comme d'habitude, si quelqu'un fait un binaire statique je veut bien l'héberger)

      En plus on dépend du système de build de Racer que je ne maitrise pas du tout (autogen et compagnie alors que je suis habitué à cmake)

      • [^] # Re: manque lib

        Posté par  . Évalué à 1.

        Moi j'avoue que ça donne pas envie de tester,tu fais un post pour un logiciel, quelqu'un prend la peine d'essayer, d'envoyer un retour, et en gros c'est "Ouais désolé, en fait demmerdes toi, j'ai pas vraiment envie de me prendre la tête".

        C'est le genre de truc, autant pour le developpeur je comprends que se soit pénible, autant pour l'utilisateur ça devient vite une misère(rechercher, installer les lib en versions de dev, analyser, comprendre le code…).

        • [^] # Re: manque lib

          Posté par  (site web personnel) . Évalué à 2.

          Le but n'est pas de trouver des joueurs puisque le jeu n'est pas réellement intéressant à jouer, l'idée était plus de trouver des développeurs.
          Et le développeur, il faudra bien qu'il compile le jeu à un moment ou à un autre.

          Cela dit l'archive fonctionne, il faut juste installer les dépendances.

          • [^] # Re: manque lib

            Posté par  (site web personnel) . Évalué à 3.

            il faut juste installer les dépendances

            Si elles ne sont pas dans ta distrib, ça veut dire se palucher 36 compilations de dépendances juste pour pouvoir tester le jeu. Même un dev a envie d'essayer avant de contribuer :-)

            Le post ci-dessus est une grosse connerie, ne le lisez pas sérieusement.

  • # Ça compile pas...

    Posté par  (site web personnel) . Évalué à 1.

    In file included from MoveTrackAttachmentDelta.cpp:12:0:
    MoveTrackAttachmentDelta.h:32:51: erreur: expected ‘)’ before ‘edge_name’
    MoveTrackAttachmentDelta.h:50:9: erreur: ‘size_t’ in namespace ‘std’ does not name a type
    MoveTrackAttachmentDelta.h:52:9: erreur: ‘size_t’ in namespace ‘std’ does not name a type
    In file included from MoveNodeDelta.cpp:12:0:
    MoveNodeDelta.h:30:36: erreur: expected ‘)’ before ‘node_id’
    MoveNodeDelta.h:43:5: erreur: ‘size_t’ in namespace ‘std’ does not name a type
    MoveNodeDelta.cpp:18:1: erreur: prototype for ‘Document::NodePositionFinder::NodePositionFinder(std::size_t)’ does not match any in class ‘Document::NodePositionFinder’
    MoveNodeDelta.h:24:7: erreur: candidates are: Document::NodePositionFinder::NodePositionFinder(const Document::NodePositionFinder&)
    MoveNodeDelta.h:24:7: erreur:                 Document::NodePositionFinder::NodePositionFinder()
    MoveNodeDelta.cpp: In member function ‘virtual void Document::NodePositionFinder::read(const Track::Track&, btVector3&)’:
    MoveNodeDelta.cpp:25:46: erreur: ‘node_id’ was not declared in this scope
    MoveNodeDelta.cpp: In member function ‘virtual void Document::NodePositionFinder::write(Track::Track&, const btVector3&)’:
    MoveNodeDelta.cpp:31:88: erreur: ‘node_id’ was not declared in this scope
    MoveTrackAttachmentDelta.cpp:20:1: erreur: prototype for ‘Document::TrackAttachmentPositionFinder::TrackAttachmentPositionFinder(std::size_t, std::size_t)’ does not match any in class ‘Document::TrackAttachmentPositionFinder’
    MoveTrackAttachmentDelta.h:24:7: erreur: candidates are: Document::TrackAttachmentPositionFinder::TrackAttachmentPositionFinder(const Document::TrackAttachmentPositionFinder&)
    MoveTrackAttachmentDelta.h:24:7: erreur:                 Document::TrackAttachmentPositionFinder::TrackAttachmentPositionFinder()
    MoveTrackAttachmentDelta.cpp: In member function ‘virtual void Document::TrackAttachmentPositionFinder::read(const Track::Track&, btVector3&)’:
    MoveTrackAttachmentDelta.cpp:30:60: erreur: ‘m_edge_name’ was not declared in this scope
    MoveTrackAttachmentDelta.cpp:31:69: erreur: ‘m_attachment_name’ was not declared in this scope
    MoveTrackAttachmentDelta.cpp: In member function ‘virtual void Document::TrackAttachmentPositionFinder::write(Track::Track&, const btVector3&)’:
    MoveTrackAttachmentDelta.cpp:40:55: erreur: ‘m_edge_name’ was not declared in this scope
    MoveTrackAttachmentDelta.cpp:41:61: erreur: ‘m_attachment_name’ was not declared in this scope
    make[3]: *** [libdocument_la-MoveNodeDelta.lo] Erreur 1
    make[3]: *** Attente des tâches non terminées....
    make[3]: *** [libdocument_la-MoveTrackAttachmentDelta.lo] Erreur 1
    make[3]: quittant le répertoire « /home/olojkine/Bureau/racer-0.0.320/libtrack/document »
    make[2]: *** [all-recursive] Erreur 1
    make[2]: quittant le répertoire « /home/olojkine/Bureau/racer-0.0.320/libtrack »
    make[1]: *** [all-recursive] Erreur 1
    make[1]: quittant le répertoire « /home/olojkine/Bureau/racer-0.0.320 »
    make: *** [all] Erreur 2
    
    

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.