[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Appliquer un script Markup à tous les éléments d'une liste chordmode
From: |
zaord |
Subject: |
Appliquer un script Markup à tous les éléments d'une liste chordmode |
Date: |
Thu, 26 Jan 2017 09:07:32 -0700 (MST) |
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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Appliquer un script Markup à tous les éléments d'une liste chordmode,
zaord <=