Autor Thema: partcombine noch unausgereift?  (Gelesen 3494 mal)

spinne

  • Member
partcombine noch unausgereift?
« am: Mittwoch, 20. März 2013, 12:25 »
Hallo,

ich habe immer wieder seltsame Ergebnisse mit partcombine. Dynamik hab ich aufgegeben. Ich hab die Tips hier versucht und es geht ein paar Takte, dann wieder nicht (siehe anderes Posting). Ich hab jetzt aus der oberen Stimme jegliche Dynamik rausgelöscht.

Aber manchmal erkennt er nicht, dass beide Stimmen das selbe spielen:


Stimme 1 an der Stelle (ist noch 1 Takt von der Zeile davor):
\stemUp
c2\( a | gis1\) | a~( | a2 c) | b2( c) | c1( | b) |


Stimme 2 an der selben Stelle:
\stemDown
c2\p\<\( a | gis1\>\) | a\!~( | a2 c) | b2\<( c) | d,1\>( | g)


Was muss ich machen, damit das gis im 1. Takt und das a im 2. Takt nur einmal erscheint?

Es gäb noch viele solcher Problemstellen in der ganzen Datei:-(

lg
Holger



eluze

  • Member
Re: partcombine noch unausgereift?
« Antwort #1 am: Mittwoch, 20. März 2013, 13:16 »
hallo spinne

Zitat
Aber manchmal erkennt er nicht, dass beide Stimmen das selbe spielen:

ich glaub'schon, dass er es merkt, er möchte aber nicht, dass einer aufhört zu singen …

es gibt hier noch eine lösung wenn man das unbedingt erzwingen will: http://lilypond.1069038.n5.nabble.com/Note-collision-without-stems-tt41022.html#a41026

Eluze

Be-3

  • Member
Re: partcombine noch unausgereift?
« Antwort #2 am: Mittwoch, 20. März 2013, 13:35 »
Zitat
Aber manchmal erkennt er nicht, dass beide Stimmen das selbe spielen:

ich glaub'schon, dass er es merkt, er möchte aber nicht, dass einer aufhört zu singen …

Nein, nein, spinne hat schon recht... Es ist seltsam!

Um zu verhindern, daß "einer aufhört zu singen" gibt es ja die "a2"-Angabe, das ist übliche Praxis und es ist durchaus zulässig, als Alternative zu den entgegengesetzten Hälse die Stimmen zusammenzufassen, wenn sie rhythmisch übereinstimmen, das ist nicht verwerflich. :)

Rätselhaft ist tatsächlich, daß "er", sobald "Spanners" wie \< oder \> ins Spiel kommen manchmal, aber wirklich nur manchmal, nicht erkennt, wenn beide Stimmen exakt gleich sind und \partcombine sie tatsächlich zusammenfassen sollte.

Viele Grüße
Torsten

eluze

  • Member
Re: partcombine noch unausgereift?
« Antwort #3 am: Mittwoch, 20. März 2013, 14:25 »
ich glaube, das ist nun mal die art, wie LP stimmen/noten verbindet, die keine (sichtbaren) hälse haben - wie die ganzen noten.

seid gegrüsst
Eluze

harm6

  • Member
Re: partcombine noch unausgereift?
« Antwort #4 am: Mittwoch, 20. März 2013, 16:14 »
Hallo,

ich habe mal folgenden code untersucht:
(png im Anhang)

\version "2.16.2"

\paper { indent = 20 }

\layout {
  \context {
    \Staff
    \override VerticalAxisGroup #'default-staff-staff-spacing =
      #'((padding . 6))
  }
}

Ia = \relative c'' {
        c2\( a |
        gis1\) |
        a\!~( |
        a2 c) |
        b2( c) | 
        c1( |
        b)\! |
}

Ib = \relative c'' {
        c2\p\<\( a |
        gis1\>\) |
        a\!~( |
        a2 c) |
        b2\<( c) | 
        c1\>( |
        b)\! |
}

II = \relative c'' {
        c2\p\<\( a |
        gis1\>\) |
        a\!~( |
        a2 c) |
        b2\<( c) |
        d,1\>( |
        g)\!
}

<<
  \new Staff \with { instrumentName = "Ia" } \Ia
  \new Staff \with { instrumentName = "Ib" } \Ib
  \new Staff \with { instrumentName = "II" } \II
  \new Staff \with { instrumentName = "combine Ia II" }
     %\displayMusic
     { 
             \partcombine \Ia \II
     }
  \new Staff \with { instrumentName = "combine Ib II" }
     %\displayMusic
     { 
             \partcombine \Ib \II
     }
