[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: "\repeat unfold" dans define-music-function
From: |
Gilles Thibault |
Subject: |
Re: "\repeat unfold" dans define-music-function |
Date: |
Mon, 16 Oct 2017 23:47:11 +0200 |
User-agent: |
Webmail Free/1.2.3 |
Le 2017-10-10 10:17, Remy CLAVERIE a écrit :
Bonjour à tous,
Je commence à apprendre à programmer mes propres functions musicales.
J'y vais doucement car je ne connais pas Scheme.
Je souhaite écrire une fonction qui me permette d'intérer du texte au
milieu d'une portée. Pour cela, je me suis inspiré du Snippet
http://lsr.di.unimi.it/LSR/Item?id=198 .
Voici mon code :
\version "2.16.2"
InsertTextInOpenStaff =
#(define-music-function
(parser location text lspace rspace XYoff) (markup? number? number?
number-pair?)
#{
\cadenzaOn
\stopStaff
\repeat unfold 1 { s4 \noBreak \bar "" }
\once \override TextScript #'extra-offset = #XYoff
<>^\markup #text
\repeat unfold 5 { s4 \noBreak \bar "" }
\cadenzaOff
\startStaff % Resume bar count and show staff lines again
\once \override Staff . KeySignature #'break-visibility = #all-visible
\once \override Staff . Clef #'break-visibility = #all-visible
#}
)
{
\clef treble
\key g \major
\time 4/4
\relative c'' {
\repeat unfold 9 { c4 c c c }
\InsertTextInOpenStaff \markup { \bold "toto et titi" } #1 #3 #'( 0 .
-1.2 )
\repeat unfold 5 { c4 c c c }{ d d d e } { e e e f } { f f f g }
c,1
\bar"|."
}
}
Bonjour Remy. Personne ne t'as répondu car beaucoup utilise la version
2.19 et la syntaxe pour les fonctions a changé.
En l'adaptant en version 2.19, tout semble bien marcher ici, on n'a pas
le message d'erreur
%%%%%%%%%%%%%%%%
\version "2.19.61"
InsertTextInOpenStaff = #(define-music-function (text lspace rspace
XYoff) (markup? number? number? number-pair?)
#{
\cadenzaOn
\stopStaff
\repeat unfold #lspace { s4 \noBreak \bar "" }
\once \override TextScript #'extra-offset = #XYoff
<>^\markup #text
\repeat unfold #rspace { s4 \noBreak \bar "" }
\cadenzaOff
\startStaff % Resume bar count and show staff lines again
\once \override Staff.KeySignature #'break-visibility = #all-visible
\once \override Staff.Clef #'break-visibility = #all-visible
#})
\relative c'' {
\repeat unfold 2 { c'4 c' c' c' }
\InsertTextInOpenStaff \markup { \bold "toto et titi" } #5 #3 #'( 0 .
-1.2 )
\repeat unfold 2 { c'4 c' c' c' }
c,1
\bar"|."
}
%%%%%%%%%%%%%%%%%%
Pour les versions 2.16 et 2.18, il faut effectivement rajouter les
paramètres parser et location
InsertTextInOpenStaff = #(define-music-function (parser location text
lspace rspace XYoff) (markup? number? number? number-pair?)
Si ça ne marche pas pour la version 2.16, on peux créer sa propre
fonction de répétitions
#(define (n-copy n music)
(cond
((> n 1)(ly:music-deep-copy (make-sequential-music (make-list n
music))))
((= n 1) music)
(else (make-music 'Music 'void #t))))
% version 2.16, 2.18
nCopy = #(define-music-function (parser location n music)(integer?
ly:music?)
(n-copy n music))
% version 2.19
nCopy = #(define-music-function (n music)(integer? ly:music?)
(n-copy n music))
NB
Attention, nCopy utilisé à l'intérieur d'un mode \relative peut créer
des choses bizarres.
--
Gilles