Projekt strukturieren

Begonnen von markusw, Samstag, 20. Juli 2024, 18:10

« vorheriges - nächstes »

markusw

Hallo miteinander!

Ich bin mit einem Projekt zugegangen, bei dem ich eine Reihe von "scores" in Buchteilen habe möchte. In etwa so:

\bookpart {
  \header {
    title = "Buchtitel"
    subtitle = "Erster Teil"
  }
  \scoreA { ... }
  \scoreB { ... }
  ...
}
\bookpart {
  \header {
    subtitle = "Zweiter Teil"
  }
  \scoreC { ... }
  \scoreD { ... }
  \scoreE { ... }
  ...
}

Um nicht alles in einer Datei zu haben, würde ich die einzelnen "\scores" gerne in separate Dateien auslagern und dann mit so etwas wie
 \include "score_A_Datei.ly"der Reihe nach einbinden. Jedes "\score" hat auch einen eigenen "\header"-Abschnitt.
Aber so einfach funktioniert das leider nicht, da "\include"-Befehle nicht auf jeder Ebene eingefügt werden können. Auch ausprobiert, ein "\score" in eine Variable am Ende von "score_X_Datei.ly" schreiben:
myScore = \score { ... }

und dann "myScore" in der Master-Datei benutzen, dann in der nächsten Datei "myScore" neue definieren, wieder ausgeben usw. Das will aber auch nicht.

Gibt es da eine elegante Möglichkeit? Eventuell sehe ich auch den Wald vor lauter Bäumen nicht mehr.

Herzlichen Dank und schöne Grüße
Markus

harm6

Hallo,

ZitatAber so einfach funktioniert das leider nicht, da "\include"-Befehle nicht auf jeder Ebene eingefügt werden können.

Das ist so nicht richtig. "\include"-Befehle können tatsächlich überall eingefügt werden.
Das Problem liegt meistens daran was Du inkludierst, denn ly-Definitionen wie
mus = { ... }
dürfen nicht innerhalb von \book(part) verwendet werden. Wenn Dein inkludiertes file eine solche Definition enthält gibts den error.
Es gibt workarounds dafür, allerdings bin ich skeptisch was deren Stabilität angeht, insofern eine andere Möglichkeit:

