Erstes großes Projekt -- verschiedene Sätze, Stimmenorganisation

Begonnen von KSchmir, Montag, 26. September 2022, 20:46

« vorheriges - nächstes »

KSchmir

Hallo,

ich habe inzwischen zwei einwandfrei kompilierende Partituren, einen ersten und einen zweiten Satz. Nachdem ich im zweiten Satz alle Stimmenbezeichnungen, die vorher gleich wie im ersten waren, geändert habe, bekomme ich auch eine Gesamtpartitur, auch ohne \book zu deklarieren. Dazu eine direkte Frage:

Kann ich die MIDI-Daten für beide Sätze zusammen bekommen? Ich bekomme nur den ersten Satz. Das Herausnehmen des MIDI-Teils aus dem \score hilft nichts, ich habe es allerdings auch bei zwei MIDI-Abschnitten belassen, weil die Sätze unterschiedliche Tempi haben.


Und, weiter ausholend:

Hätte ich auch Stimme für Stimme, jeweils mit einem ersten und zweiten Satz, arbeiten können? Bisher habe ich mich um die Einzelstimmen nicht gekümmert, es sollen aber im Idealfall beide Sätze aufs gleiche Blatt. Oder muss ich nur auf die spitzen Klammern verzichten und bekomme dann alle Stimmen (mit Seitenumbrüchen zwischen den Instrumenten ...) in der gleichen Datei?

Klaus


Arnold

Hallo Klaus,

ich denke, daß da jeder seinen eigenen Stil entwickelt, wie er mit großen Projekten umgeht.
  • viele Variablen (für nahezu alles, was einmal festgelegt und wiederverwendet werden soll)
  • viele Einzeldateien, die mit \include dann eingefügt werden
  • ein konsistentes Benennungsschema für die Variablen und die Dateien
Beispielsweise bei einem »Liederzyklus für großes Orchester« können mehrere hundert Lilypond-Quelldateien zusammenkommen.

Das ganze hängt auch davon ab, wie viele unterschiedliche Ausgaben (bzw. Exporte) du erstellen willst.
  • eine Gesamtpartitur (PDF, alle Sätze, ohne Point-and-Click)
  • für jeden Satz eine Partitur (PDF, mit Point-and-Click, denn für jede kleine Fehlerkorrektur oder Optimierung immer die Gesamtpartitur übersetzen zu müssen dauert einfach zu lange)
  • jede Einzelstimme (PDF, sowohl mit als auch ohne Point-and-Click)
  • Ersatz- oder Alternativstimmen(PDF, z. Bsp. Altklarinette statt Bassetthorn)
  • MIDI für jeden Satz
Fast immer habe ich die MIDI-Ausgabe in einem eigenen \score-Block definiert, nicht gemeinsam mit dem \score-Block für die Partitur. Es kommen doch meist zu viele »kleine Unterschiede« zusammen, so daß eine \tagGroup mit den drei Elementen Part (Einzelstimme), Score (Partitur) und Midi bei mir schon zum Standard wurde.

Eine gemeinsame Stimmenaufteilung für alle Sätze einer Partitur festzulegen ist recht einfach möglich - doch ich kenne kein Beispiel dazu in der Lilyponddokumentation. Deshalb hier ein mäßig kleine Beispiel, ohne eine Andeutung, in wieviel Dateien ich das aufsplitten würde:
\version "2.22.0"
 
PartiturKopf = \new StaffGroup <<
  \new StaffGroup \with {
    systemStartDelimiter = #'SystemStartSquare
  } <<
    \new Staff = "Ve1" \with {
      instrumentName = "1. Violine"
      % shortInstrumentName midiInstrument midiPanPosition ...
    } {
    }
    \new Staff = "Ve2" \with {
      instrumentName = "2. Violine"
    } {
    }
  >>
    \new Staff = "Va" \with {
      instrumentName = "Bratsche"
    } {
    }
    \new Staff = "Vc" \with {
      instrumentName = "Cello"
    } {
    }
>>

¹GemeinsamerStimmenkopf = {
  \tempo 4 = 90
  \time 3/4
  \key d \major
  % \partial ...
}

¹VeI = {
  \¹GemeinsamerStimmenkopf
  d''2.
  \bar "|."
}

¹VeII = {
  \¹GemeinsamerStimmenkopf
  fis'2.
  \bar "|."
}

¹Va = {
  \¹GemeinsamerStimmenkopf
  a2.
  \bar "|."
}

¹Vc = {
  \¹GemeinsamerStimmenkopf
  d,2.
  \bar "|."
}

¹PartiturStimmen = <<
  \context Staff = "Ve1" {
    \clef treble
    \¹VeI
  }
  \context Staff = "Ve2" {
    \clef treble
    \¹VeII
  }
  \context Staff = "Va" {
    \clef alto
    \¹Va
  }
  \context Staff = "Vc" {
    \clef bass
    \¹Vc
  }
>>

