lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Re: BarNumber et mesure à_cheval_su r_2_lignes


From: j-f.lucarelli
Subject: Re: Re: BarNumber et mesure à_cheval_su r_2_lignes
Date: Fri, 17 Sep 2010 16:13:06 +0200

======= 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
>

= = = = = = = = = ========= = = = = = = = = = =

reply via email to

[Prev in Thread] Current Thread [Next in Thread]