Two \partCombine pairs on one staff: Difference between revisions
Appearance
m Replace version="2.24.0" with version="2.24" now that the LilyWiki extension supports auto-selecting the latest release in a stable series |
mNo edit summary |
||
| 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 | \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 | ||
>></pre> | |||
And here is the extended snippet. | |||
<lilypond version="2.24"> | <lilypond version="2.24"> | ||
Revision as of 11:11, 19 November 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
>>