\score {
  {
    \PartiturKopf
    \¹PartiturStimmen
  }
}

% nächster \score für nächsten Satz, ...
Ich benutze gerne die »hochgestellten Ziffern« aus dem UNICODE-Zeichensatz am Anfang der Variablennamen um den Satz anzuzeigen. Ist aber nur sinnvoll, wenn diese Zeichen auch bequem an der Tastatur eingegeben werden können.
Der PartiturKopf legt die Aufteilung der Stimmen auf die Notenzeilen im System fest, und gibt jeder Notenzeile einen Namen. Mit Tags kann man gegebenenfalls in einem Satz nicht besetzte Instrumente herausfiltern.
In PartiturStimmen sind dann die einzelnen Stimmen zusammengefaßt, diese referenzieren über \context ihre schon definierte Notenzeile. Da diese Stimmen alle parallel laufen, wird die »doppelte spitze Klammer«, ergo << und >> in der Definition diese »parallelen Datenkonstrukts« benutzt.
Zur Ausgabe setzt man den PartiturKopf und die PartiturStimmen hintereinander, ergo ein »sequentielles Datenkonstrukt«, mit den »geschweiften Klammern», ergo { und }, definiert. Wenn wirklich nötig, könnten da natürlich auch viele PartiturStimmen (Sätze) hintereinandergereiht werden, aber für die MIDI-Ausgabe noch mit Pausen (und, falls nicht am Anfang der Sätze festgelegt, auch die Tempiwechsel) dazwischen, quasi:
{ \PartiturKopf \¹PartiturStimmen \¹FolgePause \²PartiturStimmen \²FolgePause \³PartiturStimmen }
So etwas würde ich eventuell verwenden, wenn ich diese Sätze mit minimalem Abstand dazwischen (quasi »attacca«) mit der Midi-Begleitung auf meinem Instrument üben möchte.

Bitte entschuldige, wenn ich keinen »goldenen Weg« anbiete. Lilypond bietet viele Möglichkeiten, und was für ein Projekt ideal ist, muß für ein anderes nicht unbedingt genauso gut sein.

Arnold


KSchmir

#2
Danke erstmal für die Antwort!

Ich werde daran eine Weile zu knabbern haben. Einige Befehle sind mir ganz neu, und damit \include funktioniert, müsste ich mich wahrscheinlich ein bisschen genauer mit den Dateistrukturen auf meinem Computer auseinandersetzen.

Eine MIDI-Ausgabe für beide Sätze zusammen geht also nicht?

Klaus




Arnold

Hallo Klaus.

»Eine MIDI-Ausgabe für beide Sätze zusammen geht also nicht?«

Natürlich geht das sehr wohl. Persönlich finde ich, es macht selten Sinn.
(Aber: selten ist ungleich nie!)

Erstens, zum \include: Wenn alle Dateien im gleichen Verzeichnis (quasi Arbeitsverzeichnis) liegen, macht es meistens keine Probleme. Ansonsten benötigt man die -I Option im lilypond-Aufruf um ein spezifisches Verzeichnis (z. Bsp. für eigene SCHEME-Routinen, die projektübergreifend genutzt werden) anzugeben.
Um Details zu erläutern, sollte man einen neuen Beitrag eröffnen. Da hängt auch manches von der Arbeitsumgebung ab, z. Bsp. Betriebssystem, Editor, spezielle Arbeitsoberflächen (z. Bsp. Frescobaldi).

Im »monolithischen Quellcode-Ansatz« mußt Du meist mehrere PDF-Dateien und mehrere MIDI-Dateien aus einer LY-Datei erstellen. Da ich das nicht verwende, habe ich mich auch noch nicht um die Strukturdefinitonen oberhalb von \bookpart gekümmert (für die PDF-Dateien).
Jeder \score-Block mit \midi (eventuell mit \midi und \layout) erstellt eine Midi-Datei, gegebenenfalls mit einer zusätzlichen Zählnummer, im Dateisystem.
Für mehrere Sätze in einer MIDI-Datei müssen dann auch diese Sätze (die Variablen, in denen die Sätze als Datenstruktur beschreiben sind) in einem \score-Block aneinandergereiht werden, inclusive Pause zwischen den Sätzen und Tempoangaben am Anfang jeden Satzes. Abhängig davon, wie du deine Musikbeschreibung aufgebaut hast, kann das sehr einfach oder sehr aufwändig werden.

Die einfachste Struktur mit \include, wäre:
Alle Variablendefinition in einer LY-Datei (oder alternativ mit Dateiendung ».ily«)
Für jede Ausgabe (PDF oder MIDI-Datei) eine eigene LY-Datei, und am Anfang dieser Dateien steht jeweils der \include-Befehl für die Datei deiner Variablendefinitionen.
Eine Aktualisierung aller Ausgaben (PDF und MIDI) kann dann als »Batch« eingerichtet werden. (Schon wieder ist das Wie betriebssystemabhänig)

Arnold

KSchmir

