LilyPond 中如何输出简谱

最近研究LilyPond。 关于如何处理/输出/显示简谱的问题研究了网上的资料,总结出三种方式:

第一种:使用jianpu-ly.py这个Python脚本。他要求在文本文件中使用它自己的格式输入简谱,然后用此脚本处理后得到的输出保存到一个.ly文件中, 再由LilyPond处理,即可。

此处不再赘述。

工具的网址:GitHub - ssb22/jianpu-ly: Jianpu in Lilypond

别人的例子: 在GNU/Linux下使用Lilypond排版简谱 - 皮波迪先生 - 博客园 (cnblogs.com)

第二种:lilypond-Jianpu/jianpu10.ly at master · nybbs2003/lilypond-Jianpu · GitHub

提供了一个LilyPond包含文件jianpu10a.ly, 可以包含到自己ly文件中。 他提供了一种自定义类型的谱表(Staff)- JianpuStaff。 输入乐谱时按照Lilypond标准的方式输入五线谱, 使用它提供的JianpuStaff 生成简谱, 下面是它提供的例子:

\version "2.18.2"
\language "english"

global = {
  \key f\major
  \time 4/4
}
\include "jianpu10a.ly"

notes = { 
  \grace d'8 c'1 f'2( g') g'2~g'2~g'2. r4  bf'1~bf'2 c''2 |\break
  d'8~d'8 e'8.~e'16 \tuplet 3/2{f'8~ f'8~ f'8} \tuplet 3/2{g'16 r16 g'16} r8 r1  |\break
  f'4~f'2 r4 f'2~f'4 g'4 a'4 a'4~ a'4 \tuplet 3/2{bf'8 a'8 g'8} 
}
  
<< 
  \new JianpuStaff \jianpuMusic { \global \notes }  % 此行生成简谱,可以看到装饰音处理的有问题
  \new Staff { \global \notes }  % 作为对照的五线谱
>> 

 第三种:

这是我在浏览Lilypond官方文档的时候无意间在其Snippets部分发现的。其中的条目-Numbers as easy note heads提供了一个简单的engraver函数配合\easyHeadsOn 命令使用。 这个\easyHeadsOn命令单独使用的时候,效果

是在符头上显示音名, 像这样:

而它提供的engraver会把音名按照首调唱名法修改为简谱音名.

像这样:

 可以把它提供的engraver放入一个.ly文件,在其它文件中包含使用。

例如,创建一个ez_numbers_engraver.ly 内容是如下函数定义。

#(define Ez_numbers_engraver
   (make-engraver
    (acknowledgers
     ((note-head-interface engraver grob source-engraver)
      (let* ((context (ly:translator-context engraver))
             (tonic-pitch (ly:context-property context 'tonic))
             (tonic-name (ly:pitch-notename tonic-pitch))
             (grob-pitch
              (ly:event-property (event-cause grob) 'pitch))
             (grob-name (ly:pitch-notename grob-pitch))
             (delta (modulo (- grob-name tonic-name) 7))
             (note-names
              (make-vector 7 (number->string (1+ delta)))))
        (ly:grob-set-property! grob 'note-names note-names))))))

#(set-global-staff-size 26)

用法:

\version "2.24.1"
\language "italiano"
% 语言选择了italiano,则音名如下
% do re mi fa sol la si
% 升d 降b
\include "ez_numbers_engraver.ly"  % 此处包含了上述文件

melody = \fixed do'{
    \key fa \major
    \time 2/4
    \tempo 4=60
    \easyHeadsOn
% 前奏
fa8. sol16 do'8 la     |

sol8. la16 sol fa sol8     |

re la sol16 fa re8     |

do2~ | do         |

do'8. do'16 sib8 sol |

la16( do' fa4.) | 

la,4. fa8 |

re fa16( re) do4 |

fa8 fa16( sol) fa8 re |

fa( sol) do'( re'16 do') |

do'8( la4.~ | la2) |

sol8 sol16( la) sol8 mi |

re16( fa sol4.) |

do'4. sol8 | 

la sol fa4 |

}
\score {

  \melody
  \midi {}
  \layout {
  \context {
    \Voice
    \consists \Ez_numbers_engraver
  }
}
}
效果:

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值