%2) On dessine les points %------------------------------------------------------ % ici on défini les points qu'on fait sur le piano #(define (make-dot-list l1) (reduce ly:stencil-add empty-stencil (map (lambda (dl) (make-dot (ly:pitch-notename dl))) l1))) % ici on défini i on fait des ronds noirs ou blancs #(define (make-dot 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)) (cadr (key-to-color key)) (caddr (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))))) % 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 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)) )) #(define (engrave-back) (map (lambda (p) (ly:stencil-in-color (ly:stencil-translate (make-circle-stencil 0.4 0 #f) p) 0 0 0)) '((0 . 0) (0 . 1) (0 . 2) (0 . 3) (1 . 0) (1 . 1) (1 . 2) (1 . 3))) ) % pour les ronds noirs #(define-markup-command (complete layout props the-chord) (ly:music?) (ly:stencil-scale (reduce ly:stencil-add empty-stencil (cons (make-dot-list (map (lambda (m) (ly:music-property m 'pitch)) (extract-named-music the-chord 'NoteEvent))) (engrave-back))) 1 1)) diag= #(define-music-function (parser location music) (ly:music?) (music-map (lambda (m) (if (music-is-of-type? m 'event-chord) #{ <>^\markup \complete #m $m #} m)) music)) 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 c8 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 \with { \consists "Text_engraver" } \diag \chordNames \new Staff { \melody } >> \layout {} \midi { } }