Quantcast

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

classic Classique list Liste threaded Arborescence
2 messages Options
Répondre | Arborescence
Ouvrir ce message en vue arborescente
|  
Signaler un Contenu Inapproprié

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

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

Répondre | Arborescence
Ouvrir ce message en vue arborescente
|  
Signaler un Contenu Inapproprié

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

zaord
Bonjour,

Quelqu’un aurait une idée ?

Cordialement,
Ewen
Chargement...