lilypond-user
[Top][All Lists]
Advanced

[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
>
>



reply via email to

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