Piton-it!

Dans le même esprit que Fisarmonica j’ai aussi un autre projet que j’ai appelé Piton-it! (avec le point d’exclamation collé), qui était prévu pour saisir une tablature d’accordéon diatonique, sans passer par la musique. Le concept est qu’on écrit le numéro des boutons, la durée des notes (je simplifie) et ensuite il y a un petit script qui transforme tout ça en vrai fichier Lilypond. Qui est ensuite traité par Fisarmonica pour sortir une belle tablature.

Pourquoi ce nom ? C’est un jeu de mot vaseux, dû au fait que d’une part j’ai écrit le script avec un langage nommé Python, mais aussi d’autre part et surtout parce qu’en québecois ce que nous nommons bouton (du clavier) se dit piton. Donc Piton-it! voudrait dire : Pitonne-le! soit transforme les numéros de boutons en musique. J’avais prévenu que c’est vaseux.

Et pour le fun, si un jour un québecois vous demande qui a fait cette célèbre série télévisée Flying circus, ou le film Sacré Graal !, méfiez-vous : vous allez prononcer Monty Python à la française, soit piton et non païtonne et lui il va entendre « Mon p’tit bouton ».

Ce projet, commencé en 2009, est resté inachevé par manque de temps et surtout de compétences en Python, car sinon la réflexion sur la syntaxe est à maturité. Si ça peut donner à quelqu’un l’envie de m’aider à finir, je vais raconter ci-après où j’en suis.

Présentation

La particularité de Piton-it! est de ne pas utiliser de notes mais uniquement des numéros de boutons et indications de clavier pour saisir la partition.

Piton-it utilise un fichier en texte brut d’extension .pit, tel que n’importe quel éditeur de texte permet d’en saisir (par exemple le bloc-notes de Windows).

Les fichiers générés par Piton-it! (fichiers .ly, .pdf et .midi) auront tous le même nom que le fichier .pit, il convient donc dès le départ de choisir correctement ce nom.

La syntaxe est simplissime, aucune connaissance en théorie musicale n’est requise, il suffit de recopier les numéros de boutons (en réalité un peu plus mais à peine).

Les fichiers générés par Piton-it! sont prévus pour utiliser Fisarmonica afin de produire une tablature de qualité. Il faudra donc également installer celui-ci pour obtenir des tablatures, sinon on aura au moins une partition utilisable.

Structure de fichier

La structure d’un fichier .pit est composée de deux parties, l’en-tête (nom du morceau, tonalité etc.) et la musique. L’en-tête comporte les informations suivantes :

 Toutes ces informations sont facultatives, mais leur absence se répercutera sur le fichier lilypond.

Par défaut le système de tablature est celui qui se trouve dans le fichier de configuration de Piton-it!, on peut le modifier à cet endroit ou l’indiquer dans l’en-tête. Ce paramètre reste également modifiable dans le fichier .ly produit, afin de générer à l’envie l’une ou l’autre des tablatures.

Les indications de nombre de dièses, bémols ou tonalité sont exclusives : une seule suffit. Si aucune n’est donnée Piton-it! comprendra que l’on est en Do majeur.

En l’absence de métrique ce sera par défaut du 4/4.

Il est important de retenir que chaque ligne de l’en-tête est composée de la même façon : code de l’information suivi du signe = (ce signe est important, car il permet d’identifier les informations comme faisant partie de l’en-tête) puis le contenu de l’information. Ceci explique pourquoi l’indication de mode mineur soit donnée par m= et non par m seul.

L’indication de tonalité du diatonique permet d’indiquer dans quelle tonalité le morceau a été saisi, ce qui facilitera la transposition dans une autre tonalité si le besoin s’en fait sentir pour un autre utilisateur de la partition. Elle n’est pas indispensable mais courtoise.

Exemple  :

Ensuite vient la musique proprement dite, dont la syntaxe sera expliquée à la suite.

 

Comme il est facile de le constater, rien de plus simple… Pas de double apostrophe ou autre délimiteur pour le texte, une syntaxe musicale qui est basée (en ce qui concerne les données musicales pures) sur des caractères facilement accessibles quasiment sans bouger les mains, et une symbolique facile à retenir.

Syntaxe

La première chose à remarquer est que certaines lignes commencent par un / et d’autres non. Les lignes commençant par / contiennent des instructions musicales uniquement et non des notes. Elles doivent rester seules sur leur ligne.

Parties

