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: Urs Liska
Subject: Re: to make a function with argument list or vector
Date: Sun, 04 Sep 2016 20:26:48 +0200
User-agent: K-9 Mail for Android



Am 4. September 2016 19:30:02 MESZ, schrieb "Оксана Крымина" <address@hidden>:
>Great! It works! It works!
>Thank You!
>

The first thing is you had to use define-music-function because that returns *music*.

Then you can return a *list* of music expressions with something like

@(map
(lambda (len)
#{ \repeat unfold #len ... #})
llen)

(completely untested, on the phone)
This iterates over your input list and produces the music using regular syntax.

HTH
Urs



>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
>>
>>
>
>_______________________________________________
>lilypond-user mailing list
>address@hidden
>https://lists.gnu.org/mailman/listinfo/lilypond-user

--
Diese Nachricht wurde von meinem Android-Mobiltelefon mit K-9 Mail gesendet.
reply via email to

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