Subject: guidons pour le plaisir

From: Loïc Chahine <[email-masked]>
Date: Sun, 12 May 2013 23:40:30 +0200

Bonsoir à tous,
Je suis en train de graver une partition assez chargée, et à un endroit 
il y a des guidons (custodes) en même temps que des notes. J’ai pas 
encore élucidé ce que ça voulait dire (ça va venir quand j’aurai vu les 
autres parties, car c’est en parties séparées). Mais j’aimerais les 
mettre. Il doit y avoir un moyen ?
Exemple en pièce jointe.
Merci d’avance !
L.C.

---

From: "[email-masked]" <[email-masked]>
Date: Mon, 13 May 2013 11:57:13 +0300

On 13 mai 2013, at 00:40, Loïc Chahine <[email-masked]> wrote:

> Bonsoir à tous,
> Je suis en train de graver une partition assez chargée, et à un endroit il y a des guidons (custodes) en même temps que des notes. J’ai pas encore élucidé ce que ça voulait dire (ça va venir quand j’aurai vu les autres parties, car c’est en parties séparées). Mais j’aimerais les mettre. Il doit y avoir un moyen ?
> Exemple en pièce jointe.
> Merci d’avance !
> L.C.

C'est un peu compliqué. Admettons que le guidon est un Script, il faudrait que son objet side-support-elements ne contienne pas de hampe. Ceci est possible si tu crées un graveur (\Remove_stem_engraver, par exemple) qui supprime les hampes de la liste side-support-elements dans la méthode `finalize'.

Un peu de pseudocode...

#(define (do-filtering grob-array)
  "Fonction qui enlève les hampes de cette liste")

#(define (is-guidon grob)
  "Fonction qui détermine si un script est un guidon")

#(define (Remove_stem_engraver ctx)
  (let ((scripts '()))
    (make-engraver
     (acknowledgers
      ((script-interface trans grob source)
       ;; whenever a Script is acknowledged,
       ;; add it to `scripts' list
       (set! scripts (cons grob scripts))))
     ((finalize trans)
      ;; if any Script grobs exist,
      ;; remove stem as side support
      (for-each (lambda (script)
		  (if (is-guidon script) (ly:grob-set-object! script 'side-support-elements (do-filtering (ly:get-object script 'side-support-elements)))))
		scripts)
      ;; clear scripts ready for next timestep
      (set! scripts '())))))

Pour voir comment créer un Scheme engraver, il y a :

http://lilypond.org/doc/v2.16/Documentation/snippets/contexts-and-engravers

Bien cordialement,
~Mike

---

From: Loïc Chahine <[email-masked]>
Date: Mon, 13 May 2013 20:28:33 +0200

Merci pour ta réponse, Mike !
Effectivement, ça m’a l’air plutôt compliqué. Je pense que ça ne doit 
pas être très important, dans la partition, ça doit donner des 
indications sur ce que jouent les autres, un truc du genre… Si vraiment 
je n’arrive pas à élucider le mystère, je chercherai à les reproduire. 
Si je trouve, j’essaierai de noter ça plus classiquement.
Bien cordialement,
L.C.

Le 13/05/13 10:57, [email-masked] a écrit :
> On 13 mai 2013, at 00:40, Loïc Chahine <[email-masked] 
> <mailto:[email-masked]>> wrote:
>
>> Bonsoir à tous,
>> Je suis en train de graver une partition assez chargée, et à un 
>> endroit il y a des guidons (custodes) en même temps que des notes. 
>> J’ai pas encore élucidé ce que ça voulait dire (ça va venir quand 
>> j’aurai vu les autres parties, car c’est en parties séparées). Mais 
>> j’aimerais les mettre. Il doit y avoir un moyen ?
>> Exemple en pièce jointe.
>> Merci d’avance !
>> L.C.
>
> C'est un peu compliqué. Admettons que le guidon est un Script, il 
> faudrait que son objet side-support-elements ne contienne pas de 
> hampe. Ceci est possible si tu crées un graveur 
> (\Remove_stem_engraver, par exemple) qui supprime les hampes de la 
> liste side-support-elements dans la méthode `finalize'.
>
> Un peu de pseudocode...
>
> (if (is-guidon script) (ly:grob-set-object! script 
> 'side-support-elements (do-filtering (ly:get-object script 
> 'side-support-elements)))))
> scripts)

---

From: Nicolas Sceaux <[email-masked]>
Date: Mon, 13 May 2013 20:29:36 +0200

> Je suis en train de graver une partition assez chargée, et à un endroit il y a des guidons (custodes) en même temps que des notes. J’ai pas encore élucidé ce que ça voulait dire (ça va venir quand…

Salut,

J'utilise cette petite fonction pour placer des guidons manuellement.
A voir si c'est utilisable dans ton cas.

custosNote = 
#(define-music-function (parser location note) (ly:music?)
  (make-music 'SequentialMusic
   'elements (list #{ 
              \once \override Voice.NoteHead #'stencil = #ly:text-interface::print
              \once \override Voice.NoteHead #'text =
              #(markup #:null #:raise 0.0 #:musicglyph "custodes.mensural.u0")
              \once \override Voice.Flag #'stencil = ##f
              \once \override Voice.Stem #'stencil = ##f #}
              note)))

(il faudra probablement l'utiliser dans un contexte Voice à part des notes non-guidonnisées)

Nicolas