Autor Thema: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens  (Gelesen 2747 mal)

Arnold

  • Member
Hallo,

Nach Elaine Gould ist die Position von Schlüssel, Tonart und Takt gegenüber den Wiederholungszeichen stark kontextabhängig, z. Bsp. »zwischen Wiederholungsende- und Wiederholungsanfangszeichen« wie in Beispiel Nr. 1.
Mein erster Ansatz für den "Dazwischen-Fall" war, zwei sehr kurze Skips zwischen \cadenzaOn und \cadenzaOff einzufügen und zwischen diesen beiden die Schlüssel- Tonart- oder Taktwechsel, doch einerseits werden diese Skips im "Grob-Federwerk" viel zu sehr gedehnt, und dann gibt es noch Ärger mit den Ganztakt- und Mehrtaktpausen.
Diese Mikro-Skips habe ich gewählt, daß auch in der Midi-Aausgabe nicht viel passiert, falls ich vergesse diese Abschnitte wieder herauszufiltern.
Nach einigem Probieren habe ich immerhin durch ProportionalNotationDuration (und nur noch einem Skip) halbwegs brauchbare Ergebnisse erzielt - mit \partial am Taktstrich und mit \cadenaOn und \cadenzaOff in der Mitte des Taktes.
\version "2.18.2"
\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \cadenzaOn
      \time 3/4 \key bes \major
      s128*1/1024
      \cadenzaOff
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\cadenzaOn" "und" \italic "\\cadenzaOff" "am Taktende" } }
}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \partial 128*1/1024
      \time 3/4 \key bes \major
      s128*1/1024
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\partial" "– nicht praktikabel, wenn die Wiederholungszeichen in der Mitte eines Taktes stehen" } }
}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \grace {
        \time 3/4 \key bes \major
        s128*1/1024
      }
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\grace" "wären Vorschlagsnoten zu Anfang der zweiten Wiederholung nicht mehr zu handhaben" } }
}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \set Score.proportionalNotationDuration = #(ly:make-moment 1/80)
      \partial 128*1/1024
      \time 3/4 \key bes \major
      s128*1/1024
      \unset Score.proportionalNotationDuration
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\partial" "und" \italic "ProportionalNotationDuration" "(am Taktstrich)" } }
}

%{
\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*23 c'2.. e'16[ g'] }
      \set Score.proportionalNotationDuration = #(ly:make-moment 1/20)
      \partial 128*1/1024
      \time 3/4 \key bes \major
      s128*1/1024
      \unset Score.proportionalNotationDuration
      \repeat volta 2 { R2.*15 c'2 ~ c'8 e'16 g' }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\partial" "und" \italic "ProportionalNotationDuration" "(am Taktstrich)" } }
}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*22 \repeat unfold 2 { c'2.. e'16[ g'] } }
      \set Score.proportionalNotationDuration = #(ly:make-moment 1/20)
      \partial 128*1/1024
      \time 3/4 \key bes \major
      s128*1/1024
      \unset Score.proportionalNotationDuration
      \repeat volta 2 { R2.*14 \repeat unfold 2 { c'2 ~ c'8 e'16 g' }  }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\partial" "und" \italic "ProportionalNotationDuration" "(am Taktstrich)" } }
}
%}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \partial 4
      \repeat volta 2 { r4 R1*23 r2 r4 }
      \set Score.proportionalNotationDuration = #(ly:make-moment 1/80)
      \cadenzaOn
      \key bes \major
      s128*1/1024
      \cadenzaOff
      \unset Score.proportionalNotationDuration
      \repeat volta 2 { r4 R1*15 r2 r4}
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\cadenzaOn" und \italic "\\cadenzaOff" "innnerhalb des Takts, sowie mit" \italic "ProportionalNotationDuration" } }
}
Dennoch:
  • Dieses eingefügte Skip ist mir immernoch zu breit formatiert
  • Durch Ändern des Wertes von ProportionalNotationDuration entsteht oft ein Zeilenumbruch, obwohl es vom Platz her leicht in eine einzige Zeile passen würde.
  • Es stört mich, daß man unterschiedliche Syntax am regulären Taktstrich und innerhalb des Taktes anwenden muß
Hat jemand noch bessere Vorschläge oder Lösungen?

Arnold

kilgore

  • Member
Re: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens
« Antwort #1 am: Donnerstag, 18. August 2016, 11:20 »
Hallo Arnold,

Ich finde zunächst die Default-Ausgabe von Lilypond gar nicht so verkehrt:

\version "2.18.2"


\relative c' {
  \key f \major
  \compressFullBarRests
  \repeat volta 2 {  R1*24 }
  \time 3/4
  \key bes \major
  \repeat volta 2 { R2.*16 }
 
}

