Jump to content

Two \partCombine pairs on one staff: Difference between revisions

From LilyPond wiki
Import snippet from LSR
 
mNo edit summary
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
The <code>\partCombine</code> function takes two music expressions each containing a part, and distributes them among four <code>Voice</code>s named “two”, “one”, “solo”, and “chords” depending on when and how the parts are merged into a common voice. The voices output from <code>\partCombine</code> can have their layout properties adjusted in the usual way. Here we define extensions of <code>\partCombine</code> to make it easier to put four voices on a staff.
The <code>\partCombine</code> function takes two music expressions each containing a part, and distributes them among four <code>Voice</code>s named “two”, “one”, “solo”, and “chords” depending on when and how the parts are merged into a common voice. The voices output from <code>\partCombine</code> can have their layout properties adjusted in the usual way. Here we define extensions of <code>\partCombine</code> to make it easier to put four voices on a staff.
The original version can be input as follows.


<pre>soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
<pre>soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
Line 6: Line 8:
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }


\new Staff &lt;&lt;
\new Staff <<
   \key b\minor  
   \key b\minor  
   \clef alto
   \clef alto
Line 13: Line 15:
   \partCombineUp \soprano \alto
   \partCombineUp \soprano \alto
   \partCombineDown \tenor \bass
   \partCombineDown \tenor \bass
&gt;&gt;</pre>
>></pre>
 
And here is the extended snippet.


<lilypond version="2.24.0">
<lilypond version="2.24">
\layout {
\layout {
   \context {
   \context {
Line 85: Line 89:
</lilypond>
</lilypond>


[[Category:Scheme]]
[[Category:Simultaneous notes]]
[[Category:Simultaneous notes]]
[[Category:Staff notation]]
[[Category:Staff notation]]
[[Category:Included in the official documentation]]
[[Category:Included in the official documentation]]
[[Category:Snippet]]

Latest revision as of 13:30, 9 December 2025

The \partCombine function takes two music expressions each containing a part, and distributes them among four Voices named “two”, “one”, “solo”, and “chords” depending on when and how the parts are merged into a common voice. The voices output from \partCombine can have their layout properties adjusted in the usual way. Here we define extensions of \partCombine to make it easier to put four voices on a staff.

The original version can be input as follows.

soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

\new Staff <<
  \key b\minor 
  \clef alto
  \partial 4
  \transpose b b'  
  \partCombineUp \soprano \alto
  \partCombineDown \tenor \bass
>>

And here is the extended snippet.

\version "2.24"

\layout {
  \context {
    \Staff
    \accepts "VoiceBox"
  }
  \context {
    \name "VoiceBox"
    \type "Engraver_group"
    \defaultchild "Voice"
    \accepts "Voice"
    \accepts "NullVoice"
  }
}

customPartCombineUp =
#(define-music-function (partOne partTwo)
  (ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Up} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible.  This variant sets the default voicing
in the output to use upward stems."
#{
  \new VoiceBox = "Up" <<
    \context Voice = "one" { \voiceOne }
    \context Voice = "two" { \voiceThree }
    \context Voice = "shared" { \voiceOne }
    \context Voice = "solo" { \voiceOne }
    \context NullVoice = "null" {}
    \partCombine #partOne #partTwo
  >>
#})

customPartCombineDown = #
(define-music-function (partOne partTwo)
  (ly:music? ly:music?)
"Take the music in @var{partOne} and @var{partTwo} and return
a @code{VoiceBox} named @q{Down} containing @code{Voice}s
that contain @var{partOne} and @var{partTwo} merged into one
voice where feasible.  This variant sets the default voicing
in the output to use downward stems."
#{
  \new VoiceBox = "Down" <<
    \set VoiceBox.soloText = #"Solo III"
    \set VoiceBox.soloIIText = #"Solo IV"
    \context Voice ="one" { \voiceFour }
    \context Voice ="two" { \voiceTwo }
    \context Voice ="shared" { \voiceFour }
    \context Voice ="solo" { \voiceFour }
    \context NullVoice = "null" {}
    \partCombine #partOne #partTwo
  >>
#})

soprano = { d'4 | cis'  b  e'  d'8 cis' | cis'2 b }
alto = { fis4 | e8 fis gis ais b4 b | b ais fis2 }
tenor = { a8 b | cis' dis' e'4 b8 cis' d'4 | gis cis' dis'2 }
bass = { fis8 gis | a4 gis g fis | eis fis b,2 }

\new Staff <<
  \key b\minor
  \clef alto
  \partial 4
  \transpose b b'
  \customPartCombineUp \soprano \alto
  \customPartCombineDown \tenor \bass
>>