Appliquer un script Markup à tous les éléments d'une liste chordmode

Bonjour,

J'ai codé un script qui rajoute des markup. Cette fonction \diag me permet
d'afficher un diagramme person (ici main gauche d'un accordéon) et je
voudrais l'appliquer à tous les éléments d'un chordmode{}.
Le script ci dessous marche très bien pour un chordmode avec 1 élément mais
dès que l'on en rajoute d'autre, lilypond ne recrée pas de nouveau
diagrammes et les diagrammes se superposent...

Voici mon code, inspiré du snippet : http://lsr.di.unimi.it/LSR/Item?id=1042

%------------------------------------------------------

% ici on défini les points qu'on fait sur le piano
#(define (make-dot-list l1)
   (if (null? l1)
       empty-stencil
       (ly:stencil-add
          (make-dot (ly:pitch-semitones (car l1)))
          (make-dot-list (cdr l1)))))

% ici on défini i on fait des ronds noirs ou blancs
#(define (make-dot key)
    (let ((test (cons (key-to-pos key) ( key-to-pos key) )))
     (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.25
0.1 #f) ( key-to-pos key )) (car( key-to-color key ) )(car( key-to-color
key ) )(car( key-to-color key ) ) ) )) % pour les ronds noirs

% ici on défini les couleurs R V B associés à chaque notes
#(define (key-to-color key )
  (let ((keycolor (caddr(assq key Color-KEY-LIST))))
   (if (not keycolor)
    (ly:error (_ "Color diagram error - unkown note '~a'") key)
    ( caddr (assq key Color-KEY-LIST) ))))

