Autor Thema: Mehrere Sätze in einer Stimme wirklich separat als einzelne Stücke schreiben  (Gelesen 4373 mal)

juppes

  • Member
habe folgendes Problem: ich verwende ein Lilypond-Vorlage aus dem Handbuch, die es gestattet, eine Partitur zu erstellen und davon dann Einzelstimmen zu erstellen. Das geht mit mehreren Dokumenten: eines enthält die Noten, stimmenmäßig als Variable definiert, eines macht daraus die Partitur und wieder andere dann die Einzelstimmen. Das funktioniert wunderbar, aber eines stört daran:
Lilypond behandelt alle Sätze zusammen wie ein einziges Stück, d.h. nach dem Satzende kommt der Doppelstrich, und dann geht es auch gleich weiter, wenn es sich so ergibt, auch mitten in einer Zeile. In der Konsole sieht man schon bei der Codeverarbeitung an der Anzahl der Takte, daß auch mehrere Sätze als ein einziges Stück gelesen werden.
Ich habe dem entgegenzuwirken versucht, indem ich pro Satz in jeder Variablen einen separaten \relative-Block angelegt habe. Damit ein neuer Satz wenigstens nicht mitten in der Zeile anfängt, habe ich einen Zeilenumbruch zwischen die \relative-Blöcke gesetzt. Das Schema geht so:

Geigeeins = \newVoice
{
   \relative c'' { \time 4/4 c c c c \bar "|."} %erster Satz

 \break

   \relative { \time 6/8 c'' c, c c c \bar "|."} &zweiter Satz
}

Ich hätte gerne, daß der zweite Satz auf einer separaten Zeile beginnt (das tut er schon), aber ohne daß am Ende der vorhergehenden Zeile schon der Taktartenwechsel angezeigt wird, wie wenn es mitten im Stück wäre. Das läßt sich bestimmt machen, aber ich komme nicht darauf.

RobUr

  • Member
\score {
  { Noten 1. Satz }
}

\score {
  { Noten 2. Satz }
}

Grüße, Robert

juppes

  • Member
Danke, Robert, das Schema funktioniert natürlich prächtig, aber in meinem Fall führt es leider auch nicht weiter, denn meine Vorlage ist noch etwas komplizierter. Sie besteht aus mehreren Dokumenten, die sich aufeinander beziehen. Diese Vorlage habe ich nicht selber gestrickt, sondern aus dem Lern-Handbuch, glaube ich, übernommen.
Ich schreibe den stark abgespeckten Code von zweien davon mal hier hinein:

Erstens: "GraafDuoEconomique.ly"en
global = {
\key g \major

}


Geigeeins = \new Voice { \relative c'' {
\set Staff.instrumentName = #""  \time 4/4 \tempo "Allegro" d'4. c8 h4 h | %1
 \bar ":|" | %109
}

\break

\relative c'' { \set Score.currentBarNumber = #1  \time 6/8 \tempo "Rondo Allegretto"
h'8. c16 h8 h-. a-. g-. | %1

\bar "|."
}
}

 %**********************************

Geigezwei = \new Voice { \relative c'' {
\set Staff.instrumentName = #""
 \time 4/4 \tempo "Allegro" h,4. a8 g4 g | %1
\bar ":|" }

\break


\relative c'' { \set Score.currentBarNumber = #1  \time 6/8 \tempo "Rondo Allegretto"
g,8 h d g, h d | %1
\bar "|."} %**********************************
}
Noten = {
<<
\tag #'score \tag #'vn1 \new Staff { << \global \Geigeeins >> }
\tag #'score \tag #'vn2 \new Staff { << \global \Geigezwei >> }
>>
}

Zweitens: "score.ly"
\version "2.12.3"
\include "000_global.ly"
\include "deutsch.ly"

\include "GraafDuoEconomique Kopie.ly"

