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

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

Re: BarNumber et mesure à_cheval_sur_2_l ignes


From: Éditions IN NOMINE
Subject: Re: BarNumber et mesure à_cheval_sur_2_l ignes
Date: Fri, 17 Sep 2010 17:03:45 +0200
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.8) Gecko/20100802 Lightning/1.0b2 Thunderbird/3.1.2

Pas de mérite, vraiment : la doc est assez explicite et "ils" expliquent bien comment partir de 0 sans pour autant réinventer le code.
Dois-je en déduire que tu ne pourras pas m'aider ? :'(

A bientôt !
JMarc

On 17/09/2010 16:13, j-f.lucarelli wrote:
======= 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]