我试图用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以及我尝试调用时的其他错误。我应该如何编写函数来实现这一点?我是不是不恰当地处理这个问题?
我看过预定义类型谓词上的Lilypond文档,但我认不出任何潜在的用途。
发布于 2019-01-20 08:01:50
我觉得你差不多是在正确的方向上。您可以查看这个LilyPond文档页面,看看如何开始编写一个纯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上工作。希望它能帮上忙!
https://stackoverflow.com/questions/52030075
复制相似问题