#(set-global-staff-size 13.5)
\score {
\new StaffGroup \keepWithTag #'score \Noten
\layout { indent = 0.0\cm }
\midi { }
}
Dann gibt es noch zwei weitere Dokumente, die die erste und zweite Stimme separat auswerfen.
Mir schwebt vor:
In einer "normalen" Notenausgabe kommt es schon mal vor, daß es einen kürzeren Satz gibt, der eine halbe Seite füllt. Der nächste ist länger und geht über eineinhalb Seiten. Zwischen beiden Sätzen gibt es einen etwas größeren Zeilenabstand, um den folgenden Satz optisch vom vorhergehenden zu trennen. Das ist das erste, was ich gerne erreichen wollte.
Das zweite ist, daß es am Ende des ersten Satzes keinen Hinweis auf die andere Taktart des Folgesatzes gibt. So etwas wird nur gemacht, wenn mitten im Satz die Taktart wechselt. Ansonten gibt es diese Ansage erst, wenn der neue Satz beginnt. Lilypond behandelt meine zwei Sätze aber offenbar immer noch wie einen einzigen, und ich verstehe nicht, warum. Das sieht man auch in der Konsole. Dein Hinweis geht, wenn ich alles in ein neues Dokument kopiere ohne diese ganzen Tags und Variablen.

Wie müßte ich nun nach der Logik von "score", die Du mir eben präsentiert hast, meinen Code in "GraafDuoEconomique" umbauen, damit ich das oben Beschriebene erreiche? Meine Versuche sind alle danebengegangen - komme einfach nicht drauf.

derHindemith

  • Member
Na, das ist ja scharf. Ich hab' mich gewundert woher du diese "000_global.ly" hast. Das benutze nämlich ich, und eine kurze google-suche hat ergeben das genau in diesem forum hab' ich dir meine 000_global.ly gegeben…

Hoffentlich hilft dies:
\include "000_global.ly"
%\version "2.12.3"
global = {
   \key g \major
}
     
     
GeigeeinsA = \new Voice \relative c'' {
   \set Staff.instrumentName = #""
   \time 4/4
   \tempo "Allegro"
   d'4. c8 h4 h | %1
   \bar ":|" | %109
}

%\break

GeigeeinsB = \new Voice \relative c'' {
   \set Score.currentBarNumber = #1
   \time 6/8
   \tempo "Rondo Allegretto"
   h'8. c16 h8 h-. a-. g-. \bar "|." %1
}

 %**********************************

GeigezweiA = \new Voice \relative c'' {
   \set Staff.instrumentName = #""
   \time 4/4 \tempo "Allegro" h,4. a8 g4 g \bar ":|" %1
}

%\break 


GeigezweiB = \relative c'' {
   \set Score.currentBarNumber = #1
   \time 6/8
   \tempo "Rondo Allegretto"
   g,8 h d g, h d \bar "|." %1
}

NotenA = {
   <<
      \tag #'scoreA \tag #'vn1A \new Staff { << \global \GeigeeinsA >> }
      \tag #'scoreA \tag #'vn2A \new Staff { << \global \GeigezweiA >> }
   >>
}