Nom de partie

Le nom de partie (repère) est une indication textuelle ou numérique permettant de distinguer différentes parties d’un morceau, et est imprimé à la verticale de la barre de mesure ou de la clé.

Il est introduit par un /d pour une indication textuelle (mémo : d comme début de partie) ou /n pour une indication numérique (mémo : n comme numéro de partie). Le choix du d au lieu d’un p qui aurait semblé plus logique est lié au fait que le d est sous le majeur de la main gauche en position de repos sur le clavier, alors que la main droite est localisée sur le pavé numérique pour la saisie des blocs de notes.

Exemples :

Une indication laissée vide (/d ou /n tout seul sur sa ligne) sera automatiquement rempli par A, B, C… ou 1, 2, 3…

Si des indications plus élaborées étaient nécessaires il faudrait alors retoucher le fichier .ly une fois celui-ci généré. On pourra notamment y modifier l’aspect de ces indications (par défaut dans un cadre rectangulaire) pour avoir un repère sans cadre ou avec un encadrement sous forme de cercle.

Indications de parties

En outre, certaines indications relatives aux différentes parties du morceau devront être insérées avant ou après certaines mesures :

/-/ Anacrouse (ou levée) : il s’agit d’une mesure incomplète, qui nécessite d’être signalée faute de quoi lilypond risque fort de tousser… il n’est pas nécessaire d’indiquer une fin, puisqu’il s’agit d’une mesure incomplète, l’initialisation de la mesure suivante suffira à en indiquer la fin.

// Début de partie non répétée, à insérer avant la première mesure, suivie d’une espace ou, plus clair, d’un retour ligne.

/*2/ Début de partie à répéter, à insérer avant la première mesure, suivie d’une espace ou d’un retour ligne. Le chiffre (obligatoire) indique le nombre de répétitions (identique au nombre de fins alternatives).

/*/ Indication de fin alternative (sans chiffre) à insérer en début de chaque fin alternative. La numérotation des fins alternatives est automatique.

/// Fin de partie.

D’autres indications non encore prévues pour l’instant pourraient facilement être notées en utilisant toujours le même principe, à savoir le maximum d’informations devant n’utiliser que les touches les plus accessibles du clavier dans la position de repos, et de préférence aussi bien sur un azerty qu’un qwerty. On a par exemple les combinaisons suivantes : /+/ /-/ qui ne sont pas encore utilisées.

Mélodie

Les lignes contenant la mélodie commencent toutes obligatoirement par un chiffre, et comprennent plusieurs blocs de notes suivis éventuellement d’un commentaire.

Bloc de note

Un bloc de note se présente ainsi : 3s-1*8 et est composé de plusieurs informations :

    • Le numéro de bouton : 1 à 11. Le numéro de bouton est la seule information absolument obligatoire dans un bloc de note.

    • Le clavier sur lequel est joué la note : f pour le premier clavier (mémo : f comme first) et s (mémo : s comme second) pour le second. Pour les tablatures pour diatoniques à trois rangées le troisième clavier sera noté t (mémo : t comme third), cette lettre est moins facile à taper mais les notes sur ce clavier sont moins nombreuses, donc ça reste peu gênant. Si le clavier n’a pas changé d’une note à la suivante il est inutile de le répéter.

    • On peut également noter le clavier à la méthode Cadb, à savoir avec des ‘ et  » mais dans ce cas, comme l’absence d’indication équivaut à la répétition de la valeur précédente, il faut absolument indiquer cette information sur tous les boutons, d’une part, et surtout ne pas oublier d’indiquer n=' dans l’en-tête. Cette façon de noter, moins ergonomique à la saisie, peut cependant être préférée pour des raisons de lisibilité.

    • Le sens : + pour poussé (mémo : plus et poussé commencent par un p) et – pour tiré (mémo : tiret et tiré commencent par un t). Si le sens n’a pas changé d’une note à la suivante il est inutile de le répéter. Le symbole du tiret, même s’il s’agit en fait du signe moins du pavé numérique, fait également référence au fait que dans le système Corgeron une note tirée est affectée du tiret de soulignement _.

    • Éventuellement le numéro du doigt à utiliser (1 = index, 2 = majeur, …). Cette indication est alors obligatoirement précédée du sens (+ ou -) pour la distinguer du numéro de bouton (le bouton 1 joué avec le doigt 1 n’a rien a voir avec le bouton 11 sans indication de doigt). Si le numéro de bouton est suivi d’une indication de clavier la mention du sens n’est pas nécessaire, mais il est plus prudent de prendre de bonnes habitudes.

    • La durée de la note : la durée de la note est obligatoirement précédée de *. La valeur 1 représente une ronde, 2 une blanche, 4 une noire, 8 une croche, 16 une double croche… et 1. (1 suivi d’un point) représente une ronde pointée, 4. une noire pointée etc. S’il s’agit d’un nolet (triolet ou autre) la durée de celui-ci doit être indiquée uniquement sur la première note de la façon suivante : durée totale du nolet divisé par le nombre de notes qui le composent. Par exemple 4/3 pour un triolet de croches : durée totale = une noire et nombre de notes = 3. Si la durée n’a pas changé d’une note à la suivante il est inutile de la répéter (sauf pour les nolets qu’il faut impérativement indiquer). La durée est obligatoirement la dernière information du bloc.

    • Un silence est noté r (mémo : r comme rien, ou repos) sans indication de clavier ni de bouton mais par contre la durée est nécessaire (sauf si la note précédente est de la même durée bien entendu).