>>

Ia ist die erste Stimme wie Holger sie mitgeteilt hat mit zwei Ausnahmen:
stemUp habe ich rausgenommen, scheint ohne Bedeutung zu sein.
Das letzte decrescendo habe ich ordnungsgemäß beendet mittels \! (sic! Das hat eine Bedeutung s.u.)

Ib ist dieselbe Stimme mit Dynamic.

II ist die zweite Stimme mit ordentlich beendeter Dynamic.

\partcombine \Ia \II  liefert einen output wie Holger ihn gepostet hatte.

\partcombine \Ib \II liefert jedoch das gewünschte Bild!!

Wenn man \displayMusic  einschaltet so erhält man im ersten Fall:

Zitat
(make-music
  'SequentialMusic
  'elements
  (list (make-music
          'PartCombineMusic
          'split-list
          (list (cons (ly:make-moment 0 1 0 1) (quote apart))
                (cons (ly:make-moment 1 2 0 1) (quote apart))
                (cons (ly:make-moment 1 1 0 1) (quote apart))
                (cons (ly:make-moment 2 1 0 1) (quote apart))
                (cons (ly:make-moment 3 1 0 1) (quote apart))
                (cons (ly:make-moment 7 2 0 1) (quote apart))
                (cons (ly:make-moment 4 1 0 1) (quote apart))
                (cons (ly:make-moment 9 2 0 1) (quote apart))
                (cons (ly:make-moment 5 1 0 1) (quote apart))
                (cons (ly:make-moment 6 1 0 1) (quote apart)))
          'direction
          #f
          'elements
          (list
            ...

D.h. also, LilyPond hat in den apart-modus gewechselt.

Im zweiten Fall erhält man:

Zitat
(make-music
  'SequentialMusic
  'elements
  (list (make-music
          'PartCombineMusic
          'split-list
          (list (cons (ly:make-moment 0 1 0 1) (quote unisono))
                (cons (ly:make-moment 1 2 0 1) (quote unisono))
                (cons (ly:make-moment 1 1 0 1) (quote unisono))
                (cons (ly:make-moment 2 1 0 1) (quote unisono))
                (cons (ly:make-moment 3 1 0 1) (quote unisono))
                (cons (ly:make-moment 7 2 0 1) (quote unisono))
                (cons (ly:make-moment 4 1 0 1) (quote unisono))
                (cons (ly:make-moment 9 2 0 1) (quote unisono))
                (cons (ly:make-moment 5 1 0 1) (quote chords))
                (cons (ly:make-moment 6 1 0 1) (quote chords)))
          'direction
          #f
          'elements
          (list
           ...

Wie gewünscht. Allenfalls kann man sich darüber streiten, ob LilyPond für die letzten zwei Takte wirklich in den chord-modus wechseln sollte, denn dann wird der legato-Bogen nur einmal gesetzt.

Wenn ich allerdings in Ib oder II das letzte decresc. nicht beende erhalte ich wieder befremdliche Resultate.


Das hilft jetzt noch nicht allzuviel, mag aber vielleicht ein paar dunkle Ecken zumindest beleuchten.


@ Holger
Auch wenn es Dich kollossal nervt.
Ich denke hier haben wir ein gutes Beispiel warum es sich lohnt immer kompilierbare Code-Beispiele zu posten und diesen vorher auch zu testen.
Ein Knackpunkt ist eben die nicht beendete Dynamik.

Und noch ein weiterer Gedanke.
Deinen Code aus dem anderen Thread habe ich zwar runtergeladen aber, nach einem kurzen Blick, nicht bearbeitet.
Bei meiner Bildschirmgröße und Auflösung werden die Zeilen umgebrochen (oder ich muß die Schrift so klein stellen, daß ich sie nicht mehr lesen kann), sodaß eine Struktur des files nur noch schwer erkennbar ist.
Es hat sich als brauchbare Konvention erwiesen nur (maximal) einen Takt pro Zeile zu schreiben und diese Zeile sollte nicht länger als 80 Anschläge sein.
Ansonsten machst Du den potentiellen Helfern das Leben schwerer.



Gruß,
  Harm


spinne

  • Member
Re: partcombine noch unausgereift?
« Antwort #5 am: Mittwoch, 20. März 2013, 17:33 »

@ Holger
Auch wenn es Dich kollossal nervt.
Ich denke hier haben wir ein gutes Beispiel warum es sich lohnt immer kompilierbare Code-Beispiele zu posten und diesen vorher auch zu testen.
Ein Knackpunkt ist eben die nicht beendete Dynamik.

Und noch ein weiterer Gedanke.
Deinen Code aus dem anderen Thread habe ich zwar runtergeladen aber, nach einem kurzen Blick, nicht bearbeitet.
Bei meiner Bildschirmgröße und Auflösung werden die Zeilen umgebrochen (oder ich muß die Schrift so klein stellen, daß ich sie nicht mehr lesen kann), sodaß eine Struktur des files nur noch schwer erkennbar ist.
Es hat sich als brauchbare Konvention erwiesen nur (maximal) einen Takt pro Zeile zu schreiben und diese Zeile sollte nicht länger als 80 Anschläge sein.
Ansonsten machst Du den potentiellen Helfern das Leben schwerer.

Gruß,
  Harm

Nein, es nervt nicht:-)

Einen Takt pro Zeile? :-) Ich hab zwei 24 Zoll Widescreen Displays vor mir:-) Da Werk hat 400 Takte. Ich schreibe eine Zeile der Noten pro Zeile im Quelltext dass ich mich zurechtfinde. Bei 80 Anschlägen pro Zeile bleiben 2/3 meines Bildschirms ungenutzt:-) Das ganze Projekt ist mittlerweile "etwas" umfangreich" geworden. Mein Rechner (4-Kern AMD mit 8GB RAM) braucht fast 2 Stunden um die gesamte Partitur zu erzeugen.

Ich werd das bei dem Projekt jetzt noch so machen dass ich die Dynamik aus der ober Stimme rauslösch, denke das geht jetzt schneller (vor allem weil ich nen Abgabetermin hab:-) ) und mich dann beim nächsten "vorher" genauer damit befassen dass das korrekt funktioniert (danke für die Beispiele).

Gruss
holger

harm6

  • Member
Re: partcombine noch unausgereift?
« Antwort #6 am: Donnerstag, 21. März 2013, 03:23 »
Hallo Holger,

Zitat von: Holger
Einen Takt pro Zeile? :-) Ich hab zwei 24 Zoll Widescreen Displays vor mir:-) Da Werk hat 400 Takte. Ich schreibe eine Zeile der Noten pro Zeile im Quelltext dass ich mich zurechtfinde. Bei 80 Anschlägen pro Zeile bleiben 2/3 meines Bildschirms ungenutzt:-)

