莉莉池:如何使用Scheme将数字映射到音符



我正在尝试创建一个函数,例如,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 #}
  )

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

我已经尝试将" "{ }交换,#{ #}无济于事。

我设法得到了一些东西

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)
                )
              )
        #}
       )

它至少有效。

相关内容

  • 没有找到相关文章

最新更新