======= le 17-09-2010, 15:24:44 vous écriviez: =======
Allez, je me lance ! Après lecture et étude approfondie de la doc
Extensions (très bien faite mais un peu courte pour moi)... que dolor ! :-P
Toutes mes excuses par avance pour la longueur de ce post : je souhaite
montrer ce qui se passe dans ma cervelle, alors forcément, ça prend du
temps ! Le but peu visible est de trouver à terme une solution pour le
sujet "BarNumber et mesure à cheval sur 2 lignes".
_Par où commencer... Par ce que je sais faire..._
Prenons ce bout de code :
\version "2.13"
{c4 c c d e2 d \bar "|."}
Si je veux écrire Bravo ! au-dessus du premier c4, *en Scheme*, voici
comment je procède :
\version "2.13"
\displayMusic{
c4^"Bravo !" c c d e2 d \bar "|."
}
puis :
lilypond machin.ly>display.txt
Dans display.txt, je repère le code qui crée le Bravo ! :
(make-music
'*EventChord*
'elements
(*list* (make-music
'NoteEvent
'duration
(ly:make-duration 2 0 1 1)
'pitch
(ly:make-pitch -1 0 0))
(make-music
'TextScriptEvent
'direction
1
'text
"Bravo !")
C'est donc dans une liste de propriétés liées à EventChord. Je fais un
honteux plagiat de la doc (page 13 et suivantes) et je ponds la fonction
du siècle :
bravo = #(define-music-function (parser location event-chord)(*ly:music?*)
;la variable est event-chord de type ly:music
"écrit Bravo ! au dessus de la note"
(let ((result-event-chord (ly:music-deep-copy event-chord)))
;declaration de la variable locale result-event-chord. On lui donne la
valeur de music-deep copy
(set! (ly:music-property result-event-chord 'elements)
(cons (make-music *;ici je copie la partie de display.txt qui
m'intéresse*
'TextScriptEvent
'direction
1
'text
"Bravo !") (ly:music-property result-event-chord 'elements)))
result-event-chord)
)
et on modifie le code de la parto pour utiliser cette fonction :
\version "2.13"
{\bravo c4 c c d e2 d \bar "|."}
Et ça marche.
Le pied.
_Par où finir... Par ce que je ne sais pas faire..._
Maintenant, je souhaite en venir aux numéros de mesure. Même méthode :
Un petit \displayMusic sur le code suivant :
\version "2.13"
\displayMusic{
c4 c c d \break
\set Score.currentBarNumber=#50 e2 d \bar "|." }
}
J'obtiens le code interressant suivant (en partant "du haut") :
(make-music
'SequentialMusic
'elements
(list (make-music
...)
*;la partie concernant le \break, qui est ratachée à un EventChord,
comme plus haut*
(make-music
'EventChord
'elements
(list (make-music
'LineBreakEvent
'break-permission
'force)))
*;la partie concernant le n° de mesure, pas du tout de la même forme que
plus haut ! >:o
* (make-music
'ContextSpeccedMusic
'context-type
'Score
'element
(make-music
'PropertySet
'value
50
'symbol
'currentBarNumber))
Allons-y quand-même !
mesureD = #(define-music-function (parser location score)(ly:music?)
;question : la variable score et son type sont-ils bon ?
"force la numérotation en tête de ligne à 50"
(let ((result-score (ly:music-deep-copy score)))
(set! (ly:music-property result-score 'elements)
(cons (make-music
'PropertySet
'value
50
'symbol
'currentBarNumber) (ly:music-property result-score 'elements)))
result-score)
Le hasard ayant pu de place en cette matière, ça plante complet à
l'utilisation avec les messages suivants :
erreur de programmation : Envoi d'un non-événement au contexte
poursuite ; croisons les doigts.
erreur de programmation : Not a music type
poursuite ; croisons les doigts.
Avertissement : Classe d'événement inconnue : « property-set »
Or j'ai un mal fou à faire évoluer ce bourrin copier/coller...
Quelqu'un(e) saurait m'aider à trouver comment faire un bon
raisonnement, avant que mon enthousiasme quasi-juvénile baisse drapeau ?
Merci d'avance !
Bravo, ce petit tutoriel permet de découvrir bien des choses sur l'interface entre LilyPond et Scheme
Grand merci,
Jean-François
_______________________________________________
liste de diffusion lilypond-user-fr
address@hidden
http://lists.gnu.org/mailman/listinfo/lilypond-user-fr
= = = = = = = = = ========= = = = = = = = = = =