Scheme 使用Lilypond音乐替代功能传递和弦并返回音乐

Scheme 使用Lilypond音乐替代功能传递和弦并返回音乐,scheme,guile,lilypond,music-notation,Scheme,Guile,Lilypond,Music Notation,我试图在Lilypond中编写函数,将和弦(或音高列表)作为参数,并将所述和弦插入节奏中返回音乐。更具体地说,我希望以如下方式调用该函数: \chordFunction <c ef f af> % or \chordFunction #'(c ef f af) \chordFunction %或 \弦函数#'(c ef f af) 返回Lilypond代码,如下所示: \tuplet 3/2 {<c ef f af>4 <c ef f af>8~} <

我试图在Lilypond中编写函数,将和弦(或音高列表)作为参数,并将所述和弦插入节奏中返回音乐。更具体地说,我希望以如下方式调用该函数:

\chordFunction <c ef f af>
% or
\chordFunction #'(c ef f af)
\chordFunction
%或
\弦函数#'(c ef f af)
返回Lilypond代码,如下所示:

\tuplet 3/2 {<c ef f af>4 <c ef f af>8~} <c ef f af>2
\tuplet 3/2{4 8}2

我试过了

jazzsyncoA = 
#(define-music-function
  (parser location chord)
  (symbol-list-or-music?)
  #{
    \tuplet 3/2 {$<chord>4 $<chord>8~} $<chord>2
  #}
)
jazzsyncoA=
#(定义音乐功能
(分析器位置和弦)
(符号列表还是音乐?)
#{
\元组3/2{$4$8~}$2
#}
)
但这会让你失望

error: GUILE signaled an error for the expression beginning here
    \tuplet 3/2 {$
                  <chord>4 $<chord>8~} $<chord>2
错误:GUILE表示从这里开始的表达式有错误
\元组3/2{$
4 $8~} $2
以及我尝试调用时的其他错误。我应该如何编写函数来实现这一点?我处理这个问题是否不当?

我已经看过了,但我看不出任何潜在的用途。

我认为你的方向或多或少是对的。您可以看看如何开始编写纯Scheme函数来解决此问题和其他问题

至于您的函数,如果您想使用像
\chordFunction
这样的函数,那么您可以
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
        }
    }
}

\version“2.18.0”
\语言“英语”
jazzsyncoA=#(定义音乐函数(解析器位置我的笔记)(ly:music?)
#{
\元组3/2{#我的笔记q8~}q2
#}
)
\得分{
\新员工{
\低音谱号
\c键\小调
\新语音=“一”{
\爵士乐4
}
}
}
这将给出与图片中相同的结果。我在版本2.19.82上测试了它,但我猜它也可以在2.18.0上使用。希望能有帮助