|
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 ! |
[Prev in Thread] | Current Thread | [Next in Thread] |