Stimmt. Ich habe zwei MIDI-Datein am Speicherort, lediglich das Abspielmodul in Frescobaldi hat die zweite ignoriert.

Das mit den Speicherorten ist für mich (mit einer wiederkehrenden Depression) ein besonderes Problem. Ich hab den Computer mal weggegeben, weil sich Windows nicht aktualisiert hat. Seitdem habe ich mein ursprüngliches Benutzerkonto plus das von einem darüberinstallierten Windows. Und da Windows nur "benutzerfreundliche" Pfadangaben macht, habe ich keinen Überblick, welches Programm was wann wohin abspeichert. Das muss warten, bis ich mal ganz viel Mut habe, und bis dahin gibts halt all-inclusive-Partituren, und wenn sie noch so lange zum Kompilieren brauchen ...

Klaus

Arnold

Ja, Klaus,
mit Frescobaldi kann ich dir nicht weiterhalfen, da ich einer der »Lily-Fundamentalisten« bin, die mit Texteditor arbeiten und dann Lilypond in der Kommandozeile kompilieren.

Was für Dich wohl (zu Anfang) sinnvoll wäre, wären die \bookpart in Lilypond. Damit kannst Du verschiedenen Abschnitten im PDF andere Kopfzeilen zuweisen - eigentlich erst einmal nur der Instrument-Name in der Kopfzeile.
Wie das Menü im Frescobali funktioniert, kann ich dir natürlich nicht sagen.
Direkt in der Datei editiert, würde man im ersten Abschnitt alle Variablen (Stimmen u.s.w.) festlegen.
Jeder folgende Abschnitt wäre dann ein Bookpart, d. h. beginnt mit \bookpart { und endet mit der zugehörigen sich schließenden geschweiften Klammer }.
In jeden Bookpart wird dann noch der Instrumentenname (für die Kopfzeile) festgelegt - ergo »Partitur«, »1. Violine«, »2. Violine«, »Bratsche«, »Violoncello«, eventuell auch noch Hilfsstimmen wie z. Bsp. »Bratschenstimme als 3. Violine, aber transponierend in F (Quinte tiefer klingend als notiert)«,
und danach kommen in jedem Bookpart noch die ganzen \score-Blöcke für die unterschiedlichen Sätze des Instruments (bzw. der Partitur).

Das ergäbe dann eine einiges PDF. Da aber jeder Bookpart auch auf einer neuen Seite beginnt, können sich dann die Empfänger des PDF den für sie benötigten Abschnitt heraussuchen und (nur) diesen ausdrucken.

Unvollständiges, daher nicht kompilierbares Beispiel (und Tippfehler noch möglich!):¹Ve = ...
¹Vc = ...
¹Partitur = ...
¹Ve = ...
²Vc = ...
²Partitur = ...
³Ve = ...
³Vc = ...
³Partitur = ...
\header {
  title = ...
}

\bookpart {
  \header { instrument = "Partitur" }
  \score {
    \¹Partitur
    \header { piece = "1. Satz" }
  }
  \score {
    \²Partitur
    \header { piece = "2. Satz" }
  }
  \score {
    \³Partitur
    \header { piece = "3. Satz" }
  }
}

\bookpart {
  \header { instrument = "Violine" }
  \score {
    \new Staff { \clef treble  \¹Ve }
    \header { piece = "1. Satz" }
  }
  \score {
    \new Staff { \clef treble  \²Ve }
    \header { piece = "2. Satz" }
  }
  \score {
    \new Staff { \clef treble \³Ve }
    \header { piece = "3. Satz" }
  }
}

\bookpart {
  \header { instrument = "Cello" }
  \score {
    \new Staff { \clef bass  \¹Vc }
    \header { piece = "1. Satz" }
  }
  \score {
    \new Staff { \clef bass  \²Vc }
    \header { piece = "2. Satz" }
  }
  \score {
    \new Staff { \clef bass \³Vc }
    \header { piece = "3. Satz" }
  }
}

Arnold

KSchmir

Ja, das ist besser als \pagebreak, an das ich bisher gedacht habe. Ich würde wahrscheinlich eine Datei für die Paritur nehmen und dann getrennt Ausschnitte daraus für Stimmen in C, B etc.

Wahrscheinlich liegt das jetzt einen Monat auf Eis. Ich habe jier etwas liegen mit Aussicht auf Aufführung, bei dem ich transponiert schreiben werde, und Zeilenumbrüche, dal segnos und codas vorkommen. Genug Neuland!

Klaus

Rudi Guggt

Hallo,

Zitat von: KSchmir am Sonntag,  2. Oktober 2022, 00:17lediglich das Abspielmodul in Frescobaldi hat die zweite ignoriert.

das ist vermutlich nur dein visueller Eindruck. Wenn du dir das Abspielmodul genauer anschaust, findest du rechts neben dem Midi-Dateinamen einen Pfeil nach unten, mit dem du weitere Midi-Dateien auswählen kannst.

Gruß
Rudi