多声部基本操作
按惯例,先贴效果,再贴代码。

\version "2.20.0"
\language "english"
\paper {
markup-markup-spacing = #'((padding . 5)) %文字行距
markup-system-spacing = #'((padding . 3)) %谱文行距
}
\markup {"多声部的方法很简单,就是用<<和>>把多个声部包含进来"}
\markup {"声部之间用\\\\号隔开"}
\new Staff{
<<
{c''4 d''} %声部1
\\ %声部分隔符
{a'4 b'} %声部2
>>
}
\markup {"一般默认声部1的符干向上,声部2符干向下。"}
\markup {"从下面这个例子可以看出lilypond在声部上的默认规则"}
\new Staff{
d''^"默认" a' c'' g' %默认
\voiceOne d''^"按声部1排列" a' c'' g' %按声部1排列
\voiceTwo d''^"按声部2排列" a' c'' g' %按声部2排列
\oneVoice d''^"恢复默认" a' c'' g' %恢复默认
}
\markup {"因此一旦没有分隔符\\\\,所有声部就会统一用默认的方式安排符干"}
\markup {"就会变成这个结果"}
\new Staff{
<<
{c''4 d''} %声部1
{a'4 b'} %声部2
>>
}
\markup {"lilypond也允许合并声部,只要在<<前面声明声部的样式,程序就会主动安排"}
%
\new Staff {
<<
{c2''^"合并前" b'}
{a' g'}
>>
\oneVoice %默认
<<
{c2''^"默认" b'}
{a' g'}
>>
\voiceOne %按声部1安排
<<
{c''^"声部1" b'}
{a' g'}
>>
\voiceTwo %按声部2安排
<<
{c''^"声部2" b'}
{a' g'}
>>
%声明声部2的等价方式
<<
{\voiceTwo c2''^"等价" b'}
{\voiceTwo a' g'}
>>
}
\markup {"遇到三个甚至四个声部在一起时,如果想要区分其中的两部分"}
\markup {"那就使用VoiceThree(向上)或者VoiceFour(向下)的命令"}
\markup {"VoiceFour属于次低声部,所以一般安排在VoiceTwo之上"}
\markup {"设置时注意声部之间加分隔符,否则输出的时候会统一符干"}
\new Staff{
<<
{\voiceOne e''2 d''}\\
{\voiceTwo c''2_"两个VoiceTwo" b'2}
{\voiceTwo a'2 g'2}
>>
<<
{\voiceOne e''2 d''}\\
{\voiceTwo c''2^"Two上Four下" b'2}\\
{\voiceFour a'2 g'2}
>>
<<
{\voiceOne e''2 d''}\\
{\voiceFour c''2_"Four上Two下" b'2}\\
{\voiceTwo a'2 g'2}
>>
<<
{\voiceOne e''2 d''}\\
{\voiceFour c''2^"没加\\\\" b'2}
{\voiceTwo a'2 g'2}
>>
}
浙公网安备 33010602011771号