Journal Sortie de Linthesia 0.5.0 pre-night-alpha: un "piano-hero" multi-plateforme

Posté par (page perso) . Licence CC by-sa
26
28
déc.
2014

Cher journal

Ce qui devait être au début juste un simple bug fix a été maintenant une quasi-complète reécriture, et je suis fier de te dire que maintenant Linthesia est construit sur des bases solides et cross plateformes (C++11 avec SFML et RtMidi). Le jeu commence a être utilisable mais il reste énormément à faire, et je ne serai pas contre un coup de main, surtout que le code est très accessible, même pour des débutants en panne d'idée de projets.

Le github pour les impatients : Linthesia

Un mot rapide sur le gameplay

Une image vaut mieux que mille mots : voila à quoi ressemble l'écran principal de jeu:
Gameplay

Le joueur choisit une musique (via des fichier MIDI), les pistes qu'il veut jouer, le jeu fait défiler les notes et le joueur doit jouer les notes quand elles arrivent au contact du clavier, rien de bien extraordinaire. La précision à laquelle le joueur a réussi à entrer la note est comptabilisée en bas de l'écran.

Le jeu n'est pour l'instant utilisable qu'avec un clavier MIDI, c'est donc beaucoup moins "un jeu grand public, rapide pour s'amuser pendant 5 minutes" mais plus pour la niche des personnes pratiquant le piano/synthé. Je ne sais pas si cela restera ou s'il y a moyen d'en faire un jeu plus grand public (peut-être en trouvant des fichiers midi avec peu de touches, de manière à ce qu'un clavier de PC soit suffisant ?)

Liste des fonctionnalités dans cette version

  • possibilité de mettre ses propres fichiers midi dans le dossier "songs"
  • possibilité de choisir l'output/input MIDI
  • possibilité de choisir si une piste est jouer par l'ordinateur/par le joueur/muette/non afficher
  • écran de jeu comme montré au dessus
  • ralentir/accélérer le temps
  • mettre en pause le jeu
  • et … c'est tout

Le contexte

il y a quelques années j'ai voulu me mettre à jouer du piano, car c'est bien pour attirer les personnes du sexe opposé il parait. Comme j'étais étudiant sans un sou a l'époque, plutôt que d'acheter un piano j'ai acheté un synthé MIDI, et plutôt que de prendre des cours de piano, j'ai essayé de voir s'il y avait des logiciels pour "apprendre" à jouer.

Je suis tombé sur Synthesia, or il est Windows/Mac only (bon maintenant Ios et Android aussi), mais pas Linux et pire encore, il n'est pas opensource. J'ai donc cherché une alternative. Là je suis tombé sur Linthesia, et malheureusement ça n'a compilé que pour une version d'Ubuntu puis cela a arrêté de fonctionner à l'upgrade suivante d'Ubuntu. Le bug est sur le tracker de Debian/Ubuntu et du sourceforge du projet depuis plusieurs années.

Avec un ami, nous avons essayé de traquer le bug, vu que celui-ci rendait le jeu totalement inutilisable. A la fin nous nous sommes rendu compte que le bug venait du fait que Linthesia utilisait une fonction non documentée des binding C++ de GTK, et que cette fonction a été retirée à partir d'une version X de ces bindings. La où cela devenait gênant c'était que cette fonction n'avait pas d'équivalent simple et s'occupait d'une partie majeure du jeu (le rendu des fontes en un tableau de pixel pour ensuite être collée sur un contexte OpenGL).

Donc après avoir réfléchi, avoir pesé que le projet semblait ne plus être maintenu et que beaucoup de fonctionnalités étaient manquantes (pas de "tutorial", beaucoup de parties "brouillon", pas d'historique des scores, pas de possibilité de retour en arrière etc.) et après avoir vu la qualité du code, je me suis mis en tête de re-écrire le projet.

Et donc voila à présent je commence à avoir quasiment les mêmes fonctionnalités que la version originale de Linthesia.

Le futur

Je pense à présent que le code du jeu a atteint une maturité suffisante pour l'ouvrir aux contributions externes, il y a nombre de petites améliorations qui sont à la portée d'un débutant, et pour lequel je peux offrir de l'accompagnement au besoin.

Pour les non-développeurs avec une âme "expérience utilisateur" et ou graphiste, je n'ai rien contre des idées/propositions pour rendre le jeu plus joli.

De l'aide aussi pour faire des packages pour les diverses distributions serait très fortement apprécié aussi.

Par exemple une personne m'a rapporté que le jeu crash sous Debian Wheezy et je serai a la recherche d'un dev sous Debian qui pourrait m'aider à corriger ce problème.

Fonctionnalités prévues dans le futur

  • Traduire l'interface du jeu (et permettre sa traduction)
  • S'adapter de manière élégante à diverses résolutions d'écran
  • Possibilité de faire des retour arrière
  • Introduction d'un mode "tutorial" avec des MIDI conçus pour
  • Amélioration du game play du jeu principal (voir quand le jeu est en pause/pas en pause, avoir un meilleur retour visuel quand une note est appuyée correctement)
  • Garder un historique des scores de manière à voir sa progression
  • s'assurer que le jeu compile bien partout
  • soyons fous, mais pourquoi pas un port Android/Ios (SFML a l'air de pouvoir le faire maintenant, et RtMidi devrait pouvoir être patchable pour offrir ce support)
  • porter le code pour Rust, parce que c'est hype.
  • # Apprentissage.

    Posté par (page perso) . Évalué à 2.

    Tout d'abord bravo pour ton travail. On voit bien ici l'avantage du libre, et tu en as profité. D'ailleurs, pourrais-tu préciser la licence sous laquelle tu (v)as placer ton logiciel ?

    J'aimerais connaître ce qu'apporte ce type d'application dans l'apprentissage de l'instrument. Vu d'ici cela ressemble plus à un jeu genre Simon, est-ce une méthode de practice ou cela restera un jeu, bien que l'on puisse mémoriser un morceau de cette façon ?

    Je ne peux malheureusement pas tester, je n'ai pas de clavier.

    « Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes. »

    • [^] # Re: Apprentissage.

      Posté par (page perso) . Évalué à 4. Dernière modification le 28/12/14 à 14:55.

      La license es GPLv2 car je reutilise encore le code de la mini "bibliotheque midi" qui etait dans le projet original (je l'ai nettoye, fixer un probleme de 32/64 bit pour les int, et porter pour tirer avatange du C++11, mais je dirais que 70% du code n'a pas change) et qui est sous GPLv2 (ou 3)

      si je devais retirer ce dernier morceau de code, je pense que je passerai a MIT ou BSD

      Pour l'apprentissage, tres bonne question, vu que je suis rester a "quand j'aurai reecri ce logiciel je pourrais enfin me mettre au piano". Je pense que la version actuel ne permet que la memorisation bete et mechante de morceau.

      Ce qui pourrai faire du jeu une methode plus complete serait

      1. l'integration avec des vrais cours theoriques (il me semble qu'il y a plusieurs sites webs/series de videos youtube qui utilise synthesia pour la partie "pratique"), linthesia servirait donc ici principalement pour l'interactivite (jouer un morceau, peut etre integrer un mode "lecon" ou un midi serait entre couper de texte, de petite fleche et animation) et pour avoir un "feedback" (l'apprenant voit son score s'ameliorer et/ou gagne des medailles et/ou debloque des chansons)
      2. pouvoir remplacer la visualation "tapis de notes" en une vrai partition: j'ai une application opensource sur android qui prend un midi et affiche la partition en mettant en surbrillance la note jouer, ca doit pouvoir se porter ici, mais cela demanderait surement beaucoup de travail, mais cela offrirait un gros avantage je pense

      sinon oui je me sers souvent du coup de cet exemple personnel pour justifier le le libre.

  • # faire des packages

    Posté par (page perso) . Évalué à 2.

    De l'aide aussi pour faire des packages pour les diverses distributions serait très fortement apprécié aussi.

    Je suis intéressé.

    If you choose open source because you don't have to pay, but depend on it anyway, you're part of the problem.evloper) February 17, 2014

  • # grand public

    Posté par . Évalué à 2.

    S'il est possible de convertir un flux audio en midi facilement (?) tu peux essayer d'accepter les entrées audio et tu gagnes tout les possesseurs de micros et d'instrument de musique (ou d'une bonne voix) pour des fichiers MIDI simples. Si ça se trouve dans l'état actuel c'est déjà possible en maltraitant JACK un peu.
    En se moment je joue pas mal à Stepmania et je me disais justement qu'avec un jeu de ce type je me remettrais bien à un vrai intrument.

    • [^] # Re: grand public

      Posté par (page perso) . Évalué à 2.

      hmm je n'ai pas encore recherche dans ce sens la, mais c'est en effet une bonne idee. Je sais que le projet Performous a un systeme de "pitch detection" mais je pense que leur code actuel permettra pas de detecter des accords et autre notes superposes

  • # guitar hero

    Posté par . Évalué à 3.

    il y a quelques années j'ai voulu me mettre à jouer du piano, car c'est bien pour attirer les personnes du sexe opposé il parait.

    on t'a trompé, il s'agit en fait de la guitare… :)

    Pour Linthesia ça semble sympa, mais c'est vrai qu'une version pour clavier d'ordinateur ça apporterait plus de clients potentiels.

    • [^] # Re: guitar hero

      Posté par (page perso) . Évalué à 2.

      oui, d'ailleurs je me demande la dessus pour le "piano" avec un clavier

      l'interface actuel ne convient pas car:

      • pas assez de touches sur le clavier d'ordinateur
      • la disposition en plusieurs lignes du clavier d'ordinateur rend non-intuitif le jeu

      donc je pensais

      • soit trouver un algo pour compacter les notes sur une seule ligne de clavier (la ligne superieur a environ 12 touches, donc on doit pouvoir avec un algo naif compacter tous les DO sur une touche, tous les SI sur une touche etc.) ce qui permet de reutiliser l'interface standard, ca aurait l'avantage aussi de rendre le jeu plus accessible car on passerait des lors a un maximun de 12 notes ce qui rendrait le jeu "casual" (en poussant un peu la "compression" on doit pouvoir descendre a encore moins de touche et ainsi avoir des modes de difficultes)
      • soit utiliser toutes les touches du clavier et avoir une pluie de touche de clavier (avec la lettre a appuyer sur la "note qui descend", mais j'avoue pas trop etre convaincu par cette solution
      • [^] # Re: guitar hero

        Posté par . Évalué à 1. Dernière modification le 29/12/14 à 18:30.

        on peut utiliser le clavier comme pour les tracker de musique.

        http://b-knox.com/wp-content/uploads/2011/07/music-tracker-keyboard.png

        Je pense aussi que simplifier le jeu avec toutes les notes sur une seule touche quelle que soit l'octave serait la meilleure solution (pour clavier pc évidemment)

        J'ai essayé de le compiler, mais j'utilise kxstudio qui a une version de libjack0 incompatible avec libjack-dev. J'attendrais donc un binaire officiel (ou pas)

  • # Graphisme

    Posté par (page perso) . Évalué à 2.

    En voyant le screenshot je me disais qu'il y avait de quoi améliorer facilement (un peu de relief sur les boutons et les notes), que c'était assez facile pour que j'ose regarder, mais en téléchargeant les sources, ce qui est dans "graphics" me semble déjà avoir les effets recherchés… Pas vu comment l'apparence du clavier était géré, mais pour ce qui est des notes ça parait correct.

    Donc, comment ça se fait qu'il n'y ait pas ce graphisme des notes ? Comment le graphisme est géré ? Faut regarder où ?

    • [^] # Re: Graphisme

      Posté par (page perso) . Évalué à 3.

      oui en effet, j'ai un ticket la dessus https://github.com/allan-simon/linthesia/issues/52

      les raisons pour lesquelle ces graphismes ne sont pas utilises pour l'instant sont

      1. au moment ou j'ai implemente cette partie je ne voyais pas comment les reutiliser simplement (il me semble que la largeur d'une note que j'utilise est legerement plus/moins large que les originaux) et aussi je ne voyais pas comment "elargir" une note (j'imagine que juste l'etirer en largeur devrat suffire ?
      2. le risque de perdre du temps a essayer de faire marcher cela, de remarquer que je dois en fait utiliser Gimp pour retoucher aux images etc (ce que je deteste faire

      Le code pour generer le clavier de piano est ici https://github.com/allan-simon/linthesia/tree/master/src/keyboard (il y a une classe pour les notes blanches ou pour les noires)
      et pour le tapis de notes c'est ici https://github.com/allan-simon/linthesia/tree/master/src/screens/one_player_screen:

      • white_note_to_play /blac_note_play represente une "note" blanche ou noir sur le "tapis de notes"
      • note_ground represente le tapis de note sur lequel on affiche les white/black_notes_to_play

Suivre le flux des commentaires

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