ich werde Dir nicht vorschreiben, wie Du Deine files aufbaust.
(Obwohl ich meine obigen Vorschläge selbst beherzige, mittlerweile.)

Es wäre jedoch schön, wenn Du in Deinen posts Deinen Code so formatieren könntest.
Gedenke all der Leser (einschließlich meiner Wenigkeit) die nicht mal ein 24 Zoll Widescreen Display besitzen.

Gruß,
  Harm

Be-3

  • Member
Re: partcombine noch unausgereift?
« Antwort #7 am: Donnerstag, 21. März 2013, 09:26 »
Einen Takt pro Zeile? :-) Ich hab zwei 24 Zoll Widescreen Displays vor mir:-) Da Werk hat 400 Takte. Ich schreibe eine Zeile der Noten pro Zeile im Quelltext dass ich mich zurechtfinde.

Hallo Holger,

natürlich bleibt es jedem persönlich überlassen, wie er seinen Quellcode formatiert, aber ein paar Anmerkungen/Fragen hätte ich da auch noch:
  • Ich finde mich dank der Point-and-Click-Funktionalität sehr gut im Quellcode zurecht.
  • Auch bei 24"-Widescreen lesen sich derart lange Zeilen doch wie ein Beipackzettel...?  :o
  • Ich würde die Bildschirmbreite im Zweifelsfall lieber dazu nutzen, verschiedene Stimmen bei jeweils übersichtlicher Zeilenbreite nebeneinanderzustellen, dann liegen jeweils gleiche Takte auf gleicher Höhe. Bei Deiner zeilwenweisen Organisation kann es sein, daß die erste Violine 200 Stellen "lang" ist, während der Baß nur 20 Stellen braucht; da fände ich mich dann nicht zurecht, wenn ich den 4. Takt in der Zeile vergleichen müßte. ;)
  • 400 Takte entsprechen 400 Zeilen pro Stimme, wenn man jedem Takt seine eigene Zeile gönnt. Das erscheint mir verhältnismäßig moderat...
  • Wiederholdungen und allgemein verschiedene "Abschnitte" beginnen meist an Taktlinien, aber im allgemeinen mitten in der Zeile. Ich halte es für vorteilhaft, wenn größere Abschnitte/Sinneinheiten nicht zufällig irgendwo mitten in der Coding-Zeile beginnen und enden, vor allem, wenn sie wie bei \repeat volta 2 {...} durch die geschweiften Klammern gruppiert sind...
  • In der Partitur hat man selbstverständlich immer andere Zeilenumbrüche als in den Einzelstimmen. Außerdem stehen die endgültigen Zeilenumbrüche in der Regel erst am Ende fest, wenn alles fertig ist und die Stellen zum Umblättern bekannt sind. Frage: Wie handhabst Du das, wenn sich ein Takt in eine andere Zeile verschiebt bzw. orientierst Du Dich an der Partitur oder an den Einzelstimmen?
  • Man kann (und sollte sogar) ja trotzdem den Zeilenbeginn einer eventuellen Vorlage als Kommentar im Quelltext vermerken.

