[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: to make a function with argument list or vector
From: |
Simon Albrecht |
Subject: |
Re: to make a function with argument list or vector |
Date: |
Sun, 4 Sep 2016 19:15:18 +0200 |
Hi Oxana,
I _guess_ the reason it doesn’t work is because the parser doesn’t
accept a Scheme expression instead of the number after \repeat unfold.
The solution is creating music via Scheme. As a first step, you can
always use something like
%%%%%%%
\version "2.19.47"
\displayMusic { \repeat unfold 2 { c'1 } }
%%%%%%%
to see what the music looks like on the Scheme level:
;;;;;;;;;;;;;;;;;;;;;
(make-music
'SequentialMusic
'elements
(list (make-music
'UnfoldedRepeatedMusic
'elements
'()
'repeat-count
2
'element
(make-music
'SequentialMusic
'elements
(list (make-music
'NoteEvent
'duration
(ly:make-duration 0)
'pitch
(ly:make-pitch 0 0)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Now I built a music function using that information:
%%%%%%%%%%%%%%%
\version "2.18.2"
createRepeats =
#(define-music-function (parser location nums mus end) (list? ly:music?
ly:music?)
(let ((repeater (lambda (n) (make-music
'SequentialMusic
'elements
(list (make-music
'UnfoldedRepeatedMusic
'elements
'()
'repeat-count
n
'element
mus)
end)))))
(make-sequential-music (map repeater nums))))
\createRepeats #'(2 3 7) { c'1 } { \bar "||" }
%%%%%%%%%%%%%%%%
If you have further questions, feel free to ask back.
Best, Simon
PS. In recent development versions, one may use nicer syntax:
%%%%%%%%%%%%%%%%
\version "2.19.47"
createRepeats =
#(define-music-function (nums mus end) (list? ly:music? ly:music?)
(let ((repeater (lambda (n) (make-music
'SequentialMusic
'elements
(list (make-music
'UnfoldedRepeatedMusic
'elements
'()
'repeat-count
n
'element
mus)
end)))))
(make-sequential-music (map repeater nums))))
\createRepeats 2,3,7 { c'1 } { \bar "||" }
%%%%%%%%%%%%%%%%
On 04.09.2016 18:52, Оксана Крымина wrote:
hello all!
please, help me to write a function to convert several numbers like (5
7 10 8) to musical string like
\repeat unfold 5 {c2} \bar ""
\repeat unfold 7 {c2} \bar ""
\repeat unfold 10 {c2} \bar ""
\repeat unfold 8 {c2} \bar ""
my code produces errors only:
\version "2.18.2"
musSpisok = #(define-scheme-function (parser location llen)(list?)
(if (not (null? llen))
#{
\repeat unfold $(car llen) {c2} \bar "" (
\musSpisok #'(cdr llen)) )
#})
thanx,
Oxana
_______________________________________________
lilypond-user mailing list
address@hidden
https://lists.gnu.org/mailman/listinfo/lilypond-user