Autor Thema: \tempo: Rechnen in Lilypond?  (Gelesen 1772 mal)

prott

  • Member
\tempo: Rechnen in Lilypond?
« am: Montag, 28. Mai 2012, 10:36 »
In älterer Musik gibt es häufiger mitten im Stück "Takt"wechsel, wobei die Temporelation feststeht. Auf der anderen Seite möchte ich gelegentlich den Grundschlag anpassen können. Am liebsten hätte ich dafür aber nicht zwei bis siebenundzwanzig Stellen, sondern nur eine einzige. Bisher sieht mein Code für einen Block, der in jede Stimme eingefügt wird, immer so aus:

  \maggiore
  \tempo 2=86
  \skip \breve*81
  \tripla
  \tempo 1=129
  \skip \breve.*8

Für jeden einzelnen Abschnitt gibt es drei Zeilen: \maggiore und \tripla sind eigene Makros, die eine neue Spacing-Sektion einleiten und das richtige "Takt"-Symbol für den neuen Abschnitt erzeugen. Die Metronomangabe selbst wird nicht gedruckt, aber dafür bestimmt sie die Notenwerte im MIDI-File. An dieser Stelle würde ich nun lieber etwas schreiben wie
beat=#43
...
  \maggiore
  \tempo 2=\beat*2
  \skip \breve*81
  \tripla
  \tempo 1=\beat*3
  \skip \breve.*8

Dann hätte ich ein neues Tempo für das Stück mit nur einer einzigen Änderung. Geht so etwas überhaupt? Geht es auch ohne Scheme?

harm6

  • Member
Re: \tempo: Rechnen in Lilypond?
« Antwort #1 am: Dienstag, 29. Mai 2012, 22:06 »
Hallo,

Zitat
Geht es auch ohne Scheme?

Naja, scheme bzw guile ist nun mal die LilyPond-Erweiterungssprache.

Insofern: falls die MetronomeMark sowieso nicht gedruckt werden soll, kannst Du
\set Score.tempoWholesPerMinute = ... 
verwenden. Dann kann man folgendes machen:

\version "2.14.2"

#(define factor-05 (/ 1 2))
#(define factor-1 1)
#(define factor-2 2)
#(define factor-3 3)
#(define factor-4 4)

\score {
        \relative c' {
        \set Score.tempoWholesPerMinute = #(ly:make-moment (* 40 factor-1) 2)
        c8 d e f
        \set Score.tempoWholesPerMinute = #(ly:make-moment (* 40 factor-05) 2)
        c d e f
        \set Score.tempoWholesPerMinute = #(ly:make-moment (* 40 factor-4) 2)
        c d e f
        \set Score.tempoWholesPerMinute = #(ly:make-moment (* 40 factor-2) 2)
        c d e f
        \set Score.tempoWholesPerMinute = #(ly:make-moment (* 40 factor-3) 2)
        c d e f
        }
        \midi {}
}

Funktioniert auch mit "2.15.39"

Beachte: Du kannst nur mit ganzen Zahlen arbeiten (siehe factor-05 als Definition von 0.5)

HTH,
  Harm


prott

  • Member
Re: \tempo: Rechnen in Lilypond?
« Antwort #2 am: Sonntag, 10. Juni 2012, 11:21 »
Erst gestern bin ich dazu gekommen, das auszuprobieren: Danke, es funktioniert wunderbar.

Zu Scheme/Guile: Bei etwas, was so sehr Programmiersprache ist, wie Lilypond, wünsche ich mir eigentlich, daß es Turing-vollständig ist und man keine zwei Sprachen lernen muß, um eine Sache zu machen.