Falls Du von einer fertigen Vorlage "abschreibst" und Du Dich an diesen Zeilen orientierst, entfällt natürlich meine Frage nach der Definition von "Zeile". Aber übersichtlich finde ich es auch nicht, wenn am Ende die gedruckten "Zeilen" nicht mit den "Zeilen" im Quellcode übereinstimmen...

Nur so aus Interesse...

Viele Grüße
Torsten

spinne

  • Member
Re: partcombine noch unausgereift?
« Antwort #8 am: Freitag, 22. März 2013, 23:28 »

  • Ich finde mich dank der Point-and-Click-Funktionalität sehr gut im Quellcode zurecht.
Das funkitoniert bei mir unter Linux und mit vim (nicht gvim) als Editor nicht. Hat jemand nen Tip? :-)

Zitat
  • Auch bei 24"-Widescreen lesen sich derart lange Zeilen doch wie ein Beipackzettel...?  :o
Das geht:-)
Zitat
  • Ich würde die Bildschirmbreite im Zweifelsfall lieber dazu nutzen, verschiedene Stimmen bei jeweils übersichtlicher Zeilenbreite nebeneinanderzustellen, dann liegen jeweils gleiche Takte auf gleicher Höhe. Bei Deiner zeilwenweisen Organisation kann es sein, daß die erste Violine 200 Stellen "lang" ist, während der Baß nur 20 Stellen braucht; da fände ich mich dann nicht zurecht, wenn ich den 4. Takt in der Zeile vergleichen müßte. ;)
Werd ich beim nächsten Projekt testen. Bin ja immer offen für Neues.
Zitat
  • 400 Takte entsprechen 400 Zeilen pro Stimme, wenn man jedem Takt seine eigene Zeile gönnt. Das erscheint mir verhältnismäßig moderat...
  • Wiederholdungen und allgemein verschiedene "Abschnitte" beginnen meist an Taktlinien, aber im allgemeinen mitten in der Zeile. Ich halte es für vorteilhaft, wenn größere Abschnitte/Sinneinheiten nicht zufällig irgendwo mitten in der Coding-Zeile beginnen und enden, vor allem, wenn sie wie bei \repeat volta 2 {...} durch die geschweiften Klammern gruppiert sind...
  • In der Partitur hat man selbstverständlich immer andere Zeilenumbrüche als in den Einzelstimmen. Außerdem stehen die endgültigen Zeilenumbrüche in der Regel erst am Ende fest, wenn alles fertig ist und die Stellen zum Umblättern bekannt sind. Frage: Wie handhabst Du das, wenn sich ein Takt in eine andere Zeile verschiebt bzw. orientierst Du Dich an der Partitur oder an den Einzelstimmen?
Beim aktuellen Projekt hab ich aus bestehenden Stimmen eine Partitur erzeugt und mich demnach an diesen Einzelstimmen orientiert. Daher hat das eigentlich so ganz gut funktioniert.
Zitat
  • Man kann (und sollte sogar) ja trotzdem den Zeilenbeginn einer eventuellen Vorlage als Kommentar im Quelltext vermerken.