Petite explication de texte : 6s+*4 8*8 7f 8- (ou 6'+*4 8'*8 7 8- avec la notation de clavier façon Cadb) se comprend ainsi : la première note est le bouton 6 sur le clavier intérieur, le sens est poussé, et la durée vaut une noire, la 2e est sur le bouton 8 du même clavier (aucune indication de changement en mode standard, répétition du ‘ en mode Cadb), également tirée (aucune indication de changement) et vaut une croche (indication de durée), la 3e sur le bouton 7 , clavier extérieur, même sens et même durée, et la dernière sur le bouton 8 clavier intérieur mais tirée.

Il est impératif de respecter l’ordre de saisie des informations relatives à une note : bouton, clavier , sens, doigté et durée.

Une espace est absolument nécessaire pour séparer les différents blocs de notes, mais un nombre supérieur d’espaces ne gênera pas Piton-it. De même des espaces en fin de ligne n’ont aucune incidence, et des sauts de ligne destinés à améliorer la lisibilité non plus.

Bien que non nécessaires, la répétition des information facultatives est judicieuse au début de chaque nouvelle mesure. En effet il est fréquent de faire des copier/coller de mesures afin d’accélérer la saisie. Or dans ce cas il faudrait absolument vérifier que, si une indication est manquante en début de mesure, l’indication correspondante est correcte dans la mesure précédente. Il est plus simple de prendre la bonne habitude d’initialiser complètement chaque mesure.

Chaque mesure doit être saisie sur une unique ligne, le saut de ligne sera compris comme la fin de mesure. Si une mesure ne comprend pas le bon nombre de notes (uniquement en début de partie) elle sera comprise comme une anacrouse sans qu’il soit besoin de le préciser.

Des commentaires peuvent être insérés (dans l’exemple ce-dessus il s’agit des numéros de mesure par partie – et non en numérotation absolue) en les faisant précéder de /- ou de % (la première version est plus simple à saisir mais la seconde respecte la norme lilypond). On peut mettre tout le texte que l’on veut mais il doit rester sur la même ligne que la mesure.

Les basses

Elles doivent impérativement être saisies sur la ligne suivant immédiatement les notes, avec tout simplement une lettre par temps. Il est possible d’indiquer également un doigté.

Il est impératif de noter tous les temps de la mesure, par exemple g g g g pour quatre sols sur une mesure à 4 temps. Au cas où l’accord n’est pas égal à la basse il faut décomposer ainsi : g/d ou g/d/d.

En outre il est fortement recommandé d’indiquer le sens des basses pour celles qui peuvent être jouées dans les deux sens, afin que la tablature produite respecte l’original. L’indication de sens est la même que pour les notes, – pour tiré, l’absence d’indication sera comprise comme poussé.

Commentaires

On peut également écrire des commentaires (des commentaires pour Piton-it! qui ne seront pas traduits en code lilypond, au contraire des commentaires introduits par /- qui eux deviendront du code lilypond). Ils ne peuvent être que sur une ligne séparée et celle-ci commence par un ;.

Ceci n’a que peu d’intérêt puisque le principe est qu’un fichier .pit est vite écrit et vite converti. Par contre pour un fichier modèle, préformaté selon vos préférences, cela peut en avoir. Voici un exemple de fichier modèle à adapter à vos besoins.

 Les lignes commençant par des ; sont des aides-mémoire.

