lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: syntax helper for ly:music-property


From: Nicolas Sceaux
Subject: Re: syntax helper for ly:music-property
Date: Sun, 13 Jun 2004 19:05:08 +0200
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Nicolas Sceaux <address@hidden> writes:

> Hello,
>
> Manipulating music expressions makes me impatient and lazy (don't know
> about hubris). Here is a little utility which can be used as a
> shortcut for ly:music-property : 
>

hm, this was not enough.

(define (read-dotted-expression chr port)
  (define (gen-music-prop-expr music prop . rest)
    (let ((result-expr (if (number? prop)
                           `(list-ref ,music ,prop)
                           `(ly:music-property ,music ',prop))))
      (if (null? rest)
          result-expr
          (apply gen-music-prop-expr result-expr rest))))
  (let ((tokens (map (lambda (token)
                       (or (string->number token) 
                           (string->symbol token)))
                     (string-split (symbol->string (read port)) #\.))))
    (apply gen-music-prop-expr tokens)))

(read-hash-extend #\@ read-dotted-expression)


guile> (define titi #{ \notes { c d e } #})
guile> (mus:display titi)
(make-music 'SequentialMusic
  'elements (
             (make-music 'SequentialMusic
               'elements (
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 0 0))))
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 1 0))))
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 2 0))))))))
guile> (set! address@hidden (ly:make-pitch -1 4 0))
guile> (mus:display titi)
(make-music 'SequentialMusic
  'elements (
             (make-music 'SequentialMusic
               'elements (
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 0 0))))
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 1 0))))
                          (make-music 'EventChord
                            'elements (
                                       (make-music 'NoteEvent
                                         'duration (ly:make-duration 2 0 1 1)
                                         'pitch (ly:make-pitch -1 4 0))))))))





reply via email to

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