Kreiere ein file in dem nur die Musik für den ersten score steht:
Zitat von: score-1-mus.ly{ \relative { b4 c d e }
Kreiere ein file für den score:
Zitat von: score-1.ly\score {
  \include "score-1-mus.ly"
  %% score-header:
  \header { opus = "opus 1" }
}
Kreiere das master-file:
Zitat von: scores-bookparts.ly\bookpart {
  %% book-header:
  \header { title = "one" }
  \include "score-1.ly"
}
%% Oder überspringe den zweiten Schritt und mache direkt:
\bookpart {
  %% book-header:
  \header { title = "two" }
  \score {
    \include "score-1-mus.ly"
    %% score-header:
    \header { opus = "opus 2" }
  }
}
Die files score-1-mus.ly bzw score-1.ly könntest Du auch in einen subfolder stecken und dann mit entsprechendem path inkludieren.

Mit den headern, score- vs bookheader, könnte es eventuell Probleme geben. Du hast nur geschrieben:
ZitatJedes "\score" hat auch einen eigenen "\header"-Abschnitt.
aber nicht, ob Du es als score- oder bookheader gemacht hast...

HTH,
  Harm

markusw

Vielen Dank!

Aber leider funktioniert das auch noch nicht. Die "Musik" baue ich zunächst über eine Reihe von Definitionen a la "mus = {}" auf, um auch hier die Übersicht zu behalten. Diese Definitionen kann ich aber nicht mit "\include" einbinden, wie auch schon oben geschrieben, wenn ich das in einer book oder bookpart Umgebung mache, die ich aktiv "aufgemacht" habe. D.h. wenn ich nur ein "score" nach dem anderen  generiere, ohne vorher book, bookpart, score angefangen zu haben, klappt es.


Noch mal schematisch meine Vorgehensweise

master.ly:
\include "00Einleitung/musik.ly
\include "01Chor/musik.ly
% usw.


"00Einleitung/musik.ly":
myStaff = { a b c}
% weitere Definitionen
% am Ende von musik.ly
\include "../typeset.ly"

"typeset.ly" ist für alle Teile immer gleich:

\score {
  \new GrandStaff {
    <<
      \new Staff {
        \myStaff
      }
      % weitere Systeme
      % ...
    >>
  }
}


Rudi Guggt

Hallo,

ich arbeite (zu) wenig mit Includes, daher kann es sein, dass ich jetzt Unsinn schreibe.

Include-Dateien, die per \include ... eingebunden werden, sind bloß ausgelagerte Abschnitte. D.h. der Inhalt der Datei wird von Lilypond genau an der Stelle hineingebastelt ohne weitere Programm-Magie.

Bei deinem Typeset.ly scheint es mir, als ob du dort irgendeinen Ersetzungsvorgang erwartest. Das passiert so nicht, sondern du musst die Struktur in der Master-Datei haben und kannst dort an passenden Stellen die entsprechende Musik hinein-inkludieren.

Gruß
Rudi

markusw

#4
Guten Abend allerseits!

genau, "myStaff" wird durch das ersetzt, was ich zuvor in "00Einleitung/musik.ly" als "myStaff" definiert habe. Der Inhalt von "typeset.ly" kann auch in der Masterdatei stehen, aber in dem Fall muss ich das nach jedem "\include" explizit wiederholen, oder einbinden. Das hat mir aber nicht so sehr gefallen. Ich fände es gut, wenn die Masterdatei wirklich nur einen Teil nach dem anderen einbindet, also

\include "00Einleitung/musik.ly"
\include "00Ouverture/musik.ly"
% usw.

Was das Einbinden betrifft, wurde ja oben schon geschrieben, dass ein "\include" überall benutzt werden kann, aber es kommt, wie so oft im Leben, auf den Inhalt (der eingebundenen Datei) an. Da ist dann leider nicht mehr alles möglich.

harm6

#5
Hallo Markus,

wir haben ja bereits festgestellt, daß Dein derzeitiges setup nicht so funktioniert wie erhofft, Du wirst also etwas ändern müssen...

Zunächst zu den bookparts.
\bookpart hat zwei wesentliche features:
- Es sind book-header für jeden \bookpart möglich.
- Am Ende eines \bookpart wird ein \pageBreak automatisiert ausgeführt.
Insofern: brauchst Du \bookpart wirklich?
Manueller \pageBreak ist ja möglich, aber der "bookpart-header" ist nicht wirklich gut ersetzbar.
Falls Du "bookpart-header" brauchst, dann brauchst Du also \bookpart.
Aber wenn nicht, dann lass \bookpart weg und alles läuft.
So habe ich selbst es in einem umfangreichen Liederbuch gemacht...


Im weiteren gehe ich davon aus, daß \bookpart notwendig ist.
Das Problem, ly-Definitionen dort nicht inkludieren zu können, ist auf verschiedenen Wegen lösbar.
Eine Möglichkeit habe ich in diesem thread schon vorgestellt, auch wenn sie mit Deinem dezeitigen setup in keiner Weise kompatibel ist.
Um Deinem setup näher zu kommen könntest Du auch wie folgt vorgehen:
a) typeset.ly bleibt wie es ist
b)
einleitung.ly:
myStaff = { a4 b c }

einleitung =
\include "typeset.ly"
ouverture.ly:
myStaff = { cis'4 dis' e' }

ouverture =
\include "typeset.ly"
c) master.ly
\include "einleitung.ly"
\include "ouverture.ly"

\bookpart {
  \header { title = "one" }
  \einleitung
  \ouverture
}

Ich selbst habe bei grösseren Projekten, die \bookpart erfordern idR zu scheme-code gegriffen, um scores in bookparts zu packen und auszugeben. Das ist aber immer maßgeschneidert auf das jeweilige Projekt.
Hier fehlen mir noch zu viele Informationen, um Dir irgendetwas vorzuschlagen.


Gruß,
  Harm

EDIT typos, etc


markusw

Super Harm!
Das funktioniert prima und kommt dem Ziel doch schon sehr nahe. An Scheme hatte ich auch schon gedacht, kenne ich aber zu wenig und ist mir daher etwas zu aufwändig.

Wahrscheinlich käme ich auch ohne "bookpart" aus, aber wollte es mal benutzen und der "Elias" hat halt zwei Teile. ;-) Ich setze mir die Cello-Kontrabass-Stimme neu.

(Jetzt wird es offtopic:) Zum einen weil das Lilypond-Notenbild wirklich toll ist, zum anderen habe ich mir eine kleine App gebastelt, die mich beim Üben unterstützen soll. D.h. z.B. Tonleitern: man wählt die Tonart, Tempo etc. und lilypond sorgt on-the-fly für Notensatz und MIDI-File. Dann noch midi in wav umwandeln (inkl. rein gestimmten Midi-Klavier) und schon kann man sich begleiten lassen.
Neben Tonleitern und Dreiklängen will ich aber auch noch Orchesterstellen nutzbar machen. Wer sich's ansehen möchte: pyanora.streamlit.app (aber, noch nicht ganz fertig).

Nochmals vielen Dank und Grüße
Markus