0

我有一些用于人声和吉他的 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

这是一件小事,但我可以把这个转置变成一个宏,这样我就可以定义一次?

4

1 回答 1

0

我有同样的问题,并从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.
于 2019-02-27T11:06:50.240 回答