我有一些Lilypond文件,我把它们放在一起,用于人声和吉他;我需要为他们中的一些人做变调。我正在使用Carl Sorensen-3的回复中的代码来打印变调和弦 http://lilypond.1069038.n5.nabble.com/Newbie-Question-verse-and-chorus-td46241i20.html。
这有效:
version "2.18.2"
include "predefined-guitar-fretboards.ly"
% Carl Sorensen-3's reply in
% http://lilypond.1069038.n5.nabble.com/Newbie-Question-verse-and-chorus-td46241i20.html
parenthesizeAll =
#(define-music-function (parser loc myMusic) (ly:music?)
(music-map
(lambda (ev)
(if (or (memq 'note-event (ly:music-property ev 'types))
(memq 'rest-event (ly:music-property ev 'types)))
(set! (ly:music-property ev 'parenthesize) #t))
ev)
myMusic)
myMusic)
theMelody = relative g' { c1 }
theChords = chordmode { c1 }
verseI = lyricmode { See }
score {
<<
context ChordNames {
set instrumentName = #"Capo 3"
parenthesizeAll
transpose c a { theChords }
}
new FretBoards { transpose c a { theChords } }
new ChordNames { theChords }
new Staff {context Voice = "voiceMelody" { theMelody }
}
new Lyrics = "lyricsI" { lyricsto "voiceMelody" verseI }
>>
layout {
% make the "Capo x" show up
context {
ChordNames consists Instrument_name_engraver
}
}
}
现在:我想将转置放入宏中(保证我在指板上获得相同的转置设置和转调)。
将 \score 块替换为此块
% define once
tC = { transpose c a }
score {
<<
context ChordNames {
set instrumentName = #"Capo 3"
parenthesizeAll
tC { theChords }
}
new FretBoards { tC { theChords } }
new ChordNames { theChords }
new Staff {context Voice = "voiceMelody" { theMelody } }
new Lyrics = "lyricsI" { lyricsto "voiceMelody" verseI }
>>
layout {
% make the "Capo x" show up
context {
ChordNames consists Instrument_name_engraver
}
}
}
结果:
/home/wegscd/mup/CapoTest.ly:23:23: error: syntax error, unexpected '}'
tC = { transpose c a
}
/home/wegscd/mup/CapoTest.ly:26:3: error: errors found, ignoring music expression
这是一件小事,但我可以将这个转置到宏中,这样我就可以定义它一次?
我有同样的问题,并从 http://lsr.di.unimi.it/LSR/Item?id=787 那里得到了答案
我正在使用它的一个小修改:
MyTranspose =
#(define-music-function (parser location m)
(ly:music?)
#{ transpose c c $m #}) % transposing c to c does nothing. Adjust as needed.