使用 Lilypond 音乐替换功能将和弦传递给音乐并返回音乐
Passing chords to and returning music with Lilypond music substitution functions
我正在尝试在 Lilypond 中编写函数,该函数将和弦(或音高列表)作为参数,并 return 将所述和弦插入节奏中的音乐。更具体地说,我希望以这样的方式调用该函数:
\chordFunction <c ef f af>
% or
\chordFunction #'(c ef f af)
和 return 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 docs on predefined type predicates,但我无法识别任何潜在用途。
我认为您的方向或多或少是正确的。您可以查看 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。希望对您有所帮助!
我正在尝试在 Lilypond 中编写函数,该函数将和弦(或音高列表)作为参数,并 return 将所述和弦插入节奏中的音乐。更具体地说,我希望以这样的方式调用该函数:
\chordFunction <c ef f af>
% or
\chordFunction #'(c ef f af)
和 return 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 docs on predefined type predicates,但我无法识别任何潜在用途。
我认为您的方向或多或少是正确的。您可以查看 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。希望对您有所帮助!