Contrôle de syntaxe

Aucune à ce niveau, s’il y a des erreurs ce sera lilypond qui les détectera.

Le pseudo-code

J’ai commencé à écrire du code en Python, mais il n’est certainement pas propre, pas optimisé, bref, il vaudrait mieux repartir de zéro. Et surtout c’est écrit pour ma première version de Fisarmonica, qui n’était pas écrite en scheme, mais en Python et qui se contentait de rajouter une variable contenant la mélodie transposée pour ensuite utiliser une tablature de guitare détournée. Donc strictement inutilisable en l’état.

Mais je donnerai malgré tout ce que j’ai fait, si ça peut aider…

Par contre le pseudo-code est un peu plus abouti. Il est écrit pour utiliser un fichier modèle dans lequel on ira remplacer les variables musicales par celles calculées par le code, mais ce fichier modèle n’existe pas non plus, encore un truc pas fini… Et comme dit plus haut, de toute façon il ne correspondrait plus à la nouvelle version de Fisarmonica.

On initialise les différentes variables de contenu header content etc.

On initialise les valeurs par défaut de l’en-tête

On initialise les valeurs par défaut du sens + clavier f

On ouvre le fichier passé en argument si c’est un .pit sinon erreur

on mémorise ce qui se trouve avant .pit pour fabriquer le nom de fichier ly

On éclate le fichier en lignes

On analyse les lignes unes à unes

si la ligne commence par ; c’est un commentaire on saute

Si la ligne contient un = c’est de l’en-tête

On sépare au =

ce qui est avant est le type d’info, après la valeur de l’info

en fonction de la liste des types on fabrique la ligne d’info et on l’ajoute à la bonne variable

Si la ligne commence par un / c’est une indication musicale

si ce qui suit est :

      • d c’est un début de partie :

        • on sépare au = s’il y en a un, ce qui est après va dans le markup

        • si il n’y a rien après le d c’est un mark default

        • ça va dans la variable musique

      • -/ c’est une anacrouse (partial) et ça va dans la musique

      • * un chiffre / c’est un volta repeat chiffre et ça va autant dans la musique que les basses

      • * / fin alternative → musique + basses

      • -/ fin d’alternative → musique + basses

Si la ligne commence par un chiffre c’est une mesure de mélodie

    • on éclate la ligne en mots

    • tant que c’est des chiffres c’est le numéro de bouton, on enregistre et on regarde la suite

    • si c’est une lettre c’est le clavier, on enregistre et on regarde la suite

    • si c’est + ou – c’est le sens, on enregistre et on regarde la suite

    • si c’est un chiffre c’est le doigté, on enregistre et on regarde la suite

    • si ça commence par * c’est la durée, on enregistre et on regarde ce qui suit

      • s’il n’y a que des chiffres c’est fini

      • s’il y a un / c’est un nolet, on regarde ce qui suit le / et on le met dans le compteur du nolet

    • on fabrique le nom de la note selon la table des notes, en fonction du sens et du clavier

    • on ajoute la durée s’il y en a une, le clavier (toujours) et le doigté s’il y en a

    • on conserve la valeur de clavier et sens au cas où le prochain bloc n’en possède pas

    • si le compteur du nolet est supérieur à 1 on retire 1

    • s’il est égal à 1 c’est la fin du nolet }

    • si ça commence par /- c’est un commentaire %

    • on écrit la note avec ses indications supplémentaires dans la variable musique

    • à la fin de la la ligne on ajoute un saut de ligne et une tabulation

Si la ligne commence par une lettre c’est une mesure de basses

    • on éclate la ligne en mots

    • si le mot contient un ou plusieurs / c’est un temps fractionné

      • on éclate sur le /

      • ???

    • on écrit dans la variable basses

    • à la fin de la la ligne on ajoute un saut de ligne et une tabulation

à la fin du fichier on ajoute } dans la musique et les basses

On ouvre le fichier modèle et on y écrit

    • la variable de contenu header à la place de l’existante

    • la variable de contenu Global à la place de la première ligne de l’existante

    • la variable de contenu mélodie à la place de l’existante

    • la variable de contenu basses à la place de l’existante

Conclusion

C’est clair, c’est loin d’être fini, mais je me dis qu’un jour peut-être je vais reprendre ça, n’hésitez pas à me dire ce que vous en pensez.

Bookmarquez le permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *