[ << Modifica dell’output ] | [Top][Contents][Index] | [ Modelli >> ] |
[ < Altre fonti di informazione ] | [ Up : Altre modifiche ] | [ Modelli > ] |
5.7.5 Modifiche avanzate con Scheme
Anche se molte cose sono possibili con i comandi \override
e
\tweak
, un modo ancor più potente di modificare l’azione
di LilyPond è resa possibile da un interfaccia programmabile al
funzionamento interno di LilyPond. Il codice scritto nel linguaggio
di programmazione Scheme può essere incorporato direttamente nel
funzionamento interno di LilyPond. Ovviamente, per farlo è necessaria
almeno una conoscenza di base della programmazione in Scheme;
abbiamo scritto un’introduzione in Scheme tutorial.
Come esempio di una delle tante possibilità, invece di impostare una proprietà su un valore costante, si può impostare su una procedura Scheme che viene poi chiamata ogni volta che LilyPond accede a quella proprietà. La proprietà può essere poi impostata dinamicamente su un valore determinato dalla procedura nel momento in cui viene chiamata. In questo esempio coloriamo le teste delle note in base alla loro posizione sul rigo.
#(define (color-notehead grob) "Colora le teste di nota in base alla loro posizione sul rigo." (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7))) (case mod-position ;; Return rainbow colors ((1) (x11-color 'red )) ; for C ((2) (x11-color 'orange )) ; for D ((3) (x11-color 'yellow )) ; for E ((4) (x11-color 'green )) ; for F ((5) (x11-color 'blue )) ; for G ((6) (x11-color 'purple )) ; for A ((0) (x11-color 'violet )) ; for B ))) \relative { % Fa sì che il colore sia preso dalla procedura color-notehead \override NoteHead.color = #color-notehead a2 b | c2 d | e2 f | g2 a | }
Altri esempi che mostrano l’uso di queste interfacce programmabili si trovano in Callback functions.
[ << Modifica dell’output ] | [Top][Contents][Index] | [ Modelli >> ] |
[ < Altre fonti di informazione ] | [ Up : Altre modifiche ] | [ Modelli > ] |