Struktur ueber mehrere Stimmen definieren

Begonnen von asmodeus, Samstag, 2. Juli 2022, 20:51

« vorheriges - nächstes »

asmodeus

Hallo zusammen,

ich setze oft Barockstuecke mit vier Stimmen in einem Staff, z.B. eine Gitarrentranskription von Couperin, Les Barricades Mysterieuses.
Dabei wuerde ich gerne die Struktur des Stueckes in etwa so definieren:

structure = {
  \repeat volta 2 {
    \rondo
  }
  \couplet_i
  \rondo
}

Meine Wunschsemantik davon: die Struktur ist fuer alle vier Stimmen damit definiert, aus den Stimmen der Einzelteile \rondo und \couplet_i wird eine Stimme zusammengefuegt. Mir ist leider nicht klar wie/ob das mit lilypond funktionieren koennte.

Bisher habe ich:
rondo_melody = { ... }
couplet_i_melody = { ... }

Das ganze dann nochmal fuer _upper, _lower und _bass, und fuer jeden Subteil (wie z.B. Couplet 2, 3).
Die fuege ich mit

melody = { \rondo_melody \couplet_i_melody }

zusammen und dupliziere es ebenso fuer die anderen Stimmen... ich suche nun sozusagen die "dynamische" Variante davon, d.h. ohne endlos viele Variablen zu definieren und auch die Struktur zu duplizieren.

Eine Zwischenloesung hatte ich mit einer Extrastimme nur fuer die Struktur und Wiederholungen, aber  Takte zaehlen und entsprechende stille Pausen einfuegen fand ich auch muehsam.

ich habe mir bereits \partcombine, \include und tags angeschaut und hielt es alles fuer nicht ganz geeignet.

Bin ich da komplett auf dem Holzweg? Vielleicht fehlt mir da die Praxis oder Fantasie. Wie koennte sowas aussehen?

Meine Herausforderung bei eigenen Scheme Experimenten: structure sollte sequential-music sein, aber so ein Objekt wie \rondo  also Liste von vier Stimmen "passt" da nicht rein.

Hier noch eine Skizze - das compiled natuerlich nicht.
Waere euch dankbar fuer Hinweise zu Alternativen oder Moeglichkeiten wie so etwas umgesetzt werden koennte!

Liebe Gruesse,
Achim

\version "2.22.2"
rondo = #(list
  #{
    \absolute { c' c' c' c' }
  #}
  #{
    \absolute { a a a a }
  #})

couplet_i = #(list
  #{
    \absolute { d d d d }
  #}
  #{
    \absolute { g g g g }
  #}
  )

mel = { }
bas = { }

structure = {
  \repeat volta 2 {
    \rondo % ist keine music expr
  }
  \couplet_i
  \rondo
}

% Magie!
\voicesFrom \structure \mel \bas

% mel ist jetzt { c' c' c' c' d d d d } mit entsprechender Wiederholung
% bas ist jetzt { a a a a g g g g } mit entsprechender Wiederholung

\score {
  \new Staff <<
    \context Voice = "melody" {
      \clef "G_8" \voiceOne
      \mel
    }
    \context Voice = "bass" {
      \clef "G_8" \voiceTwo
      \bas
    }
  >>
}