Das Beispiel von Gould auf Seite 234 sieht für mich dagegen etwas seltsam aus, auch wenn sie es für richtig hält. Trotzdem, habe dein erstes Beispiel geändert, allerdings nur "quick and dirty", aber es sieht dann so aus wie bei Gould:

\version "2.18.2"

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \cadenzaOn
      \time 3/4 \key bes \major
      s128*1/1024
      \cadenzaOff
      \once \override Score.BarLine.extra-offset = #'( -25 . 0 )
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "mit" \italic "\\cadenzaOn" "und" \italic "\\cadenzaOff" "am Taktende" \italic "und \override Score.BarLine.extra-offset " } }
}

Ich hoffe das hilft, wenn auch nur ein bisschen!

Gruß
kil

fugenkomponist

  • Member
Re: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens
« Antwort #2 am: Donnerstag, 18. August 2016, 13:14 »
Ich mißtraue Lösungen mit extra-offset ehrlich gesagt ein bisschen, weil da meistens das automatische Spacing dran kaputtgeht. Nicht immer schlimm und sichtbar, aber mit X/Y-offset, X/Y-extent und extra-spacing-width/height lässt sich auch einiges machen ;)
\version "2.18.2"

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 }
      \cadenzaOn
      \time 3/4 \key bes \major
      \once \override Staff.TimeSignature.extra-spacing-width = #'(0 . -inf.0)
      \once \override Staff.KeySignature. extra-spacing-width = #'(0 . -inf.0)
      \once \override NoteColumn.X-offset = -5
      \once \hideNotes
      r128
      \bar ".|:"
      \cadenzaOff
      \repeat volta 2 { R2.*16 }
    }
  }
  \layout {
    system-count = 1
  }
}
Ich füge hier eine (unsichtbare) 128stel-Pause ein und schiebe die in die Tonart- und Taktartangabe rein (dafür muss ich deren spacing nach rechts aufweichen). Aus irgendeinem Grund ist der \bar-Befehl nötig; die Mehrtaktpause rechnet sonst anscheinend damit, dass der Taktstrich weiter links steht …

Perfekt ist das auch nicht, aber vielleicht hilfts ;)
« Letzte Änderung: Donnerstag, 18. August 2016, 13:15 von fugenkomponist »

Arnold

  • Member
Re: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens
« Antwort #3 am: Freitag, 19. August 2016, 09:11 »
Hallo,

da all das letztlich nur Workarounds sind, habe ich mir überlegt, in welche (zu erweiternde) Lilypond-Logik das hineinpassen könnte:
Wenn alle Varianten mit einem entsprechenden \once \override Score.BreakAlignment.break-align-orders = ... abgedeckt werden könnten, fände ich es ideal. Derzeit sollte alles außer den »zwei Taktstrichen mit etwas dazwischen« möglich sein.
Doch, warum sollte es in Zukunt nicht möglich sein, zwei Barline-Grobs zu einer logischen Barline zu erzeugen? Dazu könnte die Liste für den middle-of-staff-Wert in break-align-orders-Vektor etwa so aussehen:
»'(span-bar breathing-sign end-of-line-staff-bar key clef time-signature start-of-line-staff-bar)«.
  • Man gibt also an, daß der linke Taktstrich des Taktstrichpaars die end-of-line-Ausprügung annehmen soll, der rechte die start-of-line-Ausprägung.
  • Bei den andern GROBs mit break-visibility (z. Bsp. \mark, \tempo, BarNumbers) muß die And-Verknüfpung zweier Werte herangezogen werden (z. Bsp. middle-of-line AND end-of-line für den linken Taktstrich) um die Sichtbarkeit zu steuern.
  • Sollte (versehentlich) kein GROB zwischen die beiden Taktstrichen zu platzieren sein, dann sollten die beiden Taktstriche mit einem kleinem Abstand (Wert von »gap«?) getrennt bleiben. Das scheint mir einfacher als die die beiden Taktstiche wieder zu einem einzigen zu verschmelzen.

Erkennt ihr noch weitere Handicaps?

Tivial wäre eine solche Erweiterung sicherlich nicht, allenfalls im Vergleich zum wohlbekannten Issue 34.

Übrigens, beim Musizieren aus Einzelstimmen bevorzuge ich sehr wohl die Beispiele von Elaine Gould (zumindest bei handgeschriebenen Noten - oder ich gebe mir alle Mühe, diese an einen Zeilenumbruch zu platzieren).

Arnold

Arnold

  • Member
Re: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens
« Antwort #4 am: Montag, 22. August 2016, 09:00 »
Hallo,

und jetzt habe ich noch einen weiteren Workaround gefunden, aber nur für Einzelstimmen. Genauer gesagt fehlt in StaffGroup oder GrandStaff der BarLine-Spanner wenn ich das BreathingSign umfunktioniere.
\version "2.18.2"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Prove of concept:
% Abuse the breathing-sign as auxiliary-staff-bar
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

