输出 \score 块的 Lilypond 宏
Posted
技术标签:
【中文标题】输出 \\score 块的 Lilypond 宏【英文标题】:Lilypond macro that outputs a \score block输出 \score 块的 Lilypond 宏 【发布时间】:2017-01-13 18:34:26 【问题描述】:我有以下 Lilypond 源文件,其中包含以下形式的几个块:
global = \relative ...
Soprano = \relative ...
Alto = \relative ... % ditto Tenor, Bass
\score \new StaffGroup <<
\new Staff << \clef "G" \global \Soprano >>
\new Staff << \clef "G" \global \Alto >>
\new Staff << \clef "G_8" \global \Tenor >>
\new Staff << \clef "F" \global \Bass >>
>> \layout
显然global
、Soprano
、Alto
、Tenor
、Bass
的定义每次都会改变,但\score
块保持不变。
我想在 Scheme 宏中考虑该块。但是,我尝试过的最简单的定义,
#(define (Choral) (ly:make-score # \new StaffGroup <<
\new Staff << \clef "G" \global \Soprano >>
\new Staff << \clef "G" \global \Alto >>
\new Staff << \clef "G_8" \global \Tenor >>
\new Staff << \clef "F" \global \Bass >>
>> # ))
有以下不便之处:(1) 它必须由#(Choral)
调用,而不是更自然的\Choral
,更糟糕的是,(2) 它不会产生任何输出。如果我尝试在(Choral)
定义中放入\layout
块,lilypond 会产生以下错误:error: syntax error, unexpected \layout
。
有没有一种简单的方法来编写一个宏来生成一个带有附加\layout
的\score
块?
【问题讨论】:
自我回答:只需使用collect-music-for-book
函数,在scm/lily-library.scm
中定义;完整示例:Choral = #(define-music-function (parser location) () (collect-music-for-book parser # ... #) # #)
(第二个# #
是一个空音乐表达式,第一个包含如上的四声部SATB)。
【参考方案1】:
为什么是 Scheme 宏?您可以只使用 \include (这就像将文件的内容粘贴到您放置的行中)。所以你可能会使用相同的乐谱块文件:
% myScoreBlock.ly file
\score
\new StaffGroup <<
\new Staff << \clef "G" \global \Soprano >>
\new Staff << \clef "G" \global \Alto >>
\new Staff << \clef "G_8" \global \Tenor >>
\new Staff << \clef "F" \global \Bass >>
>> \layout
包含在具有相同变量的任何其他文件中:
% example of a piece
\version "2.19.54"
global = \time 2/4
Soprano = \relative d2
Alto = \relative f2
Tenor = \relative e2
Bass = \relative g2
\include "myScoreBlock.ly"
另一个减小输入大小的方法是使用内置模板。还有一个built-in template for SATB scores。
【讨论】:
Pure Scheme(我刚刚发布了一个解决方案)既干净又快速(可能很明显,具体取决于文件系统)。以上是关于输出 \score 块的 Lilypond 宏的主要内容,如果未能解决你的问题,请参考以下文章
如何将 midi 导出集成到现有的 lilypond 分数中
用PHP,if语句做一个代码:成绩>=90的时候输出优秀,成绩>=80的时候输出良好,<60输出不及格,求助!
2022-11-23: 分数排名。输出结果和表的sql如下。请写出输出结果的sql语句? +-------+------+ | score | rank | +-------+------+ | 4.