Falls Du von einer fertigen Vorlage "abschreibst" und Du Dich an diesen Zeilen orientierst, entfällt natürlich meine Frage nach der Definition von "Zeile". Aber übersichtlich finde ich es auch nicht, wenn am Ende die gedruckten "Zeilen" nicht mit den "Zeilen" im Quellcode übereinstimmen...

Nur so aus Interesse...

Viele Grüße
Torsten

Aber danke für die Tips. Ich möchte ja auch meine Eingabemethode weiter optimieren:-)
Gruss
Holger

fugenkomponist

  • Member
Re: partcombine noch unausgereift?
« Antwort #9 am: Samstag, 23. März 2013, 10:39 »

  • Ich finde mich dank der Point-and-Click-Funktionalität sehr gut im Quellcode zurecht.
Das funkitoniert bei mir unter Linux und mit vim (nicht gvim) als Editor nicht. Hat jemand nen Tip? :-)
Du könntest mal frescobaldi ausprobieren. Der hat allerdings leider keinen vim-Input-Mode (mehr). Alternativ, falls jemand eine solche Funktionalität für vim findet, wär ich auch dankbar für Hinweise ;)

Arnold

  • Member
Re: partcombine noch unausgereift?
« Antwort #10 am: Montag, 25. März 2013, 10:29 »

... Das Werk hat 400 Takte. ... Das ganze Projekt ist mittlerweile "etwas" umfangreich" geworden. Mein Rechner (4-Kern AMD mit 8GB RAM) braucht fast 2 Stunden um die gesamte Partitur zu erzeugen.
...


Hallo,

deine Geduld dabei ist fast zu bewundern. Da hätte ich schon längst einen Thread über Beschleunigungsmöglichkeiten eröffnet -oder gibt's da schon einen?
Zumindest, wenn die Partitur (mit einem CPU-Thread) so lange dauert, dann kann man (genügend RAM vorausgesetzt) in der gleichen Zeit als paralelle Prozesse in den anderen Kernen die Einzelstimmen übersetzen. Und als "kleiner Hobby-Programmierer mit Postscript-Erfahrung" würde ich wohl die Paritur in Abschitte einteilen (geht am besten, wenn es einzelne Sätze sind), diese nur in ein PS übersezten, und die einzelen Postscript-Zwischendateien danach zu einem großen PDF vereinen.
Übrignes, schon »LILYPOND_GC_YIELD=100« ausprobiert - diese Zuweisung der Umgebungsvarible brachte auf meinem Rechner fast eine Verdopplung der Geschwindigkeit (bei meistens wesentlich kleineren Partituren).

Arnold

P.S. Bei Rückfragen zu »Methoden zur Beschleudingung der Übersetzung« bitte einen neuen Thread anlegen - sonst findet man dieses Thema nicht mehr!

spinne

  • Member
Re: partcombine noch unausgereift?
« Antwort #11 am: Montag, 25. März 2013, 11:59 »
Hallo,

deine Geduld dabei ist fast zu bewundern. Da hätte ich schon längst einen Thread über Beschleunigungsmöglichkeiten eröffnet -oder gibt's da schon einen?
Zumindest, wenn die Partitur (mit einem CPU-Thread) so lange dauert, dann kann man (genügend RAM vorausgesetzt) in der gleichen Zeit als paralelle Prozesse in den anderen Kernen die Einzelstimmen übersetzen. Und als "kleiner Hobby-Programmierer mit Postscript-Erfahrung" würde ich wohl die Paritur in Abschitte einteilen (geht am besten, wenn es einzelne Sätze sind), diese nur in ein PS übersezten, und die einzelen Postscript-Zwischendateien danach zu einem großen PDF vereinen.
Übrignes, schon »LILYPOND_GC_YIELD=100« ausprobiert - diese Zuweisung der Umgebungsvarible brachte auf meinem Rechner fast eine Verdopplung der Geschwindigkeit (bei meistens wesentlich kleineren Partituren).


Hallo,
8GB Ram. Die Einzelstimmen sind für mich uninteressant, ich brauche nur die Partitur:-) Diese Stück besteht aus einem Teil (keine Sätze). Ich liess die Partitur dann halt über Nacht oder tags über berechnen wenn ich eh nicht da bin oder was anderes mache. Da spielt es dann keine grosse Rolle ob es eine oder zwei Stunden dauert:-) Mit Beschleunigungsmöglichkeiten hab ich mich noch nicht beschäfftigt.

lg
Holger