geteilte Stimmen in Partitur die Zweite

Begonnen von chf, Mittwoch, 20. Dezember 2017, 00:25

« vorheriges - nächstes »

chf

Liebe Freunde,

ihr seht mich wieder hilflos
\version "2.18.2"

global = { }
\relative c' {{
g1 g g g g  \break

\new Staff \with { alignBelowContext = #"vlnZwei"  }

{c1 c c }

c1 c c c c \break

{c1 c c }}

\new Staff \with { alignBelowContext = #"vlnDrei"  }

g1 g g g g }
\layout {
  << \global\vln >> \with {
          alignBelowContext = #"vlnZwei"
          alignBelowContext = #"vlnDrei" 
  }



Es muss möglich sein,  über weite Strecken die einzelnen Zeilen zu verstecken...
Ich versuche und suche schon lange, und die Zeit läuft mir weg.
Sicher wisst ihr, wie's geht. Hoffentlich genügt mein Beispiel. Bitte macht es mir zurecht.

Gruß
Christa

Manuela

Hallo Christa,

dein Code kompiliert (wieder einmal  :( ) nicht.

Ich blicke nicht durch, was dabei eigentlich rauskommen soll.
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Zitat von: chf am Mittwoch, 20. Dezember 2017, 00:25
Bitte macht es mir zurecht.
Liebe Christa,

ich helfe gern. Aber ich habe langsam das Gefühl, daß dich unsere ständigen Bitten nach bzw. Erinnerungen an kompilierbare (!) Minimalbeispiele überhaupt nicht beeindrucken und daß es inzwischen nicht mehr heißt ,,bitte helft mir bei meiner Arbeit" sondern ,,bitte macht meine Arbeit". Unter diesen Umständen ist es für mich leider weder möglich noch erstrebenswert, dir zu helfen.

Viele Grüße
Malte

P. S. In diesem konkreten Fall muß ich außerdem Manuela recht geben, es ist nicht ansatzweise klar, was du vorhast (mehrere nacheinander aniageordnete Staffs in einem \relative-Block, der \layout-Block enthält Musik, ein \with-Block nach Musik statt einem \new-Ausdruck, Bezug nehmen auf Kontextnamen, die nicht definiert sind ...).

Arnold

Hallo Christa,

wenn dein Quelltext so aussieht wie obiges Beispiel, dann wirst du dein Projekt komplett neu strukturieren müssen.

Bei der BASIC-Programmierung gab es die Bezeichnung »Spagetticode« — so etwas rächt sich (eher früher als später).

Beispiele, insbesondere für große Strukturen, gibt es wohl genügend. Bei kleinen Projekten schreibe ich zwar oft alles in eine Datei, aber die Struktur wird meistens beibehalten, auch als verschiedene Abschnitte in der Datei.

Arnold

chf

ZitatBitte macht es mir zurecht.     /       ,,bitte macht meine Arbeit"     

Zugegeben, meine Formulierung war nicht sehr glücklich...
Wieso kompiliert mein Beispiel nicht? s. Anh. -
Tatsächlich zeigt es nicht wirklich, was ich will.

Zitatder \layout-Block enthält Musik, ein \with-Block nach Musik statt einem \new-Ausdruck, Bezug nehmen auf Kontextnamen, die nicht
definiert sind
Genau dort liegt ja mein Problem - ich komme mit diesen Definitionen nicht zurecht.

Ich habe eine Stimme, die sich im Verlauf erst zu divisi à 2 und dann zu divisi à 3 teilt.
Ich habe es mit Staffgroup und 3 durchgängigen Stimmen und Pausen entfernen versucht, aber das gelingt in der Gesamtpartitur nicht.
Bitte habt Geduld mit mir - ich bemühe mich, so gut ich kann.
Nebenbei: Ich arbeite unentgeltlich!


@ Arnold
Wie sähe denn eine solcher Spaghetticode" aus?   Beispiele für große Strukturen? Ich habe mir die Vorlagen angesehen,bin aber nicht in der
Lage, sie maßzuschneidern...

Manuela

#5
Hallo Christa,

irgendwie werde ich das Gefühl nicht los, dass es bei dir noch am grundlegenden Verständnis vom Aufbau von Lilypond-Dateien hapert  ;)

Vll. solltest du dir doch die Zeit nehmen ein bisschen die Grundlagen zu verstehen, dann geht vieles leichter. Ich war auch mal dort, wo du jetzt bist, habe aber viel Zeit mit Lesen verbracht, dann wird es besser.

Ich empfehle dir unbedingt folgende Abschnitte durchzulesen:
Stimmenkontext
Kontexte im Lernhandbuch
Kontexte im Benutzerhandbuch

Zum eigentlichen Thema habe ich noch etwas im Archiv gefunden, vll. hilft dir das ja auch weiter

Staff erst nach 2 Zeilen beginnen
Danke für eure Hilfe
viele Grüße
-- Manuela

Arnold

Hallo Christa,

zuerst solltest Du wohl, notfalls durch Bildchen-Malen, die Kapselung der verschiedenen Kontexte verstehen, und welchen Aufbau Du wann gebrauchen kannst.
Grundsätzlich: Score - StaffGroup/GrandStaff/PianoStaff - Staff/RhythmicStaff/DrumStaff - Voice

Dann wird es wichtig, den großen Unterschied zwischen Sequentiell und Simultaneous (parallel) zu verinnerlichen.

Im nächsten Schritt wird erst einmal jede Stimme (einzeln) in einer Variablen abgelegt.
Dann erstellt man eine Gesamtpartitur, mehrere Teilpartituren, Einzelstimmen und transponierte Einzelstimmen unter Referenzieren auf die Einzelstimmenvariablen. Dabei auch mal "Oberstimme und Unterstimme in einer Notenzeile" anwenden!

Und wenn man das alles verstanden hat, dann sollte es kein großes Problem mehr sein, eine »temporäre zusätzliche Notenzeile« und deren Lösungsansätze in den Grundzügen zu verstehen.

Arnold

Arnold

#7
Aprops, Christa,

das »divisi« ist nicht gerade das einfachste im Notensatz. Und auch im Buch von Elaine Gould sind da Empfehlungen abgedruckt, die ich nicht ad hoc in Lilypond realisieren könnte.

Normalerweise sind die Übergänge von Single-Staff-Notation und Divisi-Staff-Notation immer am Zeilenumbruch. Eine Notation mit dem Übergang in der Mitte der Notenzeile wird allenfalls in Partituren druchgeführt.
Am kritischten ist vielleicht sogar der Übergang von »divisi a 2« nach »divisi a 3« oder umgekehrt, falls das nicht bei einem Zeilenumbruch passiert.

Auch wenn ich schon von einem Lilypond-Projekt gelesen habe, welches versucht, die non-divisi-Staff/divisi-Staff-Übergänge automatisch zu setzen (bei automatischen Zeilenumbrüchen), ist es wohl besser in diesem Fall die benötigten Zeilenumbrüche an den Nahtstellen selbst festzulegen, auch weil ich vermute, daß das »divisi a 3« dort noch nicht unterstützt ist.

Prinzipell gibt es die zwei Möglichkeiten:

  • Maximale Stimmenstruktur erstellen, und die nicht benötigten Divisi-Stimmen unterdrücken.
    Von Vorteil ist, daß man die Akkoladenstruktur von Anfang an definiert hat. Von Nachteil ist, daß es recht diffizil werden kann, einzelne Notenzeilen zu unterdrücken, während andere Notenzeilen mit nur Ganztaktpausen noch sichtbar bleiben sollen (z. Bsp. bis zum ersten Zeilenumbruch)
  • In der eigentlichen Stimmdefinition die neuen Staffs hinzufügen.
    Die Zugehörigkeit in eine Staffgroup oder ein Grandstaff festzulegen kann zum Problem werden, d. h. das weiß ich auch nicht auf anhieb wie das geht. Hier definitert man erste einmal in der Sequenz der Haupt-Einzelstimme eine SimultanGruppe, diese besteht aus einer "einfachen" Sequenz zur Fortführung dieser Haupt-Einzelstimme, und \new bzw. \context einer oder mehrerer Staff, welche die Sequenz für die Divisi-Stimme (voice) enthalten. Muß man diese Stimmen »erneut finden«, z.Bsp. weil die divisi-Stelle innerhalb einer Wiederholung beginnt und über das Ende der Wiederholung hinausgeht, so empfehle ich, auch einen benannten Voice-Kontext in diesen neuen Divisi-Staff zu erstellen, denn die könnnen dann mittels \context (\context Staff = ...  \context Voice = ... { ... } ) fortgeführt werden.

Nachtrag zur zweiten Variante:
Eine StaffGroup für die Divisi-Gruppe gleich zu Anfang definieren. Dann müßte spätestens mitels \context StaffGroup = "CelloDivisiStaffGroup" \new Staff ... die neue Notenzeile richtig in die Kontexte eingeordnet werden.

Was allgemein noch bleibt, ist das Unterdrücken der »Platzhalter« für Notenschlüssel-, Tonart- und Taktwechsel am Ende an der vorigen Notensystemzeile.


Arnold.

P.S. Spagetticode auf einem Notenblatt ist viel interessanter als im Programmcode.

harm6

Hallo Christa,

ich habe bislang gezögert hier irgendetwas zu schreiben. Teils aus Zeitmangel (wie jeder Musiker weiß ist die Weihnachtszeit Streß und Hektik pur), teils weil Deine Frage unklar ist, teils weil Dein Codebeispiel untauglich ist.

Zuerst zum letzten Punkt. Dein Beispiel ergibt im Terminal:
Zitat
$ lilypond atest-66.ly
GNU LilyPond 2.18.2
Processing `atest-66.ly'
Parsing...
atest-66.ly:19:13: error: unknown escaped string: `\vln'
  << \global
            \vln >> \with {
atest-66.ly:19:13: error: unrecognized string, not in text script or \lyricmode
  << \global
            \vln >> \with {
atest-66.ly:19:21: error: syntax error, unexpected \with
  << \global\vln >>
                    \with {
atest-66.ly:20:11: error: unrecognized string, not in text script or \lyricmode
         
          alignBelowContext = #"vlnZwei"
atest-66.ly:20:31: warning: Ignoring non-music expression
          alignBelowContext =
                              #"vlnZwei"
atest-66.ly:21:11: error: unrecognized string, not in text script or \lyricmode
         
          alignBelowContext = #"vlnDrei" 
atest-66.ly:21:31: warning: Ignoring non-music expression
          alignBelowContext =
                              #"vlnDrei" 
atest-66.ly:19:27: warning: Music unsuitable for output-def
  << \global\vln >> \with
                          {
Interpreting music...[8][16]
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Layout output to `atest-66.ps'...
Converting to `./atest-66.pdf'...
fatal error: failed files: "atest-66.ly"

Tatsächlich wird ein pdf ausgegeben, trotz all der error/warning-Meldungen.

Die diesen Meldungen zu Grunde liegenden Fehler solltest Du bereinigen, es sei denn Deine Frage würde sich auf solch eine Meldung beziehen.
Nun schreibst Du u.a.: "ich komme mit diesen Definitionen nicht zurecht."
Hier fehlt dann offensichtlich das Wissen, wie man was anwendet, wofür, in welchen Situationen, mit welcher Syntax. Es kann Dir niemand die Arbeit abnehmen, das in der Dokumentation nachzulesen und Dich um das Verständnis des Gelesenen zu bemühen. Dies kann durchaus nicht unbeträchtlichen Zeit- und Arbeitsaufwand bedeuten. Es führt aber kein Weg dran vorbei!! Nützliche links hat Manuela schon gepostet. Falls es dann noch Fragen gibt, so helfen die Mitglieder diese Forums gerne, vorausgesetzt die Frage ist klar und deutlich, sowie von einem angemessenem Code-Beispiel begleitet (am besten von minimaler Länge natürlich).
-> Wie man Fragen richtig stellt

Die Meldungen im terminal geben allerdings auch Hinweise was im argen liegt. Generell solltest Du immer auf eine absolut error/warning-freie Kompilation zielen (das geht tatsächlich nicht immer, aber meistens).
Diese Meldungen abzustellen wird fast immer zu einem besseren Code führen.
Im einzelnen:
(1)
Zitat
atest-66.ly:19:13: error: unknown escaped string: `\vln'
  << \global
            \vln >> \with {
\vln ruft die Variable namens `vln' auf, die allerdings nicht definiert ist. Also streiche \vln.
-> Ein error weniger
(2)
Zitat

atest-66.ly:19:17: error: syntax error, unexpected \with
  << \global >>
                \with {
`\with' ist der Befehl der Context-Definition (also z.B. Voice, Staff, etc), die diesem Befehl direkt voraus geht, Eigenschaften hinzuzufügen. Bei Dir steht aber Musik vor dem `with'. Kann nicht klappen.
Auch sind die Befehle `alignBelowContext' in diesem with-Ausdruck (sowie zwei anderen) dazu da einen neu Geschaffenen Context in das bereits bestehende Gefüge einzuordnen. Die bereits bestehenden Contexte über oder unter die etwas eingeordnet werden soll, werden von LilyPond anhand ihres Namens gefunden. Es gibt in diesem Beispiel allerdings keine benannten Contexte, insoweit ist der Befehl `alignBelowContext' sowieso sinnlos. D.h. streiche alle `\with { ... }'-Ausdücke.
-> führt zu einer fehlerfreien Kompilation
(3)
Jedoch sind noch einige Sachen zu bereinigen:
Die `global'-Variable ist leer. Ist in einem minimal-Beispiel also per definitionem sinnlos -> streichen.
Dann enthält der layout-Block auch nichts wesentliches mehr -> streichen
Dein Beispiel-code sieht jetzt momentan so aus:

\version "2.18.2"

\relative c' {{
g1 g g g g  \break

\new Staff

{c1 c c }

c1 c c c c \break

{c1 c c }}

\new Staff

g1 g g g g }

Zwar deutlich kürzer aber immer noch unübersichtlich, da keine Indentation da ist, die Klammern seltsam sind und immer eine überflüssige leere Zeile nach jeder Code-Zeile drin ist.
Zu den Klammern: { ... } bedeutet: packe alles zwischen den Klammern in einen musikalischen Ausdruck und gebe es als sequentielle Musik aus (also nacheinander, nicht als Akkord oder gleichzeitig ablaufende Mehstimmigkeit).
Also ist ein Klammerpaar schon mal überflüssig (das rote). Ein zweites ebenfalls (grün), da es nur sequentielle Musik ausgibt, Du Dich aber sowieso bereits in sequentieller Musik befindest und das offensichtlich ja auch nicht ändern willst:
Zitat
\version "2.18.2"

\relative c' {{
g1 g g g g  \break
\new Staff
{c1 c c }
c1 c c c c \break
{c1 c c }}
\new Staff
g1 g g g g }

Führt zu:

\version "2.18.2"

\relative c' {
g1 g g g g  \break
\new Staff
{c1 c c }
c1 c c c c \break
c1 c c
\new Staff
g1 g g g g }

Immer noch unübersichtlich, da Indentation fehlt. Nun gibt es unterschiedliche Methoden dafür, ich nehme mal meine, d.h. Einrückungen immer mit zwei spaces. Die abschließende Klammer in eine neue Zeile, \break-Befehle in eine neue Zeile.
Nach `{' und vor `}' sollte immer ein space eingefügt werden, denn in seltenen Fällen führt das zu absolut unverständlichen Fehlermeldungen auf deren mögiche Ursache ich her nicht weiter eingehe.
Als Ausnahme, da es sich um einen minimal-Code handelt setzte ich den Inhalt der neuen Staffs direkt dahinter auf dieselbe Zeile (ansonsten hätte ich es um zwei weitere spaces eingerückt in eine neue Zeile geschrieben). Führt zu:
\version "2.18.2"

\relative c' {
  g1 g g g g 
  \break
  \new Staff { c1 c c }
  c1 c c c c
  \break
  c1 c c
  \new Staff g1
  g g g g
}


Wir haben jetzt einen Code der drei Zeilen ausgibt. In der zweiten und dritten Zeile kommen temporär neue Staffs dazu. Takt 6-8 des obersten Staffs sind leer (da alles nacheinander abläuft).

Aber inwieweit illustriert das die Frage? Was soll denn "versteckt" werden?

Ein besseres Beispiel, sowie eine präzise Frage tut Not!!

Tatsächlich habe ich jetzt deutlich mehr als eine Stunde an der Formulierung dieses Beitrags gesessen. Ohne auch nur die Chance zu bekommen irgendetwas substantiell zu antworten. Das ist leider bei Deinen Fragen nicht selten der Fall.
Das ist extrem demotivierend. Auch steht mir die Zeit die ich hier investiert habe nicht mehr für andere Fragen, oder für eigene Projekte zur Verfügung.

Insoweit rutschen Deine Fragen immer weiter ab auf meiner TODO-Liste.

Wie Du bemerkt haben wirst stelle ich selber selten eine Frage. Wenn doch, so bemühe ich mich möglichst präzise zu formulieren sowie ein optimales, minimal-Example zu erstellen.
Das dauert seine Zeit. Mitunter Stunden. Allerdings lerne ich in diesen Stunden für gewöhnlich eine Menge über LilyPond und nicht selten finde ich auch selbst eine Lösung und die Frage brauche ich dann nicht mehr zu stellen.


Gruß,
  Harm

P.S. Alle meine Beiträge hier im Forum sowie auf der internationalen mailing-list, sowie meine Beiträge zur LilyPond-Entwicklung geschehen unentgeltlich.
Tatsächlich kostet es mich sogar Geld:
https://archiv.lilypondforum.de/index.php/topic,1222.0.html


chf

#9
Liebe Freunde,

zuerst möchte ich euch sagen, dass mein Problem sich auf eine wunderbare, ganz simple Weise gelöst hat.
Für alle, die mal so auf dem Schlauch stehen wie ich: es lag tatsächlich an den Breaks. Arnold hatte recht. Ich hatte ganz andere Fehler gesucht. Lily hatte alle Umbrüche selbst zu meiner Zufriedenheit gesetzt, aber sozusagen nicht gewusst was es tat. Nach Bestätigung der breaks war alles gut.

Ich danke euch allen für die Hinweise und die gründlichen Anleitungen und werde mich weiter bemühen.
Es tut mir leid, dass unser letzter Austausch so angespannt war. Ihr könnt sicher sein, dass ich mich nicht leichtfertig an euch wende. Ich mache meine Arbeit schon gerne selbst, es waren immerhin fast 40 Seiten zu 30 Stimmen.

Jetzt wünsche ich uns miteinander ein gutes und weitgehend entspanntes Jahr 2018
und grüße herzlich

Christa