lilypond-user
[Top][All Lists]
Advanced

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

Re: Splitting voices


From: Luca Fascione
Subject: Re: Splitting voices
Date: Sun, 20 Nov 2022 01:44:12 +0100

Awesome, thanks Jean!
L

On Sun, 20 Nov 2022, 00:30 Jean Abou Samra, <jean@abou-samra.fr> wrote:
Le 20/11/2022 à 00:02, Luca Fascione a écrit :
> Hi all,
> I have some 2 voice music coming from musicxml like this
>
> <a' c>4 <g b>8. <d g\2>16 ~ ~ <d g>2.
>
> and I'd like to split it into 2 voices instead:
>
> <<
> \new Voice ... { ... a4 g8. d16~ d2. ... }
> \new Voice ... { ... c4 b8. g16~ g2. ... }
> >>
>
> is there any software / trick that I could use?
> (I use Frescobaldi, but I couldn't find a transformation for this purpose)


There are a number of snippets floating around for that IIRC, basically
variations on the theme

\version "2.22.2"

#(use-modules (ice-9 receive))

selectNote =
#(define-music-function (index music) (index? ly:music?)
    (music-map
     (lambda (m)
       (if (music-is-of-type? m 'event-chord)
           (let ((elts (ly:music-property m 'elements)))
             (receive (rhythmic arts)
               (partition (music-type-predicate 'rhythmic-event)
                          elts)
               (if (< (1- index)
                      (length rhythmic))
                   (let* ((elt (list-ref elts (1- index)))
                          (elt-arts (ly:music-property elt 'articulations)))
                     (set! (ly:music-property elt 'articulations)
                           (append elt-arts (map ly:music-deep-copy arts)))
                     elt)
                   #{ #})))
           m))
     music))

mus = \relative {
   <a' c>4 <g b>8. <d g\2>16~ <d g>2.
}

\new Staff <<
   \new Voice {
     \voiceOne
     \selectNote 2 \mus
   }
   \new Voice {
     \voiceTwo
     \selectNote 1 \mus
   }
 >>


Best,
Jean


reply via email to

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