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

ingmar

#8
    Organisation der Stimmen in  Dateien:

    Natürlich ist es richtig, dass jeder seinen eigenen Stil entwickelt. Jede Situation ist anders. Du fragst nach unserer Erfahrung.

    Bei mir geht das so: Ich schreibe in den allermeisten Fällen Hefte mit drei bis zehn Sätzen für drei bis sechs Instrumente. Dafür hat sich folgende Arbeitsweise bewährt:
    • Sämtlicher Notentext in ein einziges File, in Variablen. Das wird eben nicht unübersichtlich, wenn man in Frescobaldi arbeitet – die Software bietet einen Tastaturbefehl ("Ansicht > Code Folding > Alles ausblenden"), alles einzuklappen. Du klappst immer nur das auf, woran du gerade arbeitest und hast den gesamten Notentext jederzeit zugänglich, ohne nach einem File suchen zu müssen. Der Tastaturbefehl, der alles einklappt, ist dir nach kurzer Zeit in Fleisch und Blut übergegangen. Ob das für Orchesterwerke noch praktikabel ist, weiß ich nicht, aber ich komme mit Dateien von mehreren tausend Zeilen prima klar.
    • Soweit die Sätze keine 'natürlichen' (näherliegenden) Namen haben, kannst du sie zum Beispiel mit römischen Namen 'I', 'II', 'III' bezeichnen. (Das sortiert sich bis auf IX auch von selbst alphabetisch...)
    • Die Variablen der Einzelstimmen könnten dann heißen: 'IV-violineI', 'IV-violineII', 'IV-cello' und so weiter.
    • Du kannst dort auch eine (oder mehrere) Variablen anlegen für allgemeine Angaben, etwa 'IV-commons', 'IV-tempo', 'IV-taktwechsel' und sowas.
    • Standardisierte Namen auch bei den Files! KleineNachtmusik-resources.ly würde bei mir immer und nur Variablen enthalten – und damit sämtliche Noten, die in meinem Heft vorkommen.
    • Für jedes der Zieldokumente habe ich hingegen ein eigenes File, weil man ja oft nur eins dieser Dokumente neu erzeugen will – Beispiel KleineNachtmusik-score.ly, das die Zielpartitur schreibt, KleineNachtmusik-violineI.ly für eine Einzelstimme, und KleineNachtmusik-I-midi.ly bis KleineNachtmusik-IV-midi.ly (die so z. B. andere Tempi enthalten können als die offiziellen der Partitur). – Alle diese Files binden bei mir ganz oben das resources-File ein. (Das Einlesen von nicht gebrauchten Variablen dauert übrigens nur Sekundenbruchteile, darum mach dir also keine Gedanken.) So ist das ziemlich übersichtlich.
    • Natürlich liegt dann alles, was zu einem Stück gehört, in einem einzigen Ordner.
    • Oft nützlich ist noch ein weiteres, zusätzliches File Kleine Nachtmusik-check.ly, das nur dazu da ist, schnell mit der Originalquelle vergleichen zu können. Das erzeugt dann einen groben, optisch nicht weiter optimierten Partiturausdruck, immer mit den Originalschlüsseln. Meist hat es Einträge für alle Sätze, die ich aber schnell auskommentieren kann – z. B. durch den beliebten Trick mit Entfernen und Wiedereinfügen des Zwischenraums am Kommentarstart (siehe unten, in der ersten Zeile). Eine solche Datei hat sich bei komplizierteren Partituren sehr bewährt, weil ich sonst leicht in Versuchung komme, temporär in den Ausdrucksdateien herumzueditieren. Und es hat sich auch bewährt, das aufzubewahren.

    Wenn du im Laufe der Jahre viele Partituren schreibst, ist es extrem hilfreich, sehr strukturiert und immer nach gleicher standardisierter Methode vorzugehen. Die Erfahrung zeigt, dass man doch immer wieder an seine alten Noten drangehen muss und andernfalls schon nach wenigen Wochen einfach viel zu lange braucht, um sich dort zurechtzufinden. Anderen mag solches Forschen, selbstverständlich immer unter Zeitdruck, ja Spaß machen, mir jedenfalls nicht...

    Vielleicht hilft das?
    --ingmar

% {
\version ...
% Einlesen des resourcefiles...
{ \score {
    % blabla
}
%}

EDIT: Formulierung besser
EDIT: Ein wenig ausführlicher...
EDIT: Fehlerchen weg.[/list]