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




reply via email to

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