2009-04-28 6 views
15

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

I LilyPond bin mit den Noten setzen für eine Chor Kirche auszuführen. Je nachdem, wer in einer bestimmten Woche verfügbar ist, werden die Titel in verschiedenen Tonarten wiedergegeben. Wir haben eine erstaunliche Pianistin, die alles spielen kann, was wir ihr zuwerfen, und die Gitarristen werden in der Regel alternative Akkorde anschlagen, aber ich möchte die Dinge einfacher machen, indem ich wunderschön gesetzte Noten in jeder beliebigen Tonart zur Verfügung stelle.

Also sag, dass wir unser ABC singen werden. Zunächst werde ich nehmen, was Quelle Transkriptionen zur Verfügung und geben Sie ihn in ein LilyPond Skript:

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

Ich möchte die Möglichkeit, diese automatisch zu transponieren, also wenn ich das Ganze in ‚G‘ möchte ich den Song in eine wickeln \ transponiert Aufruf wie folgt:

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

Was will ich wirklich etwas für den ‚g‘ ersetzen und die Ausgabe für Melodie mehrfach zu erzeugen. Einfache LilyPond-Variablen scheinen hier nicht zu funktionieren, und bisher konnte ich keine Schema-Funktion definieren, um dies zu tun.

Was ich im Moment zurückgegriffen habe, ist den oben genannten Datei nehmen, es twinkle.ly nennen und es in ein M4-Skript namens twinkle.ly.m4 Drehen, deren Inhalt wie folgt aussehen:

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

ich kompilieren dann das während Sache durch die folgende Zeile ausführen:

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

ich geschrieben habe ein Makefile für mich zu tun, Definition von Regeln für jeden Song, den ich habe und jeder Schlüssel mich interessiert.

Frage Es muss einen besseren Weg geben, darüber zu gehen. Da Lilypond ein eingebettetes Schema unterstützt, würde ich es vorziehen, kein Makro zu verwenden, das darauf vorverarbeitet wird. Hat jemand anderes eine Lösung für dieses Problem gefunden? die Umstellungen als separate Dateien, betten sie in \ Buchblöcke

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

Wenn Sie ausgeben möchten:

+0

Es wäre hilfreich, dies auch als lilypond zu markieren. – thSoft

+0

Haben Sie diese Frage auf der Mailingliste lilypond gestellt? Sie sind ziemlich gut dort ... – masher

Antwort

19

Sie können auf die Melodie Variable beziehen und sie haben in den gewünschten Tasten umgesetzt.

3

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

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

{ a,4 cis e fis g } 

Kopieren Sie diese Ausgabe und fügen Sie ihn anzuzeigen, wo immer Sie wollen.

Verwandte Themen