Documentation de Songwrite

Jean-Baptiste ``Jiba'' LAMY (jiba@tuxfamily.org)

Copyright (c) 2002 Lamy Jean-Baptiste.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with the Invariant Sections being this foreword part.

Table of Contents

1  Introduction

Songwrite est un éditeur de tablature, destiné plus particulièrement aux guitaristes Linuxiens. Il est écrit en langage Python, et utilise Timidity (ou autre) pour jouer les tablatures, et GNU Lilypond (Lilypond ) pour les imprimer.

Pour l'installation et les pré-requis, voir le fichier README.

Songwrite est un logiciel libre Free Software, disponible sous licence GNU GPL (cette doc est sous GNU FDL; voyez le fichier LICENSE pour plus d'info!).

Faîtes plaisir à l'auteur, ne confondez pas ``Logiciels Libres'' et ``Freeware''! En plus d'être "Freeware", un Logiciel Libre est disponible sous forme de code source, qu'il est permis de modifier et de redistribuer librement.

1.1  Formats de fichier supportés


Format lecture écriture commentaires
Format SongWrite X X Format XML
Ancien format X   Sérialization Python (pickle)
Midi X X  
Rich Midi Tablature   E Midi avec des meta-événement pour les numéros de frets
Tablature Ascii E X L'importation marche avec les tab Ascii de SongWrite, mais avec les autres???
Lilypond   E Pas de paroles
LATEX et LyliPond   E Tablature avec Lilypond, paroles avec LATEX
PostScript   E Pour impression

``E'' signifie EXPERIMENTAL (pas ou insuffisamment testé), et ``X'' entièrement supportés.

L'importation Midi a été testée avec des fichier Midi en provenance de Songwrite, GNU Lilypond, Tabledit et NoteWorthy Composer.

Depuis la version 0.9, Songwrite utilise un nouveau format de fichier en XML. Il n'y a pas encore de document décrivant ce format, mais cela viendra! Les fichiers enregistrés dans l'ancien format peuvent être convertis au nouveau format simplement en les ouvrant dans Songwrite et en les enregistrant, ou bien à l'aide du script convert_to_xml. Ce script reçoit comme argument une liste de fichier à convertir (exemple: convert_to_xml /tablatures/*).

1.2  Liste de diffusion

Pour s'inscrire à la liste de diffusion de Songwrite, il suffit d'envoyer un mèl à Songwrite-subscribe@oomadness.tuxfamily.org. Pour se désabonner, envoyer un mèl à Songwrite-unsubscribe@oomadness.tuxfamily.org.

1.3  Un peu d'histoire à propos de SongWrite et GTablature...

Il était une époque reculée où Songwrite s'appelait ``GTablature''. Le nom a été changé depuis qu'il n'appartient plus au projet Gnome, et que Gtk a été remplacé par Tk.

Les utilisateurs de GTablature reconnaîtront sans doute l'interface, et le format de fichier est compatible!

En résummé, voici mes raisons pour quitter le projet Gnome:

1.4  Visions futures

Améliorer le support de l'impression.

Voir le fichier TODO pour plus d'info.

2  Configuration

La première fois que vous lancez Songwrite, la boîte de dialogue de configuration apparaît. La configuration par défaut devrait convenir pour la pluppart des distributions Linux; il peut cependant être intéressant d'utiliser un lecteur Midi différent de Timidity (comme ``playmidi %s'' si votre carte son supporte le Midi).

Pour changer la configuration a posteriori, prendre le menu edition |> préférences...

3  Créer une chanson

3.1  Propriétés de la chanson

Songwrite est fait pour éditer des ``chansons'' (désolé pour ceux qui jouent de la guitare sans chanter :-). Au démarrage, une nouvelle chanson est créée et affichée.



Une chanson se compose d'une ou plusieurs partitions. Le mot ``partitions'' doit être pris dans un sens très large, puisqu'il comprend les tablatures, mais aussi la batterie, et même les paroles!

Une chanson dispose aussi de diverses informations, comme le titre ou les noms des auteurs. Ces info peuvent être modifiées dans la boîte de dialogue des propiétés de la chanson (que l'on obtient par le menu chanson |> propriétés...). Le titre, le nom de l'auteur et les commentaires sont affichés en haut de la fenêtre.

La propriété langage de la chanson est utilisée pour les paroles, notamment lors de la conversion en source LATEX à l'impression



la boîte de dialogue des propiétés de la chanson se compose en haut d'une vue arborescente qui affiche les differentes partitions (cliquer sur les triangles violet pour replier ou développer l'arbre). Le reste de la fenêtre liste les propriété de l'objet sélectionné dans l'arbre (par défaut, la chanson).

3.2  Rythme

Le menu chanson propose différentes fonctions de lecture, et le menu chanson |> rythme permet de changer le rythme des mesures sélectionnées (ou de toutes les mesures si aucune note n'est sélectionnée).
Bogue
Seul les rythmes x/4 sont supportés pour l'instant.
Bogue
Le tempo peut être réglé sur chaque mesure, mais seul celui de la première mesure est pris en compte.

3.3  Menu Fichier

Le menu fichier propose les fonctions habituelles (ouvrir, ...) ainsi que l'import/export vers divers format.

3.4  Menu Edition

Ce menu permet notamment d'annuler ou de répéter les dernières opérations. Le nombre d'annulation est réglable (20 par défaut).

3.5  Zoom

Les boutons - et + à droite de la barre d'outil permettent de changer le zoom de l'axe temporel horizontal.

4  Les partitions

4.1  Propriétés des partition

Les différentes partitions sont affichées les unes en dessous des autres. Au démarrage, Songwrite affiche une seule partition: une tablature de guitare.

Chaque partition est en deux parties: un en-tête (le texte ``guitare'' par exemple) et le contenu de la partition elle-même. L'en-tête permet d'afficher des commentaires sur la partition, sur celui qui la joue, ...

Les partitions peuvent être masquée en cliquant avec le bouton droit sur leur en-tête. Cliquez de nouveau pour la démasquer.

Cliquez sur le lien ``propriétés'' en bleu à droite de l'en-tête d'une partition pour accéder à la boîte de dialogue de ses propriétés (ou prenez le menu partition |> propriétés...). Différents paramètres sont disponibles, selon les types de partitions:

4.2  Ajouter des partitions

Le menu partition propose différent type de partitions. Si le vôtre n'y est pas, mèlez-moi son accordage!

Le nombre de partition n'est pas limité, mais le format Midi utilisé pour la lecture est limité à 16 ``channel'', dont 1 pour la batterie. Dans SongWrite, chaque partition (sauf les paroles!) utilise 1 ``channel'', ou 2 si elle comprend des effets spéciaux (hammer, ...). On peut donc utiliser au moins 7 instrument à la fois sans problème.

Cliquer sur une partition permet de la sélectionner. Les menus partition |> monter, partition |> descendre et partition |> supprimer permmettent de déplacer ou de supprimer les partitions.

5  Tablature

Les tablatures sont créées par le sous-menu partition |> nouvel instrument à corde |> ...

SongWrite affiche une ligne pour chaque corde de l'instrument; comme sur une vrai guitare les cordes les plus graves sont les plus grosses! Les lines verticales correspondent aux barres de mesure; elles sont aujoutées automatiquement.

5.1  Notes

La souris (clic gauche) ou les flèches du curseur permettent de se déplacer au sein de la tablature. Pour ajouter une note, il suffit de tapper le (ou les) numéros correspondant à la fret. Si le lecteur Midi est bien configuré, Songwrite jouera les notes au fur et à mesure qu'elles sont entrées.

La durée des notes peut être modifiées à l'aide des boutons correspondant dans la barre d'outil. La largeur de la sélection correspond à la durée de la note, ainsi que le pas de déplacement.

Le bouton ``accentuation'' permet d'accentuer certaines notes (qui sont affichées en rouge).

Le menu note |> arranger à la case... permet de réorganiser toutes les notes sélectionnées sur les cordes de sorte à ce qu'elles soient joué au-delà de la case choisie. Pratique après une importation Midi!

5.2  Propriétés des notes

Double-cliquez sur une note (ou un groupe de notes) pour afficher la boîte de dialogue de propriétés des notes. Les propriétés sont les suivantes:

5.3  Effets speciaux

Songwrite supporte la pluppart des effets spéciaux réalisable avec une guitare: hammer/pull/legato, slide, dead notes, bend, tremolo, roll... sont tous présents! Les effets qui lient deux notes entre elles (hammers et slides) doivent être appliqués sur la première des deux notes. Le rolldoit être appliqué sur toutes les notes de l'accord, et pas seulement sur la basse.

Bogue
Il n'est pas possible de mettre plus d'un effet spécial par note :-(
Bogue
Les combinaisons de slide et de hammer de plus de 5 semi-tons ne peuvent pas être jouées en Midi.

5.4  Accordage

La boîte de dialogue d'une partition de type tablature permet de changer l'accordage ou le nombre de corde. Et si vous êtes adepte d'un instrument qui n'est pas encore dans le menu partition |> nouvel instrument à corde (banjo, mandolin, ...), n'oubliez pas de m'envoyer son accordage afin de l'ajouter dans la prochaine version!



Songwrite permet aussi de choisir pour chaque corde si les tiges des notes doivent être dirigé vers le haut ou vers le bas de la tablature. Pour ajouter une corde, il faut sélectionner la bonne partition et cliquer sur le bouton Ajjouter... Pour supprimer une corde, sélectionnez-là et cliquez sur remove. Les boutons haut et bas permettent de changer l'ordre des cordes.

5.5  Raccourcis au clavier

curseur
déplacer la position en cours
tab, shift tab
aller à la note suivante / précédente (sur la même corde)
page suivante, précédente
aller à la mesure suivante / précédente
début, fin
aller au début / à la fin de la chanson
+, -
augmenter ou diminuer la hauteur des notes sélectionnées
/, *
augmenter ou diminuer la durée des notes sélectionnées
.
note pointée
return
note accentuée
suppr
supprime les notes sélectionnées
n
normal (pas d'effet special)
s
slide
h
hammer, pull ou legato
b
bend
t
tremolo
d
dead note
espace
joue depuis la position en cours

6  Portée

SongWrite permet aussi l'insertion de portée. Le support des portée est cependant assez limité; il satisfera un guitariste mais sans doute pas un pianiste! Le menu partition |> nouvelle portée |> ... permet d'ajouter une nouvelle portée. La boîte de dialogue des propriétés de la partition permet de choisir la tonalité.



Pour insérer des notes, cliquez avec le bouton droit de la souris à l'endroit voulu, ou appuyer sur les touches ``+'' ou ``-''. Ces deux touches permettent aussi de monter ou de descendre les notes sélectionnées d'un demi-ton. Pour ajouter des lignes au-dessus ou en-dessous de la portée, placez une note à la limite supérieure ou inférieure, et appuyez sur ``+'' ou ``-''.

7  Batterie

Le menu partition |> nouvelle batterie |> ... permet d'ajouter de nouveau instrument à percussion. Si quelqu'un connaît les patches qui sont dispos sur une batterie ``normale'', je suis preneur!

Les partitions de percu n'utilise pas les notations officiel (que je ne connaît pas), mais plutôt un système proche des tablatures. Songwrite trace une ligne pour chaque patch; le nom du patch midi est indiqué à gauche. Un clic droit (ou ``+'') sur une ligne y ajoute un coup, visualisé par un ``X''. Un nouveau clic droit (ou ``-'') permet de l'enlever.



7.1  ``Accorder'' sa batterie

Comme les tablatures, les partitions de batterie peuvent être ``accordées'' afin de modifier les patch proposés.
Bogue
Utiliser plusieurs fois le même patch dans la même partition peut donner des résultats bizarres...

8  Paroles

8.1  Mélodie

Tout d'abord, entrez la mélodie de la chanson, à l'aide d'une portée ou, pourquoi pas, d'une tablature (pour ceux qui comme moi ne savent pas lire une portée ;-).

8.2  Paroles

Les paroles sont ajoutées grâce au menu partition |> nouvelles paroles. Elles doivent être placé juste en-dessous la mélodie (sans aucune autre partition entre la mélodie et les paroles). Typiquement, on utilise un groupe de parole différent pour chaque couplet et refrain.

Ensuite, cliquez sur le rectangle des paroles et entrez le texte. SongWrite aligne automatiquement les syllabes sur la mélodie, et les repositionne correctement si la mélodie est modifiée par la suite. Les touches suivantes ont une fonction spéciale:
espace, tab
passer à la syllabe suivante
-
passer à la syllabe suivante, en coupant le mot
_
passer à la syllabe suivante, en poursuivant la syllabe précédente sur la note en cours
deux antislash
fin d'un vers (retour à la ligne à l'impression)
entré
nouvelle phrase sur la même mélodie. Si plusieurs phrase doivent être chantée sur la même mélodie, ne recopiez pas celle-ci inutilement!
L'exemple suivant récapitule assez bien tout ça, et présente deux couplet d'une célèbre chanson hacker (que vous trouverez dans le répertoire démo de SongWrite).



Enfin, l'impression finale étant réalisée par Lilypond et LATEX, il est possible d'utiliser des codes LATEX dans les paroles!

8.3  Conversion

A partir de la version 0.8, SongWrite dispose d'un nouveau système de paroles, qui permet d'entrer les paroles pour chaque note de la mélodie. Le système précédent associait la parole aux mesures. Un lien (en bleu) est proposé pour convertir les anciennes paroles au nouveau format; cependant la conversion n'est pas entièrement automatique :-( Il vous faudra en particulier couper les mots à la main (avec ``-'').

9  Selection et copier/coller

Songwrite dispose d'un système de copier coller assez avancé. Pour sélectionner plusieurs notes, il suffit de tracer un rectangle autour à la souris en maintenant le bouton gauche enfoncé; les selections hétérogènes sont possibles. Ensuite il est possible de cliquer sur l'une des notes sélectionnées pour déplacer l'ensemble de la sélection. Un clic droit lors du déplacement permet de l'interrompre.

Songwrite utilise un copier-coller ``à la Linux'': sélectionner c'est aussi copier, et un clic avec le bouton du milieu de la souris permet de coller. Il est possible d'ajuster la position exacte du collage en maintenant le bouton du milieu enfoncé et en déplaçant la souris.

Songwrite utilise la durée des notes pour les aligner horizontalement.

10  Impression

L'impression est encore experimental, bien qu'elle puisse déjà produire des résultats assez impressionnant! Les tablatures sont imprimées par Lilypond, grâce au patch tablature que j'ai développé, et les paroles sont sous la responsabilité de LATEX. Il n'est cependant pas nécessaire de maîtriser ces deux logiciels pour imprimer dans Songwrite!

10.1  Configuration

Lilypond et LATEX sont nécessaires pour l'impression. Une version très récente de Lilypond est requise, puisque le patch tablature est récent lui aussi. En fait le mieux est pour l'instant une version CVS! Lilypond est dispo à cette adresse: . Mais à cause de l'évolution du CVS, le résultat n'est pas garanti :-(

A la fin de l'installation de Lilypond, il ne faudra pas oublier de placer les scripts d'initialisation des polices TeX comme demandé. Voir la fin de la sortie du ``make install'' de Lilypond, reproduite ci-dessous:
*** Before running, buildscripts/out/lilypond-{profile,login}

*** must be run. You're advised to source these scripts from your

*** login scripts. For more information, see Invoking LilyPond in the manual.

10.2  Imprimer!

Pour l'instant, l'impression ne supporte pas:

11  Les entrailles de Songwrite

11.1  Intro à la prog dynamique

Songwrite est écrit en Python, et utilise au maximum les (nombreuses) capacités dynamiques du langage, ainsi que certaines techniques issues de la programmation par aspect1. Oui, c'est bourré de hacks, mais à quoi sert un langage dynamic sinon? Ici, j'essaieraie d'expliquer pourquoi cette façon de codé est celle que je préfère2. Et puis c'est beau :-P

Je pense que la politique, et la vision que l'on a de la société ``idéale'', influence notre manière de programmer. Après tout, un programme orienté objet n'est rien d'autre qu'une société d'objet. Etant hacker et un peu anarchiste, il est normal que mon code est cette allure.

Beaucoup (trop) de gens ont (ou essaient d'avoir) une vision globale de ce qu'il programme. Erreur! Car plus le projet sur lequel on travaille est gros, plus cette vision est complexe! D'où la nécessité de se perdre dans des méthodes tordues et peu utiles, comme UML... Ma méthode à moi est simple: il suffit de désigner une société d'objets, chacun ayant un rôle et l'accomplissant de manière indépendante. Chaque objet a sa propre vie. Quand tous les objets sont là, le boulot est fait. Pas besoin de comprendre comment fonctionne l'ensemble, du moment que chaque objet fait bien son job!

Et si le projet est plus gros, et bien, il suffit d'y mettre plus d'objets!

11.2  Représentation

SongWrite sépare les données d'un côté (les notes, ...) et leur vue/représentation de l'autre (tablature, batterie, paroles,...).

Le module Python song.py définie les classes pour les données: Song, Partition et Note. Il est indépendant du reste de Songwrite et peut être ré-utilisé dans d'autres programmes (sous GPL) pour générer des fichiers Midi.

L'objet song a une liste de partitions appelée partitions. Cette liste contient des partitions, des lyrics,...des instances de sous-classes de TemporalData (Partition, Lyrics,...). Un TemporalData se compose d'une liste de sous-éléments, appelé notes.

Les effets speciaux sont des sous-classes de Note. La classe LinkedNote est la classe des notes liées (en tant que source et/ou destination), et HammerNote et SlideNote sont de sous-classes de LinkedNote.

La batterie est traitée exactement comme une partition normale, sauf qu'elle utilise l'instrument ``batterie'' n°128 (valeur non utilisée par le format Midi).

11.3  Vues

La classe View est définie dans le module view.py. Importer ce module modifie la classe TemporalData et lui ajouteune propriété view, qui correspond à la vue associée à la partition.

Le module view.py définie aussi les classes View et GraphicNote, qui servent de classes de base pour les différentes vues et les éléments quelles affichent (1 GraphicNote pour chaque Note). Les GraphicNote créent des élément de canvas Tkinter afin de représenter la note correspondante.

12  Comment t'aider à réaliser ce magnifique logiciel qu'est SongWrite?


1
Voir par exemple comment le module view ajoute une classe mère supplémentaire à la classe song.TemporalData, ou le module editobj.eventobj (dans EditObj).
2
On pourrait en faire un bouquin... qui changerait des méthodes UML et compagnie!

This document was translated from LATEX by HEVEA.