lilypond:定义一个包含 \transpose 的宏?

Posted

技术标签:

【中文标题】lilypond:定义一个包含 \\transpose 的宏?【英文标题】:lilypond: define a macro containing \transpose?lilypond:定义一个包含 \transpose 的宏? 【发布时间】:2019-01-18 15:42:24 【问题描述】:

我有一些 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

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

【问题讨论】:

【参考方案1】:

我有同样的问题,并从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.

【讨论】:

以上是关于lilypond:定义一个包含 \transpose 的宏?的主要内容,如果未能解决你的问题,请参考以下文章

在GNU/Linux下使用Lilypond排版简谱

如何将 midi 导出集成到现有的 lilypond 分数中

带有反向符号的 Lilypond 分数

Lilypond for Windows 的安装问题

LilyPond 多行歌词

音程示范歌曲,lilypond example