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 lignes


From: Éditions IN NOMINE
Subject: Re: BarNumber et mesure à cheval sur 2 lignes
Date: Fri, 17 Sep 2010 15:23:39 +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

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 !
JMarc

On 15/09/2010 17:27, Éditions IN NOMINE wrote:
Bonjour à toute la liste !

Je me cogne à un petit pb qui a l'air bête comme chou : j'ai une ligne qui se termine par 2 temps + \bar":|:" puis retour à la ligne pour la seconde partie qui commence donc par une demi mesure.

L'usage répandu et assez élégant, quand on numérote en début de ligne, c'est que le chiffre en tête de cette seconde ligne soit le n° de la première mesure complète de la dite ligne (j'espère que ce n'est pas confus !). Or je n'arrive pas à atteindre ce résultat.

Un petit bout de code :

\version "2.13"
{\clef bass \time 2/2
c4 c c d e2 d c4 e d d c2 \bar ":|" \break
r4 c d4 d d d a,2 a, d4 c b, a, g,1 \break
c4 c c d e2 d c4 e d d c1 \bar "|."
}


Il devrait y avoir un chiffre 5 en début de seconde ligne, en fait...
Une solution sioux dans \layout serait impeccable, parce que je n'ai pas vraiment envie de toucher aux fichiers de notes (il s'agit d'extractions de parties séparées).

Merci d'avance !
JMarc

_______________________________________________ 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]