2

,我经常发现自己在写这样的东西

\version "2.14.2"
{
  r2 c2 | gis'8 gis gis gis gis gis gis gis |
}

或这个

\version "2.14.2"
{
  \time 3/4 \clef bass \relative es,
  {
    <es \parenthesize es'>8\staccato g bes
    <es, \parenthesize es'>8\staccato g c
  }
}

在括号中,我反复将一些音符高一个八度加倍。

我搜索了Lilypond 文档,但没有找到避免这种重复的简单机制。一种更复杂的方法显然是编写一个音乐函数,但这似乎需要进入 Scheme。

迄今为止我发现的唯一机制是我不了解机制的机制:

\version "2.14.2"
S = #staccato
P = #parenthesize
{
  \time 3/4 \clef bass \relative es,
  {
    <es \P es'>8\S g bes <es, \P es'>8\S g c
  }
}

那么:我怎样才能在 Lilypond 中编写我自己的稍微复杂的缩写,而不转义到 Scheme?

更新。我编辑了我的问题的一部分,以表明(1)我目前使用的是 2.14.2,这是 Ubuntu 12.04 LTS 上的最新版本;(2)在我的第二个例子中,在bes我想回到上一个 es之后,不是高一个八度:因为我总是在\relative模式下工作,所以我故意写了es,;(3) 我正在寻找一种方法来缩写诸如“音符与同一个音符高八度,带括号”之类的缩写。

4

1 回答 1

3

因此,您似乎有两个问题。对于第一个,只需使用命令\repeat unfold N { ...music... },该命令在此链接的文档中进行了描述。所以你上面的代码会变成这样:

\version "2.17.28"
{
  c2 \repeat unfold 8 {gis'8} r2
  es1 | \repeat unfold 2{<es \parenthesize es'>8\staccato g bes4}
}

在和弦的情况下,有q一个重复最后一个和弦的特殊命令(它只重复音高,它不携带有关持续时间、发音、动态等的信息):

\version "2.17.28"
{
  <a' c'' e''>4\p-> q q q |
  q-> q\ff q\p->\< q\! |
  d'8 e' q q q2 
}

您还可以定义代码的较短部分并在主代码中使用它们,例如:

\version "2.17.28"
A = {gis'8}
B = {<es \parenthesize es'>8\staccato g bes4}

{
  c2 \repeat unfold 8 {\A} r2 |
  es1 | \repeat unfold 2 {\B} | 
  \repeat unfold 16 {\A} |
  \repeat unfold 4 {\B}
}

至于你的第二个问题,我也开始学习在 LilyPond 上使用函数了。但是好吧,看来您的代码相当于这里的代码,这是 LilyPond 中最基本的功能(据我所知):

\version "2.17.28"
S = #(define-event-function (parser location) ()
  #{ \staccato #}
)

P = #(define-event-function (parser location) ()
  #{ \parenthesize #}
)

{
es1 | <es \P es'>8\S g bes <es, \P es'>\S g bes 
}

所以如果你只是想在你的代码中替换一些长文本,你可以使用这个模板:functionname = #(define-event-function (parser location) () #{ text #}), wherefunctionnametexthave to be changed,但其余的应该保持不变。应用,它看起来像这样:

\version "2.17.28"
test = #(define-event-function (parser location) ()
  #{ ^"test"\fermata\trill->\pp #}
)
{c''1\test | d'' }

对于仍然有点复杂的东西,请看这个music-function使用notesas 参数的示例。请注意如何操作参数在最终输出中的位置:

\version "2.17.28"
func = 
#(define-music-function
  (parser location notes)
  (ly:music?)
  #{ 
    % generates 2 low pitches with cross notehead
    \override Staff.NoteHead.style = #'cross
    g,8 a,

    % reverts back to the normal noteheads and uses the notes in the argument of the function
    \revert Staff.NoteHead.style
    $notes   % these will be substituted by the arguments when you call this function on your main code

    % generates 4 low pitches with cross notehead
    \override Staff.NoteHead.style = #'cross
    g,8 a, b, c
    % reverts back to the normal noteheads for the rest of the code
    \revert Staff.NoteHead.style
  #}
)

{
  \func { c''4 } | d''1
}

现在如果你想做更复杂的事情,那么你将需要真正研究有关音乐功能的文档并自己尝试很多。你也可以检查这个这个链接。

于 2013-10-16T20:14:18.830 回答