我正在尝试用Lilypond编写函数,该函数将一个和弦(或音高列表)作为自变量,并以插入和弦的节奏返回音乐。更具体地说,我希望以这种方式调用该函数:
\chordFunction <c ef f af>
% or
\chordFunction #'(c ef f af)
并返回这样的Lilypond代码:
\tuplet 3/2 {<c ef f af>4 <c ef f af>8~} <c ef f af>2
jazzsyncoA =
#(define-music-function
(parser location chord)
(symbol-list-or-music?)
#{
\tuplet 3/2 {$<chord>4 $<chord>8~} $<chord>2
#}
)
但这会抛出
error: GUILE signaled an error for the expression beginning here
\tuplet 3/2 {$
<chord>4 $<chord>8~} $<chord>2
在尝试调用时出现其他错误。我应该如何编写函数来完成此任务?我是否不正确地解决了这个问题?
答案 0 :(得分:1)
我认为您或多或少都朝着正确的方向发展。您可以查看this LilyPond doc page,以了解如何开始编写纯Scheme功能来解决此问题和其他问题。
对于函数,如果要使用\chordFunction <c ef f af>
之类的函数,则可以将ly:music?
作为谓词:
\version "2.18.0"
\language "english"
jazzsyncoA = #(define-music-function (parser location my-notes) (ly:music?)
#{
\tuplet 3/2 { #my-notes q8~ } q2
#}
)
\score {
\new Staff {
\clef "bass"
\key c \minor
\new Voice = "one" {
\jazzsyncoA <c ef f af>4
}
}
}
与图片中的结果相同。我在2.19.82版上对此进行了测试,但是我猜测它也将在2.18.0版上运行。希望对您有帮助!