music
Certains exercices de GNU Solfege utilisent des fichiers de données qui contiennent des questions. Ces fichiers de données sont appelés 'fichiers leçons'. Les exercices des fichiers leçons peuvent être aisément augmentés si les questions fournies avec le programme ne satisfont pas vos besoins. La liste suivante indique les exercices qui utilisent les fichiers leçons, et vous indique également le nom que vous devez utiliser pour vous y référer lorsque vous écrivez des fichiers leçons: chanter la réponse (singanswer), accords (chord), accords complexes (chord-voicing), reconnaître (id-by-name), dictée de notes (dictation), chanter un accord (sing-chord) et dictée d'accords (harmonic-progression-dictation).
Si vous voulez écrire des fichiers leçons, mon conseil est d'étudier les fichiers exemples dans example-lesson-files/
ainsi que les fichiers de lesson-files/
. Utilisez ce document et la spécification du format musical
comme références. Vous pouvez sauvegarder vos fichiers leçons privés dans
$HOME/lessonfiles/
. Si vous les sauvegardez dans lesson-files/
ils peuvent être détruits accidentellement quand vous installerez une version plus récente du programme. Pour vous entraîner avec vos fichiers, il vous faut les sélectionner dans la fenêtre de dialogue "Sélectionner un fichier de leçons" dans la collection de leçons "utilisateur". Si vous trouvez difficile d'écrire un fichier leçon en utiklisant cette documentation, vous pouvez décharger votre frustration sur la liste de diffusion solfege-devel@lists.sf.net ou sur le wiki à
www.solfege.org/wiki.
Depuis la version 2.0, Solfege s'attend par défaut à ce que le contenu d'un fichier leçon soit encodé en UTF-8. gedit est un petit éditeur sympa qui vous permet d'éditer des fichiers unicodes.
Si vous n'aimez pas unicode, vous pouvez indiquer à Solfege que le fichier est encodé différemment en insérant une ligne de commentaire spéciale à la première ligne du fichier. L'exemple suivant définit le jeu de caractères ISO 8859-1, un jeu de caractères couramment utilisé dans beaucoup de langues ouest européennes:
# -*- coding: iso-8859-1 -*-
Les russes pourront souhaiter utiliser koi8-r:
# -*- coding: koi8-r -*-
Le programme utilise les librairies python pour convertir en unicode, donc il devrait comprendre pratiquement tous les encodages auxquels vous pouvez penser. Si vous voyez que certains caractères manquent, par exemple lorsque les noms de questions sont affichés sur des boutons, c'est probablement que vous avez fait quelque chose d'incorrect dans l'encodage.
Un fichier leçon consiste en un bloc d'entête (header) suivi d'un ou plusieurs blocs de questions:
header { ASSIGNMENT ASSIGNMENT ... } question { ASSIGNMENT ... }
Le bloc d'entête peut être placé n'importe où dans le fichier, mais par convention il devrait être le premier bloc du fichier. Si plus d'un bloc d'entête est trouvé, par exemple lorsque la fonction include
est utilisée, seul le premier bloc d'entête sera pris en compte, les autres étant ignorés.
Définitions à insérer dans le bloc d'entête:
version = STRING
version = "1.1.1"
Cette variable n'est pas obligatoire, mais doit être utilisée parce qu'elle pourra aider (mais pas garantir) à éviter des problèmes si le format des fichiers leçons est modifié dans l'avenir.
title = STRING
description = STRING
content = LIST
content = chord, id-by-name
random_transpose = [key|semitones|accidentals], INTEGER, INTEGER | no | yes
random_transpose = no
random_transpose = yes
random_transpose = accidentals, INTEGER, INTEGER
key
comme ceci :
question { name = "le nom" key = "d \major" music = music("\key d \major d' e fis") }
INTEGER, INTEGER
. Pour comprendre comment ça marche, imaginez que les bémols sont des nombres négatifs et les dièses des nombres positifs. Le code :
random_transpose = accidentals, -2, 3
random_transpose = accidentals, 2, 3
random_transpose = key, INTEGER1?, INTEGER2?
INTEGER1?
crans plus bas ou INTEGER2?
crans plus haut modulo cinq. (Et de ma propre définition, plus haut égale plus de dièses et plus bas plus de bémols... :-) ) C'est la vraie transposition où à la fois la tonalité et les notes sont transposées.
random_transpose = semitones, INTEGER1?, INTEGER2?
INTEGER1?
crans plus bas ou INTEGER2?
crans plus haut. C'est la vraie transposition où à la fois la tonalité et les notes sont transposées. Vous obtiendrez vite de la musique dans des tonalités avec BEAUCOUP d'altérations. Le code
random_transpose = semitones, -2, 6
random_transpose = INTEGER, INTEGER
.
labelformat = normal | progression
normal
. Définissez la à progression
pour les fichiers leçons où le nom des quetions est une progression harmonique, écrite dans un format non documenté, mais pas difficile. Regardez un fichier leçon existant pour voir comment ça marche. Cette variable est ignorée dans tous les exercices sauf "reconnaître"
questions_selectable = yes | no
have_repeat_slowly_button = yes | no
yes
si vous voulez que l'exercice ait un bouton "Répéter lentement". Fonctionne pour reconnaître et est ignoré par les autres exercices.
have_repeat_arpeggio = yes | no
yes
si vous voulez que l'exercice ait un bouton "Répéter l'arpège". Fonctionne pour chanter la réponse et est ignoré par les autres exercices.
have_music_displayer = yes | no
yes
si vous voulez que la question puisse afficher la musique. Le programme affiche la réponse lorsque l'utilisateur abandonne ou donne la bonne réponse. Fonctionne pour reconnaître et est ignoré par les autres exercices.
enable_right_click = yes | no
yes
. Définir à no
dans les fichiers leçons pour lesquels le click droit sur les boutons n'a pas de sens. Cette variable est reconnue par les exercices reconnaître, chanter l'accord and accords.
filldir = horiz | vertic
horiz
. Fonctionne pour reconnaître et est ignorée par les autres exercices.
fillnum = INTEGER
1
. Fonctionne pour reconnaître et est ignoré par les autres exercices.
name = "un nom court"
music = music(MUSICSTRING, MUSICFORMAT)"
music
. Notez qu'il y a un raccourci. Au lieu de :
question { name = "Lisa gikk til skolen" music = music(...)" }
question { name = "Lisa gikk til skolen" music(...) }
tempo = INTEGER / INTEGER
instrument = STRING, INTEGER
instrument = STRING, INTEGER, STRING, INTEGER, STRING, INTEGER
instrument = "cello", 100
instrument = "bass", 100, "acoustic grand", 100, "clarinet", 100
chord
(accords), deux variables supplémentaires peuvent être utilisées:
inversion
toptone
Par défaut, l'exercice dictée montre la première cononne de musique, et l'utilisateur doit écrire le reste. Mais si la première colonne n'est pas suffisante, par exemple si il y a seulement des silences sur le premier temps, ces deux variables peuvent indiquer au programme combien de musique il doit afficher :
clue_end = nn/dd
clue_end=1/4
affiche toute la musique de la première noire (blanche=2, croche=8).
clue_music = MUSIC
(Utilisez seulement l'une de ces variables dans une même question. Utiliser nes deux n'est pas défini.)
Les questions pour cet exercice doivent comporter la variable key
si la tonalité est différente de do major (or la minor). Par exemple :
question { "c''|e'|g|c" } question { "a'|e'|c'|a" } question { key="d \major" "a'|fis'|d'|d"} question { key="f \minor" "as'|f'|c'|f"}
music
Synopsis: music(MUSICCODE, MUSICTYPE=normal)
.
La valeur par défaut pour MUSICTYPE
est normal
, donc il n'est nécessaire de la spécifier que pour les autres types de musique.
Types de musique disponibles :
normal
\staff
. Par exemple:
variable = music("\staff\relative c' { c' d' }")
chord
(accord)variable = music("c' e' g'", chord)
chord
est définie. Appeler
chord("c e g") est la même chose que
music("c e g", chord)
satb
variable = music("c''|e'|g|c")
c''
sera chantée par la soprano, e'
par l'alto, etc. La fonction raccourci satb
est définie.
voice
variable = music("c'4 c' g' g' | a' a' g'2", voice)
variable = music("\staff{ c'4 c' g' g' | a' a' g'2", normal)
voice
est définie.
rvoice
rvoice
est similaire à voice
sauf que la musique est en mode \relative
, par rapport à la première note. La musique :
variable = music("c'4 c g' g | a a g2", rvoice)
\staff\relative c'{ c4 c g' g' | a a g2 }
du dessus. La fonction raccourci
rvoice@@ est définie.
wavfile
.wav
. Le chemin du fichier est relatif au répertoire où sont stockés les fichiers leçons. Par exemple:
variable = music("share/fifth-small-220.00.wav", wavfile)
wavfile
est définie.
cmdline
cmdline("./bin/csound-play-harmonic-interval.sh 220.000000 320.100000")
cmdline
est définie.
Les variables globales peuvent vous éviter un peu de frappe.
s = "\score\relative c'{ %s } question { # au lieu de music = music("\score\relative c'{ c d e f g2 g2 }") : music = music(s % "c d e f g2 g") }
Egalement, les deux variables tempo
et
instrument
peuvent être utiles pour définir au début les valeurs par défaut pour tout le fichier. Vour pourrez toujours les modifier pour une question particulière en mettant une autre définition dans le bloc de question.
Tout ce qui est sur une ligne après # est ignoré
Avis: Je ne connais aucune des façons standard de définir la grammaire, comme BNF. Donc c'est juste un essai de description du format de fichier pour que les gens puissent commencer à écrire des fichiers leçons.
Les fichiers leçons consistent en définitions de variables et en blocs contenant des définitions de variables.
_
description = _("This is a short description")
include
include("singchord-1")
string
"
, comme ceci: "c'est une chaîne"
. Utilisez des triples guillemetspour les chaînes qui contiennent des retours à la ligne:
description = """<h1>Description longue <h1> Ce fichier leçon nécessite beaucoup de description. bla bla bla"""
"
, vous devez également utiliser des triples guillemets :
description = """Essayez <a href="solfege:practise/melodic-interval"> ceci </a> pour un exercice d'intervalle plus simple."""]]>
NB: Toutes les chaînes doivent être au format unicode. Si vous obtenez des messages d'erreur comme celui ci :
In line 21 of input: does not recognise this string '<' as a valid token.' (line 20): question { (line 21): question { (line 22): name = _("Ionia�)]]>
alors vérifiez l'encodage de votre fichier. Voir la section sur l'encodage des fichiers. Vous pouvez changer l'encodage d'un fichier en utilisant le programme <command>iconv</command> :
iconv -f YOUR_ENCODING -t utf8 votre.fichier
integer
tempotype (manquant d'un meilleur nom)
bpm/beatlen
. Par exemple :
tempo = 120/4
indique un tempo de 120 pulsations par minute, chaque pulsation étant une noire.
Les opérateurs peuvent seulement être utilisés sur les chaînes de caractères
+
%
%s
. Par exemple:
\staff\relative c'{%s}" % "c d e"
donne
\staff\relative c'{c d e}"
FIXME see if we should add the outdated last paragraphis