首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Lilypond音乐替代函数传递和弦并返回音乐

用Lilypond音乐替代函数传递和弦并返回音乐
EN

Stack Overflow用户
提问于 2018-08-26 20:35:45
回答 1查看 206关注 0票数 1

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

代码语言:javascript
复制
\chordFunction <c ef f af>
% or
\chordFunction #'(c ef f af)

并返回如下的Lilypond代码:

代码语言:javascript
复制
\tuplet 3/2 {<c ef f af>4 <c ef f af>8~} <c ef f af>2

我试过了

代码语言:javascript
复制
jazzsyncoA = 
#(define-music-function
  (parser location chord)
  (symbol-list-or-music?)
  #{
    \tuplet 3/2 {$<chord>4 $<chord>8~} $<chord>2
  #}
)

但这会让

代码语言:javascript
复制
error: GUILE signaled an error for the expression beginning here
    \tuplet 3/2 {$
                  <chord>4 $<chord>8~} $<chord>2

以及我尝试调用时的其他错误。我应该如何编写函数来实现这一点?我是不是不恰当地处理这个问题?

我看过预定义类型谓词上的Lilypond文档,但我认不出任何潜在的用途。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 08:01:50

我觉得你差不多是在正确的方向上。您可以查看这个LilyPond文档页面,看看如何开始编写一个纯Scheme函数来解决这个问题和其他问题。

至于您的函数,如果您希望像\chordFunction <c ef f af>一样使用您的函数,那么可以将ly:music?作为谓词:

代码语言:javascript
复制
\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上工作。希望它能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52030075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档