#(define (end-repeat-sign-ps my-grob)
  (let*
   ((sz (ly:grob-property my-grob 'font-size 0.0))
    (line-thickness (layout-line-thickness my-grob))
    (hair-thickness (* (ly:grob-property my-grob 'hair-thickness 1.9)
                       line-thickness))
    (thick-thickness (* (ly:grob-property my-grob 'thick-thickness 6.0)
                       line-thickness))
    (kern-width (* (ly:grob-property my-grob 'kern 3.0)
                       line-thickness))
    (dot (ly:font-get-glyph (ly:grob-default-font my-grob) "dots.dot"))
    (dot-y-length (interval-length (ly:stencil-extent dot Y)))
    (mult (magstep sz))
    (r0 (* 0.5 dot-y-length))
    (p0 0.0)
    (p1 (- p0 thick-thickness))
    (p2 (- p1 kern-width))
    (p3 (- p2 hair-thickness))
    (p4 (- p3 (+ kern-width r0)))
    (p5 (- p4 r0))
    (h (* -4.0 mult))
    (h1 (* -1.5 mult))
    (h2 (* -2.5 mult))
   )
   (markup
    #:line
    (#:with-dimensions
     (cons p5 0.0)
     (cons h 0.0)
     (#:postscript
      (string-concatenate
       (list
        " newpath 0 setlinewidth 1 setlinejoin 1 setlinecap \n"
        " " (number->string p0) " 0 moveto \n"
        " " (number->string p0) " " (number->string h) " lineto \n"
        " " (number->string p1) " " (number->string h) " lineto \n"
        " " (number->string p1) " 0 lineto \n"
        " " (number->string p0) " 0 lineto \n"
        " closepath fill \n"
        " " (number->string p2) " 0 moveto \n"
        " " (number->string p2) " " (number->string h) " lineto \n"
        " " (number->string p3) " " (number->string h) " lineto \n"
        " " (number->string p3) " 0 lineto \n"
        " " (number->string p2) " 0 lineto \n"
        " closepath fill \n"
        " " (number->string p4) " " (number->string h1) " " (number->string r0)
        "  0 360 arc closepath fill \n"
        " " (number->string p4) " " (number->string h2) " " (number->string r0)
        "  0 360 arc closepath fill \n"
       )
      )
     )
    )
   ) 
  )
 )

\defineBarLine ".|:-0" #'("" ".|:" ".| ")

Dazwischen = {
  \once \override BreathingSign #'text = #end-repeat-sign-ps
  \breathe
  \once \set Score.doubleRepeatType = ".|:-0"
  \once \override Score.BreakAlignment.break-align-orders = ##((
    ; EOL
    left-edge
    cue-end-clef
    ambitus
    breathing-sign
    clef
    cue-clef
    ; staff-bar
    key-cancellation
    key-signature
    time-signature
    custos
   )(
    ; unbroken
    left-edge
    cue-end-clef
    ambitus
    breathing-sign
    clef
    cue-clef
    key-cancellation
    key-signature
    time-signature
    staff-bar
    custos
   )(
    ; BOL
    left-edge
    ambitus
    ; breathing-sign
    clef
    key-cancellation
    key-signature
    time-signature
    staff-bar
    cue-clef
    custos
  ))
}

\score {
  \new Staff {
    \new Voice {
      \compressFullBarRests
      \override Score.BarNumber.break-visibility = ##(#t #t #t)
      \time 4/4 \key f \major
      \repeat volta 2 { R1*24 \Dazwischen }
      \time 3/4 \key bes \major \noBreak
      \repeat volta 2 { R2.*16 \Dazwischen }
      \time 4/4 \key es \major \break
      \repeat volta 2 { R1*32 }
      % \time 3/4 \key bes \major \noBreak
      % \repeat volta 2 { R2.*16 }
      % \time 4/4 \key es \major \break
      % \repeat volta 2 { R1*32 }
    }
  }
  \layout {
    ragged-right = ##f
    indent = 0 \mm
  }
  \header { piece = \markup { "\\breathe als Hilfstaktstrich mißbraucht" } }
}

Arnold

harm6

  • Member
Re: Schlüssel, Tonart und Takt 'in der Mitte' des Wiederholungszeichens
« Antwort #5 am: Montag, 22. August 2016, 09:47 »
Hallo Arnold,

leider habe ich im Moment zu wenig Zeit mich in ein weiteres komplexes coding zu stürzen.
Aber meine Idee ist BreakAlignGroup anzugehen ähnlich wie ich es hier gemacht habe.
D.h. die 'elements auslesen und die relevanten stencils neu zu konfigurieren, den zusätzlichen BarLine-stencil gespiegelt am Schluß.

Allerdings wäre auch dann
Zitat
Genauer gesagt fehlt in StaffGroup oder GrandStaff der BarLine-Spanner
das Hauptproblem ...

Gruß,
  Harm