Bonjour,
Je rencontre un problème lors de la génération de fichiers.
J'ai une même partition que je génère pour plusieurs clefs et plusieurs instruments transpositeurs. Pour le moment, tous les instruments transpositeurs pour qui je travaille lisent en clef de Sol.
J'ai donc, en tête de fichier et pour ne pas me prendre la tête, les 3 lignes suivantes:
#(define defaultHighKey "treble")
#(define defaultLowKey "treble_8")
#(define defaultInstrumentKey "Clef_Sol")
Les 2 premières me donnent la clef que j'utiliserai pour les voix graves (\clef #defaultLowKey) et pour les les voix hautes (\clef #defaultHighKey)
La troisième ligne me donne le nom de la clef qui sera ajouté au nom du fichier dans un bloc \book (\bookOutputSuffix #(string-join (list "Fa" defaultInstrumentKey)))
J'insère une condition scheme pour ne générer les partitions pour instruments transpositeurs uniquement si defaultInstrumentKey == "Clef_Sol"
$(if (equal? defaultInstrumentKey "Clef_Sol")
#{
\book {
\bookOutputSuffix #(string-join (list "Sib" defaultInstrumentKey))
(...)
}
#})
Mon problème est le suivant: si je répète la condition Scheme pour CHAQUE partition (aka chaque fragment \book), alors elles se génèrent sans souci.
Ex:
% 1ère condition Scheme
$(if (equal? defaultInstrumentKey "Clef_Sol")
#{
\book {
\bookOutputSuffix #(string-join (list "Sib" defaultInstrumentKey))
(...)
}
#})
% 2ème condition Scheme
$(if (equal? defaultInstrumentKey "Clef_Sol")
#{
\book {
\bookOutputSuffix #(string-join (list "Fa" defaultInstrumentKey))
(...)
}
#})
Si par contre je mutualise la condition, ça ne marche plus du tout:
% Condition Scheme mutualisée
$(if (equal? defaultInstrumentKey "Clef_Sol")
#{
\book {
\bookOutputSuffix #(string-join (list "Sib" defaultInstrumentKey))
(...)
}
\book { % ---> Note: ceci est la ligne 287 <---
\bookOutputSuffix #(string-join (list "Fa" defaultInstrumentKey))
(...)
}
#})
J'obtiens une erreur à l'instanciation du second \book:
Myfile.ly:287:5: Erreur : syntax error, unexpected \book, expecting end of input
Plus une erreur pour la ligne de la condition:
Myfile.ly:269:2: Erreur : erreur dans #{ ... #}
#(if (equal? defaultInstrumentKey "Clef_Sol")
Pourtant, quand je regarde de la documentation, p.ex. https://scheme-book.readthedocs.io/en/latest/scheme/music-function-primer.html
L'exemple montre qu'on devrait pouvoir mettre autant d'expressions Lily que l'on veut:
myMusicFunction =
#(define-music-function (color)
(color?)
#{
\override NoteHead.color = #color
\override Stem.color = #color
\override Flag.color = #color
#})
{
c'4
\myMusicFunction #red
d'8
}
Je précise que j'ai également essayé de faire débuter la ligne Scheme de condition par "$" ou "#" (je ne sais pas trop quelle est la différence), pour le même résultat.
Est-ce que je rate quelque chose? J'imagine que l'on n'est pas bloqué dans les faits à une seule expression Scheme?
Merci, bon après-midi,
Emmanuel