lilypond-user
[Top][All Lists]
Advanced

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

Re: broken octaves


From: Dominic Neumann
Subject: Re: broken octaves
Date: Sat, 26 Jul 2008 10:56:08 +0200

Hi Jay,

nice example! But I think it would be even better if I could write
\brokenoctaves #1 { c4 d e f g8 a b c } meaning that the function also
recognizes the durations of the notes.
Maybe you could be so kind to explain how your functions work. Then we
could also learn from it and possibly improve it. Is that possible?

Dominic

2008/7/26 Jay Anderson <address@hidden>:
> Stefan Thomas <kontrapunktstefan <at> googlemail.com> writes:
>>
>> Dear Lilypond-users, I have in mind an input like:\relative { \brokenoctaves
> {c d e f g }}and the desired output is:\relative { c c' d d' e e' f f' g g' 
> }Can
> this be done automatically?
>>
>
> Play with this see if it does what you want.
>
> -----Jay
>
> \version "2.11.52"
>
> #(define (get-pitches mus)
>  (map
>    (lambda (x)
>      (ly:music-property (car (ly:music-property x 'elements)) 'pitch))
>    (ly:music-property mus 'elements)))
>
> #(define (make-sequential-music elements)
>  (make-music
>    'SequentialMusic
>    'elements
>    elements))
>
> #(define (interleave-lists l1 l2)
>  (cond ((null? l1) l2)
>        ((null? l2) l1)
>        ((and (null? l1) (null? l2)) '())
>        (else (cons (car l1) (cons (car l2) (interleave-lists (cdr l1) (cdr
> l2)))))))
>
> #(define (interleave-music m1 m2)
>  (make-sequential-music
>    (interleave-lists (ly:music-property m1 'elements) (ly:music-property m2
> 'elements))))
>
> #(define (create-music-list pitches duration)
>  (make-sequential-music
>    (map
>      (lambda (p)
>        (make-music
>          'EventChord
>          'elements
>          (list (make-music
>                  'NoteEvent
>                  'duration duration
>                  'pitch p))))
>      pitches)))
>
> #(define (transpose-all-but-first pitches amt)
>  (cons (car pitches) (map
>    (lambda (pitch)
>      (ly:make-pitch
>        (+ amt (ly:pitch-octave pitch))
>        (ly:pitch-notename pitch)
>        (ly:pitch-alteration pitch)))
>    (cdr pitches))))
>
> #(define (set-octave pitches octave)
>  (map
>    (lambda (pitch) (ly:make-pitch octave (ly:pitch-notename pitch)
> (ly:pitch-alteration pitch)))
>    pitches))
>
> brokenoctaves = #(define-music-function (parser location dur arg mus) 
> (integer?
> integer? ly:music?)
>  (let* ((pitches (get-pitches mus))
>         (duration (ly:make-duration dur 0 1 1)))
>    (interleave-music
>      (create-music-list (transpose-all-but-first pitches (- arg)) duration)
>      (create-music-list (set-octave pitches (1- arg)) duration))))
>
> \score
> {
>  \new Staff \relative c'
>  {
>    %First argument is the duration (3 - eight, 4 - sixteenth, etc.).
>    %Second argument is 1 for up and -1 for down.
>    %Third argument is the music
>    %
>    %Shortcomings:
>    % - Next note after \brokenoctave section is in the wrong octave
>    %   compared with what one would expect in relative mode.
>    \brokenoctaves #3 #1 { c d e f g c, c' c,}
>    \brokenoctaves #3 #-1 { c, d e f g c, c' c,}
>  }
> }
>
>
>
>
> _______________________________________________
> lilypond-user mailing list
> address@hidden
> http://lists.gnu.org/mailman/listinfo/lilypond-user
>




reply via email to

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