Lilypond:如何使用Scheme将数字映射到笔记

时间:2016-02-16 14:52:56

标签: lilypond

我试图创建一个函数,例如,\generateNote #3 #4会生成一个f4 - 这有助于编写函数来快速生成比例等。

generateNote = 
#(define-music-function
  (parser location note)
  (number?)
  (define notes 
      '((0 . "c4") 
        (1 . "d4") 
        (2 . "e4") 
        (3 . "f4") 
        (4 . "g4") 
        (5 . "a4") 
        (6 . "b4")))
  #{  #(cdr (assoc (modulo note 7) notes)) #}
  )

这不起作用,因为error: music function cannot generate f4。但是,以下内容确实有效:

generateF = 
#(define-music-function
  (parser location)
  #{  f4 #}
  )

关于为什么这不起作用的任何想法?

我已尝试使用" "{ }替换#{ #}无效。

1 个答案:

答案 0 :(得分:0)

我设法通过

获得了一些东西
generateNote = 
    #(define-music-function
     (parser location note duration) 
        (number? number?) 
        (define notes 
          '((0 . "c") 
            (1 . "d") 
            (2 . "e") 
            (3 . "f") 
            (4 . "g") 
            (5 . "a") 
            (6 . "b"))) 
        #{ 
            $(ly:parser-include-string 
              parser 
              (string-append 
                (cdr (assoc (modulo note 7) notes))
                (number->string duration)
                )
              )
        #}
       )

它至少有效。