NotenB = {
   <<
      \tag #'scoreB \tag #'vn1B \new Staff { << \global \GeigeeinsB >> }
      \tag #'scoreB \tag #'vn2B \new Staff { << \global \GeigezweiB >> }
     
%%%%%%%%   score.ly %%%%%%

%{

Auskommentiert weil ich das alle in einer Datei habe

\include "000_global.ly"
\include "deutsch.ly"

\include "GraafDuoEconomique Kopie.ly"

%}

#(set-global-staff-size 13.5)
\score {
   \new StaffGroup \keepWithTag #'scoreA \NotenA
   \layout { indent = 0.0\cm }
   \midi { }
}

#(set-global-staff-size 13.5)
\score {
   \new StaffGroup \keepWithTag #'scoreB \NotenB
   \layout { indent = 0.0\cm }
   \midi { }
}

Und jetzt die Erklärung (und bitte vergib ael meine Fehler hier, Deutsch ist meine dritte Sprache, und das war ganz schon kompliziert für mich zu verstehen).

Wie du schon weisst, es kann mehrere \score-Blöcke in einer \book geben. (Notationsreferenz 3.1.2). Es ist eigentlich ganz einfach, wenn du willst das jedes Stück als einzelne Stück behandelt wird, mach's ein einzelnes Stück! Auch, das du mehrere Stücke in einer (oder mehrere) Dateien hast, wird hier auch nützlich einzelnen, einzigartig genannte Variabeln zu benutzen. Dann kannst du die alle mit \include in einer Datei zufügen ohne dabei Probleme zu haben. (Wenn auch aus zwei verschiedene Dateien zwei Variabeln mit dem gleichen Namen kommen, benutzt lilypond nur der letzte.) Mit allem schon gut getrennt, kannst du zusammenfügen in irgendwelche reihenfolge du willst. Da du immer eine neue \score benutzt, handelt lilypond die alle wie neue scores!

Letztens, da du alles mit einzelne \scores machst, wenn du willst, kannst du \markup \null so oft wie du willst dazwischen schieben um mehrer Platz zu machen.

Hoffentlich das hilft, ich verständlich war, und du damit weiter kommst.

James

RobUr

  • Member
Hallo juppes,

James hat bereits alles dazu gesagt:
Zitat von: derHindemith
wenn du willst das jedes Stück als einzelne Stück behandelt wird, mach's ein einzelnes Stück!
"Geigeeins" eben nicht hintereinanderweg mit Zeilenumbruch schreiben, sondern in zwei separate Codeblöcke "GeigeEinsA" und "GeigeEinsB".

Zitat von: derHindemith
Letztens, da du alles mit einzelne \scores machst, wenn du willst, kannst du \markup \null so oft wie du willst dazwischen schieben um mehrer Platz zu machen.
Hierzu gibt es ganz elegant die \paper-Variable before-title-space. Für einen Abstand von z.B. 2,5 cm zwischen der letzten Zeile eines Satzes und dem Beginn des folgenden Satzes würde man im \paper-Block des Folgesatzes folgendes notieren:
before-title-space = 25\mm
Viele Grüße, Robert

juppes

  • Member
Zitat
Na, das ist ja scharf. Ich hab' mich gewundert woher du diese "000_global.ly" hast. Das benutze nämlich ich, und eine kurze google-suche hat ergeben das genau in diesem forum hab' ich dir meine 000_global.ly gegeben…

ja klar, lieber James, 000_global.ly habe ich von Dir (neben einem Haufen anderer äußerst nützlicher Informantionen, wofür ich Dir heute noch dankbar bin. Ich sollte unseren Thread von damals nochmal ganz durchlesen, der ist fast zu einer Art Handbuch geworden.) - das gehört seitdem zu meiner Standardausrüstung. So etwas Praktisches muß man immer dabeihaben...

Und für eine Drittsprache ist Dein Deutsch mehr als brauchbar, auch wenn es grammatisch nicht immer einwandfrei ist. Aber die Botschaft kommt an, und das ist doch die Hauptsache!

herzlichen Dank - ich werde heute abend noch mal an meinem Projekt basteln und es entsprechend bearbeiten. Melde mich dann wieder...

juppes

  • Member
hallo Robert,

wie immer vielen, vielen Dank. Was wäre dieses Forum hier ohne Deine vielen interessanten und hilfreichen Beiträge. Heute abend werde ich mich hinsetzen und mein Projekt umarbeiten und sehen, was passiert.

Ich wäre bestimmt auch irgendwann auf die von James und Dir beschriebene Lösung gekommen. Es hätte mich aber wohl noch einiges an Zeit gekostet, schätze ich. Die Feinheiten von einem mächtigen Programm erschließt man sich nicht mal so eben, aber die Wege, die andere schon mal gebahnt haben, lasse ich mir gerne zeigen. Einer muß der Erste sein, das zu tun, aber es muß ja nicht jeder Einzelne mit Versuch und Irrtum vor sich hinwurschteln. Ich frage hier auch nur, wenn ich nach einiger Zeit des Probierens und Suchens nicht mehr weiterkomme.

Melde mich, wenn es geklappt hat.

juppes

  • Member
Re:Mehrere Sätze in einer Stimme wirklich separat als einzelne Stücke schreiben
« Antwort #7 am: Dienstag, 20. Juli 2010, 10:43 »
lieber Robert,

die "Umbauarbeiten" an meinem Projekt sind beendet, aber ein Rätsel ist geblieben: Deine elegante Methode (elegant, weil man selber den Abstand bestimmen kann) mit "\paper {before-title-space = 25\mm}" funktioniert bei mir nicht.

Wenn ich Dich richtig verstanden habe, dann müßte mein Code so aussehen:
\version "2.12.3"
\include "000_global.ly"
\include "deutsch.ly"

\include "GraafDuoEconomique.ly"

#(set-global-staff-size 13.5)
\score {
\new StaffGroup \keepWithTag #'scoreA \NotenA
\layout { indent = 0.0\cm }
\midi { }
}
&&&&\markup \null
\score {
\new StaffGroup \keepWithTag #'scoreB \NotenB
\layout { indent = 0.0\cm
}

\midi { }
}
\paper {before-title-space = 25\mm}

Das hier ist das Dokument, welches mir die Partitur erzeugt, wie Du sehen kannst. Setze ich das, ist der Abstand zwischen den Systemen an der entscheidenden Stelle genau gleich wie vorher. Erst wenn ich das von James vorgeschlagene "\markup \null" entkommentiere, kriege ich eine (für meinen Geschmack eine allerdings zu große) Leerzeile ins Dokument. Ich habe "\paper {before-title-space = 25\mm}" schon überallhin verschoben, wo ich vermutete, daß es sonst noch stehen könnte - auch in das Dokument, das die Noten enthält, aber die Auswirkungen waren jedesmal gleich Null. Offenbar habe ich etwas nicht richtig verstanden. Es gab auch bei der Verarbeitung niemals Fehlermeldungen.
Was also habe ich nicht kapiert?

RobUr

  • Member
Re:Mehrere Sätze in einer Stimme wirklich separat als einzelne Stücke schreiben
« Antwort #8 am: Dienstag, 20. Juli 2010, 22:36 »
Hallo juppes,

wundert mich zunächst auch, aber nach kurzem Probieren ist es raus: es fehlt noch ein \header-Block im entsprechenden \score-Block mit zumindest einer belegten piece-Variable, z.B. \header { piece = "2. Satz" } oder \header { piece = " " }, um Lily beizubringen, dass ein neuer Satz (piece) beginnt. Dann wird auch before-title-space „aktiviert“. Dein Beispiel müsste demzufolge so ergänzt werden (im 2. \score-Block):

% !TEX TS-program = Lilypond
\version "2.12.3"

\include "000_global.ly"
\include "deutsch.ly"

\include "GraafDuoEconomique.ly"

#(set-global-staff-size 13.5)

\score {
  \new StaffGroup \keepWithTag #'scoreA \NotenA
  \layout { indent = 0.0\cm }
  \midi { }
}

%\markup \null

\score {
  \new StaffGroup \keepWithTag #'scoreB \NotenB
  \layout { indent = 0.0\cm
  \header { piece = " " }
  \midi { }
}

\paper { before-title-space = 25\mm }

Merke: Wenn gleiche Variablen mehrfach definiert werden, überschreibt die zuletzt definierte die vorherige(n). Also aufpassen, ob in den \include-Dateien schon etwas definiert wurde, das man plötzlich vermisst ;) Im Prinzip kann aber \paper überall außerhalb eines \score-Blocks und innerhalb eines \bookpart-Blocks definiert werden.

Einen detaillierten Beitrag zur Struktur hatte ich mal in Probleme mit Titelblatt verfasst – die Lektüre lohnt sich vielleicht 8)

Viele Grüße, Robert

juppes

  • Member
Re:Mehrere Sätze in einer Stimme wirklich separat als einzelne Stücke schreiben
« Antwort #9 am: Dienstag, 20. Juli 2010, 23:21 »
hallo James, hallo Robert,

muß mich nochmals kurz melden, denn jetzt hab ich alles "gebacken" bekommen. Gut, daß Ihr mir noch ein bißchen Zeit zum Nachdenken gelassen habt ;)
Ich habe die Lösung gefunden, und die war, wie Ihr ja eh wißt, daß ich sowohl "\markup \null" als auch "\paper { before-title-space = xx\mm}" brauche. Auf die Idee bin ich eben erst gekommen (es hat mir einfach keine Ruhe gelassen). Ich hatte die ganze Zeit geglaubt, daß ich nur entweder das eine oder das andere brauche.

Damit wäre dieses Problem dann zu meiner vollkommenen Zufriedenheit gelöst. Habe wieder etwas mehr in meinem "Werkzeugkasten"...

Nochmal vielen Dank für die Denkanstöße an Euch:)