#(define KEY-POS-LIST '(
   (-8 . '( 0 . 0))
   (-7 . '( 0 . 1))
   (-6 . '( 0 . 2))
   (-5 . '( 0 . 3))
   (-4 . '( 1 . 0))
   (-3 . '( 1 . 1))
   (-2 . '( 1 . 2))
   (-1 . '( 1 . 3))
   (0 . '( 0 . 0))
   (1 . '( 0 . 1))
   (2 . '( 0 . 2))
   (3 . '( 0 . 3))
   (4 . '( 1 . 0))
   (5 . '( 1 . 1))
   (6 . '( 1 . 2))
   (7 . '( 1 . 3))
   (8 . '( 0.71 . 1))
   (9 . '( 0.71 . 1))
   (10 . '( 0.71 . 1))
   (11 . '( 0.71 . 1))
   (12 . '( 0.71 . 1))
   (13 . '( 0.71 . 1))
   (14 . '( 0.71 . 1))
   (15 . '( 0.71 . 1))
   (16 . '( 0.71 . 1))
   (17 . '( 0.71 . 1))
   (18 . '( 0.71 . 1))
   (19 . '( 0.71 . 1))
   (20 . '( 0.71 . 1))
   (21 . '( 0.71 . 1))
   (22 . '( 0.71 . 1))
   (23 . '( 0.71 . 1))
   ))

#(define Color-KEY-LIST '(
   (-11 . '( 0.71 1 1))
   (-10 . '( 0.71 1 1))
   (-9 . '( 0.71 1 1))
   (-8 . '( 0.71 1 1))
   (-7 . '( 0.71 1 1))
   (-6 . '( 0.71 0.2 1))
   (-5 . '( 0.71 0.2 1))
   (-4 . '( 0.71 0.2 1))
   (-3 . '( 0.71 0.2 1))
   (-2 . '( 0.71 0.2 1))
   (-1 . '( 0.71 0.2 1))
   (0 . '( 0.71 1 1))
   (1 . '( 0.71 1 1))
   (2 . '( 0.71 1 1))
   (3 . '( 0.71 1 1))
   (4 . '( 0.71 1 1))
   (5 . '( 0.71 0.2 1))
   (6 . '( 0.71 0.2 1))
   (7 . '( 0.71 0.2 1))
   (8 . '( 0.71 0.2 1))
   (9 . '( 0.71 0.2 1))
   (10 . '( 0.71 0.2 1))
   (11 . '( 0.71 0.2 1))
   (12 . '( 0.71 0.2 1))
   (13 . '( 0.71 0.2 1))
   (14 . '( 0.71 0.2 1))
   (15 . '( 0.71 0.2 1))
   (16 . '( 0.71 0.2 1))
   (17 . '( 0.71 0.2 1))
   (18 . '( 0.71 0.2 1))
   (19 . '( 0.71 0.2 1))
   (20 . '( 0.71 0.2 1))
   (21 . '( 0.71 0.2 1))
   (22 . '( 0.71 0.2 1))
   (23 . '( 0.71 0.2 1))
   ))

% ici on défini les positions des points du clavier en y
#(define (key-to-pos key )
  (let ((keypos (assq key KEY-POS-LIST)))
   (if (not keypos)
    (ly:error (_ "keyboard diagram error - unkown note '~a'") key)
    (caddr (assq key KEY-POS-LIST) ))))

#(define-markup-command (complete layout props the-chord)
  (ly:music?)
  (ly:stencil-scale
   (ly:stencil-add
    (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0 #f)
(cons 0 0)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 0 1)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 0 2)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 0 3)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 1 0)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 1 1)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 1 2)) 0 0 0 )
      (ly:stencil-in-color(ly:stencil-translate (make-circle-stencil 0.4 0
#f) (cons 1 3)) 0 0 0 )
    (make-dot-list
      (map
        (lambda (m) (ly:music-property m 'pitch))
        (extract-named-music the-chord 'NoteEvent))))
    1 1))

diag=
#(define-music-function (parser location the-chord)
  (ly:music?)
  #{ <>^\markup \complete #the-chord $the-chord #})

global = {
  \time 4/4
  \key a \minor
  \tempo 4=80
}

% ici on écrit la parto
melody = \relative c'' {
  \global

  \bar ".|:"a8 a16 b a g e g a8 g16 a c b a g d'8 d c16 b a g c d b8. b16 c
b |
    a8 a16 b a g e g a8 g16 a c b a g d'8 d c16 b a g c d b8. b16 c d
\break|
    e8 e d16 c b a d8 c16 d e c a b c8 b16 a d8 c16 b a b c d b8 c16 d|
    e8 e d16 c b a d8 c16 d e c a b | c8 b16 a d c d e b8 a16 g a r8 r16|
    \bar ":|."
}

chordNames = \chordmode {
  \global

  a8:m5^5.3 a4:m5 g8:5 a8:m5 a:m5 a:m5 a:m5 d:m5 d4:m7 d8:m7 f:5 g4:5 e8:m/b
  a8:m5 a4:m5 g8:5 a8:m5 a:m5 a:m5 a:m5 d:m5 d4:m7 d8:m7 f:5 g4:5 g8:5
  a8:m5 a4:m5 a8:m5 g8:5 a4:m5 a8:m5 f:5 f:5 d4:m7 f:5 g8:5 g8:5
  c4:5 c4:5 d8:m7 d4:m7 d8:m7 f4:5 g4:5 f8:5 g8:5 a,4:m }

\score {
  <<
    \new ChordNames { \diag{\chordNames} }
    \new Staff { \melody }
  >>
  \layout {}
  \midi { }
}

Voila, si vous saviez comment je peux exécuter un occurrence de la fonction
\diag pour chaque élément de ma liste chordmode, ça serait excellent !

Au final, j'aimerais avoir un diagramme au dessous de chaque nom d'accord.

merci pour votre aide !

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Appliquer-un-script-Markup-a-tous-les-elements-d-une-liste-chordmode-tp7584525.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

Bonjour,

Quelqu’un aurait une idée ?

Cordialement,
Ewen

···

--
View this message in context: http://lilypond-french-users.1298960.n2.nabble.com/Appliquer-un-script-Markup-a-tous-les-elements-d-une-liste-chordmode-tp7584525p7584598.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.