能否在LilyPond中编写通用声部?实现大小鼓乐谱复用
如何在LilyPond中复用鼓声部节奏并替换不同鼓组音符
完全可以实现这种通用声部的复用,LilyPond支持通过音乐函数或变量替换的方式,让相同节奏模板适配不同鼓组音符。以下是两种可行的实现方案:
方案一:使用带参数的音乐函数(推荐)
直接定义一个接收鼓组音符名称作为参数的音乐函数,函数内部生成对应节奏:
\version "2.22.1" % 定义通用节奏函数,参数为鼓组音符的符号名 genericRhythm = #(define-music-function (drumNote) (symbol?) (drummode { #drumNote 4 #drumNote 4 #drumNote 4 #drumNote 4 })) \score { \new StaffGroup << \new DrumStaff << \new DrumVoice = "Klein" \genericRhythm #'tommh >> \new DrumStaff << \new DrumVoice = "Gross" \genericRhythm #'tomfh >> >> }
方案二:使用占位符模板+替换函数
先定义带占位符的通用节奏模板,再通过函数将占位符替换为目标鼓组音符:
\version "2.22.1" % 定义带占位符x的通用节奏模板 generic = \drummode { x4 x4 x4 x4 } % 定义替换函数,将模板中的占位符替换为指定鼓组音符 replaceDrum = #(define-music-function (drumNote) (symbol?) (applyMusic (lambda (music) (if (eq? (ly:music-property music 'name) 'NoteEvent) (set! (ly:music-property music 'drum-type) drumNote)) music) generic)) \score { \new StaffGroup << \new DrumStaff << \new DrumVoice = "Klein" \replaceDrum #'tommh >> \new DrumStaff << \new DrumVoice = "Gross" \replaceDrum #'tomfh >> >> }
说明:
- 方案一语法简洁,适合固定节奏的场景,直接通过参数生成对应鼓组的节奏片段。
- 方案二更灵活,适合需要复用复杂节奏模板的场景,只需修改替换的鼓组音符即可适配不同声部。
你期望的\generic[tommh]并非LilyPond原生语法,上述两种方案可以达成相同的复用效果。
内容的提问来源于stack exchange,提问作者G. S.
相关产品推荐
相关产品推荐

