2016-02-16 6 views
0

Я пытаюсь создать функцию, где, для примера, \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 #} 
) 

Любые мысли о том, почему это не работает?

Я уже пробовал заменить " " на { } и #{ #} безрезультатно.

ответ

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

Это, по крайней мере работает.