Was ist der beste Weg, um eine Lilypond -Quelldatei automatisch in mehrere Schlüssel zu transponieren?

StackOverflow https://stackoverflow.com/questions/799837

Frage

Problem

Ich benutze Lilienteich STIPT SHODSET MOSET SO, damit ein Kirchenchor auftreten kann. Je nachdem, wer in einer bestimmten Woche verfügbar ist, werden Songs in verschiedenen Schlüssel gespielt. Wir haben einen fantastischen Pianisten, der alles spielen kann, was wir an ihr werfen, und die Gitarristen werden normalerweise in alternativen Akkorden mit Bleistift biefen, aber ich möchte die Dinge einfacher machen, indem ich wunderschöne Artenset -Noten in jedem von uns gewünschten Schlüssel zur Verfügung stehen.

Sagen Sie also, wir werden unsere ABCs singen. Zuerst werde ich die verfügbaren Quellentranskriptionen übernehmen und in ein Lilypond -Skript eingeben:

melody = \relative c' {
    c c g g
    a a g2
    f f e e
    d d c2 }

Ich möchte die Fähigkeit, dies automatisch zu transponieren. Wenn ich also das Ganze in 'G' möchte, wickle ich das Lied in einen transponischen Anruf wie so ein:

melody = \transpose c g \relative c' {
    c c g g
    a a g2
    f f e e
    d d c2 }

Was ich wirklich möchte, ist etwas für das 'g' zu ersetzen und die Ausgabe für Melodie mehrmals zu erzeugen. Einfache Lilypond -Variablen scheinen hier nicht zu funktionieren, und bisher habe ich mir eine Schema -Funktion nicht definiert, um dies zu tun.

Was ich momentan zurückgegriffen habe, ist, die obige Datei zu nehmen, twinkle.ly zu nennen und sie in ein M4 -Skript namens Twinkle.ly.m4 zu verwandeln, dessen Inhalt wie folgt aussieht:

melody = \transpose c _key \relative c' {
c c g g
a a g2
f f e e
d d c2 }

Ich kompile dann das Thema, indem ich die folgende Zeile ausführe:

> m4 -D _key=g twinkle.ly.m4 > twinkle_g.ly && lilypond twinkle_g.ly

Ich habe ein Makefile geschrieben, um dies für mich zu tun und Regeln für jedes Lied und jeden Schlüssel zu definieren, an dem ich interessiert bin.

FrageEs muss eine bessere Möglichkeit geben, dies zu tun. Angesichts der Tatsache, dass Lilypond das eingebettete Schema unterstützt, würde ich es vorziehen, keine darauf vorverarbeitete Makro zu verwenden. Hat jemand anderes eine Lösung für das gleiche Problem gefunden?

War es hilfreich?

Lösung

Sie können sich auf die Melodievariable beziehen und in den gewünschten Schlüssel transponiert werden:

melody = \relative c' { c8 e c e g4 g }
\score {
  \transpose c d \melody
}
\score {
  \transpose c e \melody
}
% etc.

Wenn Sie die Transpositionen als separate Dateien ausgeben möchten, setzen Sie sie in Buchblöcke ein.

Andere Tipps

Wenn Sie zwei Kopien desselben Fragments erstellen möchten, transponiert Sie und eine nicht, können Sie verwenden \displayLilyMusic. Zum Beispiel,

{
  \displayLilyMusic \transpose c a, { c4 e g a bes }
}

wird angezeigt

{ a,4 cis e fis g }

Kopieren Sie diese Ausgabe und fügen Sie sie ein, wo immer Sie möchten.

Verwenden Sie den freien Frescobaldi -Redakteur für Lilypond. Es bietet ein leistungsstarkes Transpositionswerkzeug.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top