lilypond-user-fr
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]