On 27 February 2018 at 22:24, Thomas Morley <[email protected]>
wrote:

> 2018-02-27 19:12 GMT+01:00 Sirius Barras <[email protected]>:
> > I would like to transpose a motif (using \modalTranspose) to a _set_ of
> > different pitches. At the moment this is what I do:
> >
> > scale = {c d e f g a b}
> > motif = {c' e' g' c'}
> > {
> >   \modalTranspose c e \scale \motif
> >   \modalTranspose c g \scale \motif
> >   \modalTranspose c a \scale \motif
> > }
> >
> > How can I do something similar to this:
> >
> > toPitchSet = {e g a}
> > scale = {c d e f g a b}
> > motif = {c' e' g' c'}
> > {
> >   \modalTranspose c \toPitchSet \scale \motif
> > }
> >
> > Many thanks, S.
>
>
> How about:
>
> \version "2.19.65"
>
> %% Based on a function by David K
> multipleModalTransposes =
> #(define-music-function (parser location m scale music)
>   (ly:music? ly:music? ly:music?)
>   ;; If `music' is simple `SequentialMusic', we need to go for 'elements
> instead
>   ;; of 'element. In this case we also need to "unfold" the resulting
>   ;; `possible-elts' one level
>   (let* ((seq-mus? (music-is-of-type? music 'sequential-music))
>          (possible-elts
>            (map
>              (lambda (pitch)
>              (ly:music-property
>                #{ \modalTranspose c $pitch $scale $music #}
>                  (if seq-mus?
>                     'elements
>                     'element)))
>                 (event-chord-pitches m))))
>
>     (music-clone m
>       'elements
>       (if seq-mus?
>           (apply append '() possible-elts)
>           possible-elts))))
>
> toPitchSet = { e g a e b }
> scale = { c d e f g a b }
> motif =
>   %\absolute { c' e' g' c' }
>   %\relative { c' e g c, }
>   %\relative c' { c e g c, }
>   %\fixed c' { c e g c }
>   %\context Voice { c'4 e' g' c' }
>   { c'4 e' g' c' }
>
> \multipleModalTransposes \toPitchSet \scale \motif
>
>
> Cheers,
>   Harm
>

Great! Thanks a lot, s.
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to