[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: to make a function with argument list or vector
From: |
Оксана Крымина |
Subject: |
Re: to make a function with argument list or vector |
Date: |
Sun, 4 Sep 2016 20:30:02 +0300 |
Great! It works! It works!
Thank You!
2016-09-04 20:15 GMT+03:00, Simon Albrecht <address@hidden>:
> 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
>
>