Autor Thema: Wiederholung: zweite Klammer schließen vor Coda  (Gelesen 11781 mal)

rolinux

  • Member
Wiederholung: zweite Klammer schließen vor Coda
« am: Dienstag, 30. Dezember 2008, 08:29 »
Hallo!

Ich habe eine Wiederholung mit zwei Klammern. Die zweite Klammer steht am Zeilenanfang, danach steht die Coda, die aber nicht direkt von Klammer zwei angesprungen wird.
Jetzt sollte Klammer zwei sinnigerweise vor der Coda geschlossen werden.

Im Handbuch habe ich auf Seite 105 was gefunden:
\set Score.repeatCommands = #'((volta #f) (volta "95") end-repeat)
Aber damit komme ich nicht klar, u.a. weil ich die Bedeutung der einzelnen Elemente nicht kapiere.

Kann mir da jemand helfen?

Ach ja: Version 2.11.64

Gruß
rolinux

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #1 am: Dienstag, 30. Dezember 2008, 11:18 »
Die Elemente start-repeat und end-repeat sind für die Taktstriche,
kommen wohl im Musikablauf abwechselnd vor.

Die (volta  ... ) Elemente sind für die Klammern,
(volta text) für den Klammeranfang und (volta #f) für das Klammerende,
kommen im Musikablauf auch abwechselnd vor.

Für diesen Fall braucht's folgenden Klammerelementenablauf:
musik (volta "1") musik (volta #f) (volta "2") musik (volta #f) musik

Ein oder mehrere Elemente legt man zwischen den Musikabschnitten mit
\set Score.repeatCommands = #'( ein_oder_mehrere_Elemente )

Für den Abschluss vom zweiten Klammer braucht's also
\set Score.repeatCommands = #'((volta #f))

Aber Achtung: in der gleichen Wiederholung die obige manuelle repeatCommands nicht mit
\repeat bzw. \alternative mischen. Diese erzeugen unsichtbar ihre eigene repeatCommands.

Gruss

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #2 am: Freitag, 2. Januar 2009, 09:33 »
Hallo comper und ein gutes neues Jahr!

Hab ich mal eingebaut:
c'4 c'8. c'16 bes2   a8. a16 a8. a16 g8. g16 g8. g16
\set Score.repeatCommands = #'((volta "1")) f1 \set Score.repeatCommands = #'((volta #f))
\bar ":|" \break
\set Score.repeatCommands = #'((volta "2")) f2 b4\rest c'8. c'16
\set Score.repeatCommands = #'((volta #f)) \bar "||"
a8.^\markup { \musicglyph #"scripts.coda" } a16 a8. a16   c'8. c'16 c'8. c'16   f'1 \bar "|."

Aber lilypond bringt mir immer die Warnung "Wiederholungskasten bereits vorhanden, wird vorzeitig beendet". Und die zweite Klammer wird einfach nicht geschlossen. Grmpf!

Gruß
rolinux

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #3 am: Freitag, 2. Januar 2009, 11:44 »
Zur Warnung.
In Score.repeatCommands steht vorübergehend notiert, welche Wiederholelemente gelten sollen.
Diese Liste wird unmittelbar vor dem nächsten Musikabschnitt ausgewertet.
Nach der Auswertung ist sie wieder leer. 
Der Zauberspruch \set Score.repeatCommands sagt wie die Liste sein soll.
Hier hat der Zauberlehrling den Spruch zweimal benützt,
und der zweite Spruch hat den ersten Spruch aufgehoben.
Man hat nur einen Wunsch, der darf aber umfassend sein.

Danke gleichfalls

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #4 am: Freitag, 2. Januar 2009, 12:25 »
Zu Grmpf.
Die zweite Klammer ist doch abgeschlossen, aber ohne senkrechten Strich.
Ein senkrechter Strich weist auf einen Sprung hin: 
  der Nachbar-Takt kommt nicht als nächstes dran, oder
  der wird auch von anderswo her angesprungen.

Und in diesem Schnipsel fehlt dem Leser etwas am Ende von Takt 4;
Da CapoDal Segno?
Ohne sowas kann es doch keinen Coda-Sprung geben.

Lilypond geht's ähnlich, schaut aber nicht auf Da Capo,
sondern auf die Taktstrichgestaltung - ob sie einen Sprung impliziert. 
Einfach- und auch Doppelstrich machen das nicht.
Hier Lilypond's Geheimliste:    :|   |:   |.   :|:    .|

Gruss

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #5 am: Freitag, 2. Januar 2009, 13:39 »
Hallo comper!

Hä? (ok, nicht sehr intelligente Wortwahl, aber treffend  ;) )
Ist die zweite Klammer jetzt abgeschlossen oder nicht?

(Dal Segno usw. hab ich hier für's Forum absichtlich rausgenommen, damit da nicht allzuviel überflüssiges steht. Ist ja nur eine Navigationshilfe für den Sänger. Steht am Ende der zweiten Klammer.)

\bar ".|" erzeugt den gleichen Doppel-Taktstrich wie am Ende, nur umgekehrt. Und mittendrin will ich das nicht haben. Da will ich einen ganz normalen Doppel-Taktstrich mit \bar "||".
Die anderen, die Du da auflistest, kenne ich und benutze ich z.T. schon.

Und was hat's jetzt mit dem \set Score.repeatCommands auf sich? Wenn der nach der ersten Auswertung (Klammer 1) wieder leer ist, kann ich dem doch für die nächste Auswertung (Klammer 2) wieder was sagen, oder?

Gruß
rolinux

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #6 am: Freitag, 2. Januar 2009, 16:10 »
Zu Hä.
In diesem Fall müssen wir wahrscheinlich mogeln:
dem Klammer etwa einen "|." zeigen, und dem Leser einen "||".
Dazu braucht's z.B.
dochDoppelstrich  = { \once \override Staff.BarLine  #'glyph-name = #"||" }

Und für den Zauberlehrling:
zwischen f1 und f2 ist keine Musik, gibt's also nur eine Auswertung (gerade vor f2).

f1
\set Score.repeatCommands = #'((volta #f) (volta "2")) \bar ":|" \break
f2 b4\rest c'8. c'16
\set Score.repeatCommands = #'((volta #f)) \bar "|." \dochDoppelstrich

Gruss
« Letzte Änderung: Freitag, 2. Januar 2009, 20:55 von comper »

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #7 am: Samstag, 3. Januar 2009, 15:25 »
Hallo mein Meister... :->

also, die Warnung ist verschwunden. Ist etwas verwirrend, dass die volta 2 VOR dem Wiederholungszeichen stehen muss...

Aber dein Tipp mit dem override funktioniert nicht. Gleicher Effekt wie wenn ich gleich \bar "||" hingeschrieben hätte.
Ohne den override mit z.B. \bar ".|" wird die Klammer abgeschlossen, mit override nicht.
???

Gruß
der Zauberlehrling

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #8 am: Samstag, 3. Januar 2009, 18:03 »
Zur Reihenfolge:
Im aktuellen Beispiel spielt die Befehlsanordnung in der Linie
\set Score.repeatCommands = #'((volta #f) (volta "2")) \bar ":|" \break
keine Rolle. (Ausprobiert?) Also, muss nicht.
Und \bar ":|" ist sowieso nur schnipselhalber, oder?.
Für eine wirksame Wiederholung braucht's end-repeat.

Heute hab ich von 2.10.33 auf 2.12.1 gewechselt,
und diese neue Version verrät wie schwach der Spruch eigentlich war.
Also, statt glyph-name nur glyph. Dann geht's mit beiden Versionen.

Gruss

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #9 am: Dienstag, 6. Januar 2009, 09:14 »
Hallo comper!

Hab jetzt auch die Version 2.12.1 installiert, in der Hoffnung, dass es damit besser wird. Aber es wird nicht besser! Egal, ob ich glyph-name oder glyph verwende. Die Klammer wird nicht abgeschlossen, wenn in der Partitur der Doppelstrich steht.

Wo findet man eigentlich diese ganzen Einstellmöglichkeiten? In der Doku, die ich runtergeladen habe (PDF) jedenfalls nicht.

Was meinst Du mit "wirksame Wiederholung"? Die Wiederholung ist wirksam, wenn sie auf dem Papier steht. Und wenn in meiner Partitur die Klammer 2 steht, ist die Wiederholung ja schon vorbei. Mein Problem ist ja die Klammer 2, nicht die Wiederholung.

Gruß
rolinux

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #10 am: Dienstag, 6. Januar 2009, 11:25 »
Zur Kontrolle: OkSchnipsel.ly allein funktioniert.
Wir brauchen jetzt einen erweiterten Schnipsel, der nicht funktioniert.

Zur wirksam: die midi-Datei dazu (inkl. \unfoldRepeats) wiederholt nichts.

Glyph wird hier erwähnt. Macht aber in diesem Fall kaum schlau.

Gruss

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #11 am: Dienstag, 6. Januar 2009, 11:40 »
Also bei mir kommt bei OkSchnipsel.ly das gleiche raus wie in meiner Partitur: ein Partiturende-Balken (Taktstrich gefolgt von dickem Balken) und kein Doppelstrich (||). Siehe Anhang.
Ansonsten hab ich's genauso gemacht wie Du in OkSchnipsel.ly.

Ich verwende Lilypond in Linux. Kann das was ausmachen?

Gruß
rolinux

etilli33

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #12 am: Dienstag, 6. Januar 2009, 19:58 »
Hallo,
ich habe mich jetzt auch mal an dem OkSchnipsel versucht. Habe nochmal den einfachen Code entworfen, der das Gleiche macht, weil die Variable dochDoppelstrich nicht das macht, was sie machen soll: in OkSchnipsel wird ein Ende-Taktstrich "|." ausgegeben.

\score{
\new Staff{
\repeat volta 2 {
c'4 c'8. c'16 bes2   

a8. a16 a8. a16 g8. g16 g8. g16 }


\alternative {
{f1}
{f2 b4\rest c'8. c'16}
}
\once \set Timing.whichBar = "|."
%\bar "||"
a8.^\markup { \musicglyph #"scripts.coda" } a16 a8. a16   c'8. c'16 c'8. c'16

f'1 \bar "|."
}
}

 Wenn man von meinem Beispiel das Kommentar wegnimmt, dann kommt wieder die offene Volta-Klammer zum Vorschein, wie gehabt. Es scheint, dass LilyPond nicht das Zeichen des Quelltextes interpretiert, sondern erst die Klammer, die im Notentext gesetzt wird, um zu entscheiden, ob eine Voltaklammer offen oder geschlossen sein soll.
Ich bin übrigens auch unter Linux, aber das sollte nun wirklich keinen Unterschied machen.

Also die Klammer ist ordentlich beendet, aber der letzte Kasten wird nur geschlossen, wenn der Ende-Doppelstrich dasteht, das hat Comper schon geschrieben. Und so leicht lässt sich LIlyPond nicht überlisten, einen Taktstrich schreiben und den anderen anzeigen.

Wenn von Comper keine Idee mehr kommt (ich habe leider auch nicht ganz verstanden, wie Volta gemacht wird und an welchen Schrauben man drehen kann, alles was es in IR gab, hat irgendwie nicht gepasst), würde ich vorschlagen, das Problem auf die englische Liste zu verschieben, da kann es gut jemanden geben, der die internen Geheimnisse etwas besser versteht.

Gruß
Till

comper

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #13 am: Mittwoch, 7. Januar 2009, 11:09 »
Entschuldigung! Ich habe Mist gebaut.
OkSchnipsel ist nicht OK.
Ich war so auf (für mich neue) Versionswechslerei konzentriert,
dass ich meine Strichverwechslerei nicht bemerkt haben.

Und jetzt?
Mit 2.10.33 konnte man gut mogeln, und jetzt scheint's nicht mehr.
Liegt wahrscheinlich an eine Verbesserung um 2.11.38 herum.
Das Schlupfloch ist zu, und nach diesem Ansatz weitersuchen, reizt mich nicht. 
Wäre alles kein spezielles Problem, wäre die Geheimliste zugänglich.
Aber in diesem Bereich ist sehr viel in C++ gemeisselt.

Also, eine Ebene tiefer mogeln gehen.
Nicht besonders lesbar oder anpassbar, aber es tut's.

dochDoppelstrich = {
  \once \override Staff.BarLine #'stencil = #ly:text-interface::print
  \once \override Staff.BarLine #'text = \markup {
    \postscript #"gsave
    currentpoint translate
    0.2 setlinewidth
    newpath
    -0.25 +2.0 moveto
    -0.25 -2.0 lineto
    +0.25 +2.0 moveto
    +0.25 -2.0 lineto
    stroke
    grestore" }
}

Gruss
« Letzte Änderung: Mittwoch, 7. Januar 2009, 11:11 von comper »

rolinux

  • Member
Re: Wiederholung: zweite Klammer schließen vor Coda
« Antwort #14 am: Mittwoch, 7. Januar 2009, 20:31 »
Hallo comper!
Das hat jetzt endlich funktioniert! Suuuuper! Viiielen Dank!
Ich werd den Code mal nehmen und mit der Doku ein bisschen knuddeln. Damit ich dann auch was lerne.

Gruß
rolinux