Autor Thema: Abwechselnde Chor- und Solostücke  (Gelesen 2974 mal)

mgd

  • Member
Abwechselnde Chor- und Solostücke
« am: Montag, 1. Juni 2015, 19:12 »
Hallo Forum !

Ich habe ein Stück, in welchem abwechselnd der Chor und Einzelstimmen singen. Bei jedem Wechsel habe ich ein \break in den Noten und fange im Score einen neuen Staff bzw. Choirstaff an. Der 2. Choirstaff bekommt allerdings vorne eine doppelte Klammer davor, wie der folgende minimalistische Code zeigt:\version "2.19.21"

\score {
  {
  \new ChoirStaff <<
    \new Staff <<
      \new Voice { c''1 \break }
    >>
    \new Staff <<
      \new Voice { e'1 }
    >>
  >>
  \new ChoirStaff <<
    \new Staff <<
      \new Voice { c''1 }
    >>
    \new Staff <<
      \new Voice { c'1 }
    >>
  >>
  }
}  % End score

Warum ist das so bzw. wie kann ich das verhindern ?

Liebe Grüße,
Michael

fugenkomponist

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #1 am: Montag, 1. Juni 2015, 19:27 »
Ich habe zwei Fragen, die jeweils eine Lösung implizieren, angesichts der Tatsache, dass du sowieso an den Stellen Zeilenumbrüche haben willst:

• Warum nimmst du nicht die selben Staffs weiter? Den shortInstrumentName ändern, schon hast du alles, was du brauchst, oder? Funktioniert aber nur für gleich viele Solisten in gleichen Schlüsseln wie Chorstimmen.
• Kennst du \RemoveEmptyStaves? Damit werden Pausenzeilen versteckt. Standardmäßig einzelne Staffs, aber per Keep_alive_together_engraver auch ganze ChoirStaffs. Ich hab außerdem noch ein bisschen aufgeräumt; explizite Voices braucht man z. B. fast nie:\version "2.19.20"

\score {
  <<
    \new ChoirStaff \with {
      instrumentName = "Chor"
      shortInstrumentName = "Chor"
    } <<
      \new Staff {
        c''1 \break
      }
      \new Staff {
        e'1
      }
    >>
    \new ChoirStaff \with {
      shortInstrumentName = "Soli"
    } <<
      \new Staff {
        R1 c''
      }
      \new Staff {
        R1 R
      }
    >>
  >>
  \layout {
    \context {
      \ChoirStaff
      \RemoveEmptyStaves
      \override VerticalAxisGroup.remove-first = ##t
      \consists Keep_alive_together_engraver
    }
  }
}

Edit: Das hat noch nen Vorteil: Auch die Taktart steht nicht neu da ;) Und es ist glaub ich wesentlich einfacher bzw. der Code bildet die Realität (Chor hat Pause, also schreib ich ne Pause) eher ab. Insgesamt glaub ich, dass das Hintereinanderstellen von ChoirStaffs etc. nicht so gedacht ist in LilyPond, deshalb würd ich das „Fehlverhalten“ auch nicht unbedingt als Bug sehen.

Ach, und eine Erklärung hab ich noch vergessen: \RemoveEmptyStaves wirkt standardmäßig erst ab der zweiten Zeile. Ist z. B. in Orchesterpartituren so üblich, weil man dann sieht, wer während eines Satzes alles gebraucht wird, auch wenn er am Anfang noch nicht spielt (insbesondere oft Schlagwerk und Blech). Dagegen hilft die Zeile mit remove-first.
« Letzte Änderung: Montag, 1. Juni 2015, 19:34 von fugenkomponist »

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #2 am: Montag, 1. Juni 2015, 22:46 »
Lieber fugenkomponist,

vielen Dank für deine Ideen.

Den gleichen Staff weiter zu benutzen scheint mir nicht so geeignet, weil die Struktur wie folgt aussieht:
SATB Chor, SATB Chor Unisono mit Piano/Orgel (also 1 System plus Piano), SATB Chor a capella, SATB Chor mit Piano/Orgel, etc. - so in der Art. Das habe ich der Einfachheit halber weg gelassen, weil die doppelte Klammer auch in dem deutlich vereinfachten Beispiel auftrat.

RemoveEmptyStaves ist möglicherweise der Weg, den ich beschreiten sollte. Mir missfällt aber, für die ganzen anderen Hilfssysteme die ganzen Pausen definieren zu müssen. Das fühlt sich nicht richtig an.

Deshalb mein Ansatz mit den { ... } Klammern, die ja sequentielle Ereignisse beschreiben. Im anderen Falle mit << ... >> beschreibe ich parallele Ereignisse.

Von der Struktur her handelt es sich um sequentielle Ereignisse. Diese über Parallelen mit Mengen an Pausen zu definieren sieht nach einem Umweg aus. Wie gesagt, mag sein, dass das bei der Art, wie Lilypond arbeitet der aktuell notwendige Weg ist. Aber es fühlt sich einfach falsch an.

Mir ist auch so erst einmal nicht einleuchtend, warum 2 sequentielle ChoirStaff zu den in meinem originalen Beispiel zu sehen doppelten Klammern führen. Solange es dafür keine (musikalische) Begründung gibt, sieht mir das sehr nach einem Bug aus. Schließlich ist der erste ChoirStaff nach dem << ... >> beendet und sollte keinerlei Auswirkungen auf was- auch-immer-danach-kommt haben.

Liebe Grüße,
Michael

« Letzte Änderung: Montag, 1. Juni 2015, 22:48 von mgd »

harm6

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #3 am: Dienstag, 2. Juni 2015, 00:05 »
Hallo Michael,

Du kreierst laufend neue Kontexte während Du Dich in sequentieller Musik befindest.
LilyPond fügt aber neue Kontexte ab Staffniveau immer ganz "unten" an. Deutlich zu sehen wenn Du das \break mal rausnimmst.
Die zwei Klammern rühren dann daher, daß zu einem ChoirStaff mit "nix drin" ein zweiter hinzu kommt.
Eigentlich willst Du aber den vorangegangen Kontext wieder aufgreifen.
Dazu benutze \context nicht \new

\version "2.19.21"

\score {
  {
  \new ChoirStaff = "cs" <<
    \new Staff = "s1" <<
      \new Voice { c''1 \break }
    >>
    \new Staff  = "s2" <<
      \new Voice { e'1 }
    >>
  >>
 
  \context Staff { cis''1 \break }
 
  \context ChoirStaff = "cs" <<
    \context Staff = "s1" <<
      \new Voice { c''1 }
    >>
    \context Staff = "s2" <<
      \new Voice { c'1 }
    >>
  >>
  }
}  % End score

HTH,
  Harm
« Letzte Änderung: Dienstag, 2. Juni 2015, 00:07 von harm6 »

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #4 am: Dienstag, 2. Juni 2015, 02:46 »
Vielen Dank Harm,

wieder ein klein wenig schlauer geworden :)

Funktioniert so, wie ich mir das vorstelle.

Vielen Dank,
Michael

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #5 am: Dienstag, 2. Juni 2015, 11:42 »
Liebes Forum,

wenn die Fälle komplexer werden, entstehen neue Probleme (wie so häufig).

Ich habe inzwischen angefangen, die diversen Contexte weiter zu verwenden, habe aber damit nun ein Reihenfolge-/Anordnungsproblem. Zur Illustration der folgende Code:
\version "2.19.21"

\paper {
  min-systems-per-page = #4
}

\score {
  {
  <<
    \new Staff = "sa" <<
      \clef "treble"
      \new Voice = "SopranoI" { \mark \markup \fontsize #-2 Unison c''1 \break }
    >>
    \new PianoStaff = "orgel" <<
      \new Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperI" { <e' g' c''>1 }
      >>
      \new Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerI" { <c g' c'>1 }
      >>
    >>
  >>
  \new ChoirStaff = "satb" <<
    \context Staff = "sa" <<
      \clef "treble"
      \new Voice = "SopranoII" { \mark \markup \fontsize #-2 SATB c''1 \break }
    >>
    \new Staff = "tb" <<
      \clef "bass"
      \new Voice = "TenorII" { e1 }
    >>
  >>
  <<
    \context Staff = "tb" <<
      \clef "bass"
      \new Voice = "TenorIII" { \mark \markup \fontsize #-2 TB c'1 \break }
    >>
    \context PianoStaff = "orgel" <<
      \context Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperII" { <e' g' c''>1 }
      >>
      \context Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerII" { <c g c'>1 }
      >>
    >>
  >>
  <<
    \context ChoirStaff = "satb" <<
      \context Staff = "sa" <<
        \clef "treble"
        \new Voice = "SopranoIV" { \mark \markup \fontsize #-2 SATB-Orgel c''1 }
      >>
      \context Staff ="tb" <<
        \clef "bass"
        \new Voice = "TenorIV" { c'1 }
      >>
    >>
    \context PianoStaff = "orgel" <<
      \context Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperIII" { <e' g' c''>1 }
      >>
      \context Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerIII" { <c g c'>1 }
      >>
    >>
  >>
  }
}  % End score

Es gibt hier mehrere Probleme. Das wichtigste:
Ganz unten "SATB-Orgel" hat den SA-Staff unten angehängt. Ich vermute das liegt daran, dass vorher TB einfach weiterverwendet wird, wie man auch an der fehlenden Taktart sehen kann. Das war auch beim Übergang von SATB zu TB der Fall. Aber der SA-Staff ich war vorher schon da, nämlich als Teil von SATB, wird aber offenbar doch neu erzeugt (oder so interpretiere ich das Erscheinen der Taktart Markierung).

Nun möchte ich aber natürlich unten gern den SA-Staff oberhalb des TB-Staff haben, schließlich gehört er ja in den SATB-ChoirStaff hinein.

Ferner sind die Gruppenklammern vor TB IMO falsch. Das sollten so Aussehen, wie oben bei Unison. Analog gilt das auch unten für SATB-Orgel. Die Gruppierungsklammer für SATB sollte den PianoStaff nicht einschließen, wobei es hier in gewisser Weise noch sinnhaft ist, weil ja die Staffs SA und TB davon umschlossen sind, was Sinn ergibt.

Wie erreiche ich das von mir gewünschte Aussehen/Verhalten ?
Und warum wird überhaupt der ChoirStaff auseinander gerissen ?

Liebe Grüße,
Michael

fugenkomponist

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #6 am: Dienstag, 2. Juni 2015, 11:53 »
Warum die Klammern so sind, wie sie sind, weiß ich nicht. Auch nicht, warum sa falsch positioniert wird. Aber gegen letzteres weiß ich eine Abhilfe: Schreib in Zeile 53\context Staff = "sa" \with { alignAboveContext = "tb" }
Es sieht aber (wegen der neuen Taktangabe) so aus, als würde sa neu erstellt werden, obwohl du \context benutzt.

Ich habe die Vermutung, dass tb beim ersten Mal als Teil von satb erstellt wird, deshalb wird satb dann immer automatisch implizit zum Leben erweckt, wenn tb dran ist, daher die Klammer. Ähnlich wie LilyPond implizit aus { c } sowas in der Art von \new Score { \new Staff { \new Voice { c } } } macht.

Ich würde dir immer noch dazu raten, \RemoveEmptyStaves zu verwenden. Dadurch wird der Code meiner Meinung nach sehr viel übersichtlicher (ich blick da jetzt schon nicht durch, aber das Stück soll ja noch länger werden und Noten enthalten), und du hast all diese Probleme nicht. Weder mit Klammern, noch mit falscher Anordnung, noch mit zusätzlichen Taktartangaben.

Und zu deinem Einwand, dass die Pausen sich nicht richtig anfühlen: Für den Chor kann ich das verstehen, wenn du zwischen Unisono und vierstimmig wechselst. Aber denk dir einfach den vierstimmigen Chor und den unisono-Chor als zwei verschiedene, dann geht das (oder unisono als „alle singen den Sopran mit“). Und für die Orgel ist das meiner Meinung nach richtig: Sie hat nun mal Pause, dann kann man das auch hinschreiben ;) Und es ist ja kein großer Aufwand, wenn man Mehrtaktpausen wie R1*8 verwendet.

Ach ja, eine Anmerkung noch zum Thema Bug oder nicht: Wenn man eine Kantate oder ein Oratorium oder sowas mit wechselnden Besetzungen hat, dann sind das ja quasi mehrere Sätze. Die werden dann in der Regel auch in mehrere \scores gepackt, schon hat man all diese Probleme nicht mehr. Es ist einfach äußerst ungewöhnlich, in ein und demselben score mehrere Staffs etc. nacheinander zu haben, weil Musik erstmal ja gleichzeitig passiert.

Das ist aber meine ganz persönliche Meinung.
« Letzte Änderung: Dienstag, 2. Juni 2015, 12:07 von fugenkomponist »

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #7 am: Dienstag, 2. Juni 2015, 14:00 »
Vielen Dank fugenkomponist,

zumindest die Reihenfolge der Staves ist damit so, wie gewünscht. Ich habe das \RemoveEmptyStaves ausprobiert und es hat primär einiges an vertikalem Leerraum, den ich mir bis dato nicht hatte erklären können, entfernt. Möglicherweise braucht Lilypond hier einfach den zusätzlichen Hinweis. Vielen Dank, mir dies nochmal nahegelegt zu haben :)

Jetzt möchte ich "nur" noch verstehen, warum die falsche Gruppierungsklammer erzeugt wird, und warum (wenn die entsprechende Vermutung korrekt ist) der Staff SA neu erzeugt wird. Beides ist ja ev. miteinander verbunden.

Liebe Grüße,
Michael

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #8 am: Dienstag, 2. Juni 2015, 16:34 »
Wie ich gerade fest gestellt habe, muss das \with { alignAboveContext = "tb" } auch zum Gesangstext (\Lyrics) hinzugefügt werden, der "eigentlich" an den Staff SA gebunden ist.

Alles manuell korrigierbar, keine Frage.

Ich finde aber, lilypond sollte das automatisch richtig machen. Genau deshalb gebe ich mir Mühe, die Struktur der Musik ausführlich zu beschreiben. Oder habe ich ein wesentliches Detail vergessen ?

Zum Herumspielen hier der mit \Lyrics aktualisierte Testcase.
\version "2.19.21"

\paper {
  min-systems-per-page = #4
}

\score {
  {
  <<
    \new Staff = "sa" <<
      \clef "treble"
      \new Voice = "SopranoI" { \mark \markup \fontsize #-2 Unison c''1 \break }
    >>
    \new PianoStaff = "orgel" <<
      \new Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperI" { <e' g' c''>1 }
      >>
      \new Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerI" { <c g' c'>1 }
      >>
    >>
  >>
  \new ChoirStaff = "satb" <<
    \context Staff = "sa" <<
      \clef "treble"
      \new Voice = "SopranoII" { \mark \markup \fontsize #-2 SATB c''1 \break }
    >>
    \new Staff = "tb" <<
      \clef "bass"
      \new Voice = "TenorII" { e1 }
    >>
  >>
  <<
    \context Staff = "tb" <<
      \clef "bass"
      \new Voice = "TenorIII" { \mark \markup \fontsize #-2 TB c'1 \break }
    >>
    \context PianoStaff = "orgel" <<
      \context Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperII" { <e' g' c''>1 }
      >>
      \context Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerII" { <c g c'>1 }
      >>
    >>
  >>
  <<
    \context ChoirStaff = "satb" <<
      \context Staff = "sa" \with { alignAboveContext = "tb" } <<
        \clef "treble"
        \new Voice = "SopranoIV" { \mark \markup \fontsize #-2 SATB-Orgel c''1 }
        \new Lyrics \with { alignAboveContext = "tb" } \lyricsto "SopranoIV" { words }
      >>
      \context Staff ="tb" <<
        \clef "bass"
        \new Voice = "TenorIV" { c'1 }
      >>
    >>
    \context PianoStaff = "orgel" <<
      \context Staff = "upper" <<
        \clef "treble"
        \new Voice = "OrgelUpperIII" { <e' g' c''>1 }
      >>
      \context Staff = "lower" <<
        \clef "bass"
        \new Voice = "OrgelLowerIII" { <c g c'>1 }
      >>
    >>
  >>
  }
}  % End score

mgd

  • Member
Re: Abwechselnde Chor- und Solostücke
« Antwort #9 am: Mittwoch, 3. Juni 2015, 10:37 »
Hallo Forum,

ich habe jetzt eine Variante gefunden, die so aussieht, wie ich mir das vorstelle.\version "2.18.2"

\paper {
  min-systems-per-page = #4
}

\score {
  {
    <<
      \new Staff = "sa" <<
        \clef "treble"
        \new Voice = "SopranoI" { \mark \markup \fontsize #-2 Unison c''1 \break }
      >>
      \new PianoStaff = "orgel" <<
        \new Staff = "upper" <<
          \clef "treble"
          \new Voice = "OrgelUpperI" { <e' g' c''>1 }
        >>
        \new Staff = "lower" <<
          \clef "bass"
          \new Voice = "OrgelLowerI" { <c g c'>1 }
        >>
      >>
    >>
    <<
      \new ChoirStaff = "satb" <<
        \context Staff = "sa" <<
          \clef "treble"
          \new Voice = "SopranoII" { \mark \markup \fontsize #-2 SATB c''1 \break }
        >>
        \new Staff = "tb" <<
          \clef "bass"
          \new Voice = "TenorII" { e1 }
        >>
      >>
    >>
    <<
      \context Staff = "tb" <<
        \clef "bass"
        \new Voice = "TenorIII" { \mark \markup \fontsize #-2 TB c'1 \break }
      >>
      \context PianoStaff = "orgel" <<
        \context Staff = "upper" <<
          \clef "treble"
          \new Voice = "OrgelUpperII" { <e' g' c''>1 }
        >>
        \context Staff = "lower" <<
          \clef "bass"
          \new Voice = "OrgelLowerII" { <c g c'>1 }
        >>
      >>
    >>
    <<
      \context ChoirStaff = "satb" <<
        \context Staff = "sa" \with { alignAboveContext = "tb" } <<
          \clef "treble"
          \new Voice = "SopranoIV" { \mark \markup \fontsize #-2 SATB-Orgel c''1 }
          \new Lyrics \with { alignAboveContext = "tb" } \lyricsto "SopranoIV" { words }
        >>
        \context Staff ="tb" <<
          \clef "bass"
          \new Voice = "TenorIV" { c'1 }
        >>
      >>
      \context PianoStaff = "orgel" <<
        \context Staff = "upper" <<
          \clef "treble"
          \new Voice = "OrgelUpperIII" { <e' g' c''>1 }
        >>
        \context Staff = "lower" <<
          \clef "bass"
          \new Voice = "OrgelLowerIII" { <c g c'>1 }
        >>
      >>
    >>
  }
}  % End score

Der Unterschied zur vorherigen Version ist, dass ich das erstmalige Auftreten des SATB-ChoirStaff zusätzlich in doppelte spitze Klammern"<<" und ">>" verpackt habe. Danach klappt es. Ohne scheint irgendwie dieser Choir Context bei allen anderen Akkoladen noch mit herumzuschwirren (das ist jedenfalls meine Vermutung).

Über die automatische Anordnung der einzelnen Stimmen ganz unten in "SATB-Orgel" bin ich noch immer nicht glücklich (halte sie für milde gesagt "unerwartet"), aber ich kann mit Einfügen von alignAboveContext leben.

Liebe Grüße,
Michael