多声部基本操作
按惯例,先贴效果,再贴代码。
\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} >> }