多声部处理细节之crossstaff音符处理

2021年11月25日 阅读数:3
这篇文章主要向大家介绍多声部处理细节之crossstaff音符处理,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

 

 

 

 

 

下面给出这几个案例的代码 ,可直接粘贴编译。ide

 

\version "2.20.0"
\language "english"

\paper { #(set-paper-size "a5") markup-markup-spacing = #'((padding . 4 )) }
\markup {钢琴做品里常常有横跨两行的音符,命令为 "\crossstaff" } \markup {这是lilypond 的官方文档里"\crossstaff"的案例} \layout { \context { \PianoStaff \consists #Span_stem_engraver } } { \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! e'8 f' g'4 e'2 } \new Staff { \clef bass \voiceOne \autoBeamOff \crossStaff { <e g>4 e, g16 a8. c8} d \autoBeamOn g8 f g4 c2 } >> } \markup {可是,这是若是给左手加上其余声部,"\crossstaff"命令就失效了} { \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! e'8 f' g'4 e'2 } \new Staff { << { \clef bass \voiceOne \autoBeamOff \crossStaff { <e g>4 e, g16 a8. c8} d \autoBeamOn} {<d f>2} %加了一个声部 >> g8 f g4 c2 } >> } \markup {因为本来要执行跨行的音符出现了位移,因而猜测是否是要调整NoteColumn的参数} \markup {理论上说,使用"\override NoteColumn.force-hshift = #-2"就是解决办法} \markup {但实践证实,这条命令也无论用} { \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! e'8 f' g'4 e'2 } \new Staff { \clef bass <<{\voiceOne \autoBeamOff \crossStaff { <e g>4 e, g16 a8. c8} d \autoBeamOn} {\override NoteColumn.force-hshift = #-2 <d f>2}>> g8 f g4 c2 } >> } \markup {经过反复试验,发现了最关键之处——} \markup {要对多声部的每个声部都标明"\\new voice",这样notecolumn的设置才能生效} \markup {而且,多声部下案例里的<e g>是默认hshift值为1的,会形成偏离} \markup {就必须再次声明hshift值为0才能够从新启用crossstaff命令} \markup {实验此次成功了,效果以下图} { \new PianoStaff << \new Staff { <b d'>4 r d'16\> e'8. g8 r\! e'8 f' g'4 e'2 } \new Staff { \clef bass <<\new Voice{ \voiceOne \autoBeamOff \crossStaff { \override NoteColumn.force-hshift = #0 <e g>4 e, g16 a8. c8} d \autoBeamOn g8 f g4 c2} \new Voice { \override NoteColumn.force-hshift = #-1 \voiceTwo <d f>} >> } >> }