lilypond-user
[Top][All Lists]
Advanced

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

Re: problems trying to write a conditional \transpose


From: David Kastrup
Subject: Re: problems trying to write a conditional \transpose
Date: Tue, 20 Aug 2013 07:53:29 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3.50 (gnu/linux)

Mark Polesky <address@hidden> writes:

> David Kastrup wrote:
>>> I'm trying to write a conditional version of the \transpose
>>> function, that would work something like this...
>>>
>>> input = {
>>>   c c
>>>   \conditionalTransposition c c' { c c }
>>> }
>>>
>>> \input
>>> => { c c c c }
>>>
>>> \processConditionalTransposition \input
>>> => { c c c' c' }
>>
>> conditionalTransposition =
>> #(define-music-function (parser location from to music)
>>   (ly:pitch? ly:pitch? ly:music?)
>>   (set! music #{ \transpose c' c' #music #})
>>   (set! (ly:music-property 'from-to music) (cons from to))
>>   music)
>>
>> processConditionalTransposition =
>> #(define-music-function (parser location music) (ly:music?)
>>   (map-some-music
>>     (lambda (m)
>>       (and (music-is-of-type? m 'transposed-music)
>>            (pair? (ly:music-property m 'from-to music))
>>            #{ \transpose #(car (ly:music-property m 'from-to-music))
>>                          #(cdr (ly:music-property m 'from-to-music))
>>                          #(ly:music-property m 'element)
>>            #}))
>>      music))
>
> David, 
>
> sorry for the delayed response.  Your solution is excellent!
> I'm learning so much from you.

The code is written in a manner that does not make it obvious, but I
should have mentioned why I stored a pitch pair rather than a single
pitch difference: this was in order not to have an outer \transpose
affect the pitch difference information: music properties containing a
single pitch are converted by \transpose.  A pitch pair is left alone.

-- 
David Kastrup




reply via email to

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