Autor Thema: geschweifte Klammer über zwei Systeme  (Gelesen 5282 mal)

DocTaxon

  • Member
geschweifte Klammer über zwei Systeme
« am: Sonntag, 5. Mai 2013, 13:45 »
Hallo! Ich habe ein GrandStaff mit 3 Systemen. Über die oberen zwei Systeme soll, ähnlich wie eine Arpeggio-Klammer, eine geschweifte Klammer { gehen.  Bildlich kann man das hier sehen, vor der ersten Note: http://www.papstmusik-benedicere.de/Noten29B.jpg . Kann mir jemand sagen, wofür diese Klammer steht und wie ich diese in Lilypond einbasteln kann?

Danke, Doc Taxon ...

fugenkomponist

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #1 am: Sonntag, 5. Mai 2013, 20:12 »
\new GrandStaff <<
    \new PianoStaff <<
        \new Staff { … }
        \new Staff { … }
    >>
    \new Staff { … }
>>
Der PianoStaff sorgt u. a. auch für die durchgezogenen Taktstriche.

Edit: was mich grad aber wundert, ist die Tatsache, dass LilyPond 2.16.0 den einzelnen Staff über statt unter den PianoStaff schreibt. Hat jemand eine Idee, warum das so ist?

Edit: Gilt auch für 2.17.17. Minimalbeispiel:
\version "2.17.17"

\score {
  \new GrandStaff <<
    \new PianoStaff <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { e'1 }
  >>
}
« Letzte Änderung: Sonntag, 5. Mai 2013, 20:25 von fugenkomponist »

DocTaxon

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #2 am: Sonntag, 5. Mai 2013, 20:27 »
ich meinte aber nicht die geschweifte Klammer vor dem Notenschlüssel sondern hinterm Notenschlüssel.

Be-3

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #3 am: Sonntag, 5. Mai 2013, 21:14 »
ich meinte aber nicht die geschweifte Klammer vor dem Notenschlüssel sondern hinterm Notenschlüssel.

Hallo Doc,

das mit dem "abgewandelten" Arpeggio ist schon genau der richtige Ansatz, wie man daraus eine Klammer macht, wird in diesem Snippet beschrieben.

Ich habe die eckige Klammer testweise durch eine geschweifte Klammer mit einer I davor ersetzt, aber es gibt noch keine gescheite Lösung für die Größe/Positionierung. Auch, weil die Klammer im Beispiel nicht alle Noten umfaßt, sondern kleiner ist...

In Deinem Notenbeispiel zeigt diese Klammer, daß beide Hände gemeinsam auf Manual I spielen sollen.



@fugenkomponist:

\new GrandStaff <<
    \new PianoStaff <<
        \new Staff { … }
        \new Staff { … }
    >>
    \new Staff { … }
>>
Der PianoStaff sorgt u. a. auch für die durchgezogenen Taktstriche.

Edit: was mich grad aber wundert, ist die Tatsache, dass LilyPond 2.16.0 den einzelnen Staff über statt unter den PianoStaff schreibt. Hat jemand eine Idee, warum das so ist?

Das auf den ersten Bllick seltsame Verhalten liegt an der Schachtelung von GrandStaff/PianoStaff.
Die beiden sind nicht dafür ausgelegt, einander zu "enthalten":

Zitat von: Doku
Context GrandStaff can contain ChordNames, DrumStaff, Dynamics, FiguredBass, Lyrics, RhythmicStaff, Staff and TabStaff.
Das kann man ihnen jedoch beibringen, indem man \accepts "PianoStaff" mit aufnimmt:

Zitat
\version "2.17.17"

\score {
  \displayMusic \new GrandStaff \with { \accepts "PianoStaff" }
<<
  \new PianoStaff <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { e'1 }
  >>
}

Ich würde aber eher dafür plädieren, den (nicht nur überflüssigen, sondern auch unangebrachten) äußeren GrandStaff wegzulassen. ;)

Viele Grüße
Torsten

fugenkomponist

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #4 am: Sonntag, 5. Mai 2013, 21:31 »
Hmja, die Klammer *nach* den Schlüsseln hab ich irgendwie total übersehn. Deshalb ging meine Antwort auch total am Thema vorbei, sorry.

Zum Thema geschachtelte \…Staffs: wieder was gelernt :) Irgendwie hab ich nicht damit gerechnet, dass das nicht geht (obwohl es ja klar ist, dass man das so nicht braucht). Und mir war in dem Augenblick auch nicht klar, dass ja der GrandStaff das Ding mit der geschweiften Klammer ist, weil ja nur die Klammer vom PianoStaff gedruckt wurde. Den äußeren GrandStaff kann man natürlich weglassen. Hatte den nur irgendwie aus dem Text des ersten Posts übernommen, ohne mir über die nicht vorhandene Notwendigkeit klarzuwerden.

Was ja geht, sind GrandStaffs/PianoStaffs innerhalb von StaffGroups. Die braucht man aber auch, z. B. um die Geigen innerhalb der Streicher in einer Orchesterpartitur zusammenzufassen oder so.

DocTaxon

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #5 am: Sonntag, 5. Mai 2013, 21:34 »
ver 2.16.0

wenn ich PianoStaff verwende, wird in der midi immer nur Piano gespielt, trotz

    \set midiInstrument = #"church organ"

kannst Du mir Dein Beispiel mal zeigen, mit geschweifter Klammer hinterm Notenschlüssel und der I davor?

Vielen Dank, -- Doc Taxon

Be-3

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #6 am: Sonntag, 5. Mai 2013, 21:58 »
wenn ich PianoStaff verwende, wird in der midi immer nur Piano gespielt, trotz

    \set midiInstrument = #"church organ"

Das MIDI-Instrument muß auf Staff-Ebene gesetzt werden, dann bezieht es sich auf den Staff.
    \set Staff.midiInstrument = #"church organ"


kannst Du mir Dein Beispiel mal zeigen, mit geschweifter Klammer hinterm Notenschlüssel und der I davor?

Meine manuell für den Einzelfall zustammengestoppelte Baustellen-Lösung:

\version "2.16.0"

#(define (arpeggio-chord-brace grob)
    (grob-interpret-markup grob
      (markup #:lower 6 #:concat
        (#:lower 0.8 "I" #:hspace 1.5 #:left-brace 80))))


csBrace = {
  \once\override PianoStaff.Arpeggio #'stencil = #arpeggio-chord-brace
  \once\override PianoStaff.Arpeggio #'X-extent = #'(0 . 2.5)
  \once\override PianoStaff.Arpeggio #'Y-extent = #'(-1 . 1)
}


{
 
\new PianoStaff \with { connectArpeggios = ##t } <<
  \new Staff {
    \relative c'' {
      \csBrace
      \times 2/3 { <des f bes des>2--\ff\arpeggio q-- q-- }
    }
  }
  \new Staff {
    \relative c' {
       \times 2/3 { <d! g! b!>2--\arpeggio <des f bes>-- <b! e gis>-- }
    }
  }
>>
}

« Letzte Änderung: Sonntag, 5. Mai 2013, 22:16 von Be-3 »

harm6

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #7 am: Montag, 6. Mai 2013, 02:18 »
Hallo,

Zitat von: Torsten
Ich habe die eckige Klammer testweise durch eine geschweifte Klammer mit einer I davor ersetzt, aber es gibt noch keine gescheite Lösung für die Größe/Positionierung. Auch, weil die Klammer im Beispiel nicht alle Noten umfaßt, sondern kleiner ist...

im folgenden mein Versuch die Sache anzugehen.
Zufrieden bin ich damit aber auch noch nicht.
Mitunter gibt es auch Warnungen (je nachdem wie man die Größe der Klammer verändert), die ich nicht abstellen kann, obwohl ich weiß woher sie kommen.

\version "2.16.0"
     
brace =
#(define-music-function (parser location adjust-size roman-number)(number? string?)
#{
\once \set GrandStaff.connectArpeggios = ##t

\once \override Arpeggio #'Y-extent =
          #(ly:make-unpure-pure-container
             ly:grob::stencil-height
             (lambda (grob start end) (ly:grob::stencil-height grob)))
       
        \once \override GrandStaff.Arpeggio #'stencil =
          #(lambda (grob)
            (let* ((default-stil (ly:arpeggio::print grob))
                   (positions (ly:grob-property grob 'positions))
                   (center-pos (interval-center positions))
                   (layout (ly:grob-layout grob))
                   (pt (ly:output-def-lookup layout 'pt))
                   (y-ext (ly:stencil-extent default-stil Y))
                   (size (interval-length (interval-widen y-ext adjust-size)))
                   (new-stil
                     (grob-interpret-markup grob
                       (markup
                           (#:left-brace (/ size pt)))))
                   (roman-num
                     (grob-interpret-markup grob (markup #:vcenter roman-number)))
                   (new-stil-x-length
                     (interval-length
                       (ly:stencil-extent new-stil X))))
            (ly:stencil-add
              (ly:stencil-translate
                new-stil
                (cons new-stil-x-length center-pos))
              (ly:stencil-translate
                roman-num
                (cons (* -2 new-stil-x-length) center-pos)))))
#})

\score {
  \new GrandStaff
    <<
    \new Staff = "upper1"
    \new Voice \relative c'' {
    \brace #-2 #"I"
        <des f bes des>2\arpeggio
    }
    \new Staff = "upper2"
    \new Voice \relative c' {
        <d! g! b!>2\arpeggio
    }
    >>
  \layout { }
}


Gruß,
  Harm
« Letzte Änderung: Montag, 6. Mai 2013, 02:23 von harm6 »

DocTaxon

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #8 am: Montag, 6. Mai 2013, 18:33 »
naja, da beim Kompilieren von Harms Code Fehler passieren, habe ich mal das von Be-3 aus der vorherigen Antwort gewählt.

ich habe im csBrace {} noch zusätzlich
  \once\override PianoStaff.Arpeggio #'font-size = #-3
  \once\override PianoStaff.Arpeggio #'font-shape = #'bold
eingesetzt.

Jetzt ist mir das "bold" aber nicht "bold" genug. Wie kann ich die römische I "bolder" machen? Wie könnte ich die Klammer zusammen mit der "I" noch eine Notenkopfbreite etwa nach links verschieben?

Be-3

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #9 am: Montag, 6. Mai 2013, 21:17 »
Hallo Doc,

ich verstehe zwar nicht, warum Harms Lösung bei Dir nicht funktioniert (bei mir tut sie's einwandfrei), aber Deine Markup-Probleme bzw. Änderungswünsche sind ja davon eigentlich unabhängig.

  \once\override PianoStaff.Arpeggio #'font-shape = #'bold

[...]

Jetzt ist mir das "bold" aber nicht "bold" genug. Wie kann ich die römische I "bolder" machen?

Bei genauerer Betrachtung zeigt sich, daß Deine Verfettungsaktion keinerlei Auswirkungen hat. ;)
Diesmal liegt's nicht am falschen Kontext, sondern an der falschen Eigenschaft. Für den Schriftschnitt (bold, italic usw.) ist font-series, nicht font-shape zuständig. Dann sollte es auch fett genug sein. :)


Wie könnte ich die Klammer zusammen mit der "I" noch eine Notenkopfbreite etwa nach links verschieben?

Zunächst einmal: die kleinere Schrift-Größe erfordert eine etwas andere Ausrichtung der römischen Zahl vor der Klammer, sonst sitzt sie zu tief und zu weit von der Klammer entfernt:

    #(define (arpeggio-chord-brace grob)
        (grob-interpret-markup grob
          (markup #:lower 6 #:concat
            (#:lower 0.6 "I" #:hspace 1.1 #:left-brace 80))))


Die Verschiebung der Klammer nach links kann man erreichen, indem man die linke Grenze des Klammer-Markups nach rechts verschiebt. Das ist auch der Grund, warum ich manuell die X- und Y-extents gesetzt habe, dann kann man damit schön spielen.
Das geänderte csBrace-Makro sieht dann so aus (Änderungen rot):

    csBrace = {
      \once\override PianoStaff.Arpeggio #'stencil = #arpeggio-chord-brace
      \once\override PianoStaff.Arpeggio #'X-extent = #'(1 . 2.5)
      \once\override PianoStaff.Arpeggio #'Y-extent = #'(-1 . 1)
      \once\override PianoStaff.Arpeggio #'font-size = #-3
      \once\override PianoStaff.Arpeggio #'font-series = #'bold
    }



Viele Grüße
Torsten

DocTaxon

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #10 am: Montag, 6. Mai 2013, 21:55 »
oh, falsch verstanden: bei mir funktioniert die Version von Harm auch. Nur im Kompilierungsbericht sind Fehler, die, wie Harm auch selbst eingeräumt hat, er nicht zu beheben weiß.

Ansonsten passt es jetzt ja schon sehr gut. Vielen Dank ...

harm6

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #11 am: Dienstag, 7. Mai 2013, 00:23 »
Zitat von: DocTaxon
bei mir funktioniert die Version von Harm auch. Nur im Kompilierungsbericht sind Fehler, die, wie Harm auch selbst eingeräumt hat, er nicht zu beheben weiß.

Das ist nicht ganz richtig.
Ich schrieb von Warnungen und nicht von Fehlern!

Soweit ich weiß werden bei der Berechnung eines mittels connectArpeggios = ##t veranlaßten, durchgehenden Arpeggios, das obere Ende des oberen, einzelnen Arpeggios sowie das untere Ende des unteren, einzelnen Arpeggios zu Grunde gelegt.

Wenn ich aber (um das durchgehende Arpeggio zu verkürzen) das obere Ende unter das untere Ende eines einzelnen Arpeggios lege, so ist die interval-length per definitionem 0. In diesem Fall gibt es natürlich keine Klammer und eine Warnung wird ausgegeben. Ebenso falls die Klammer einen Minimalwert (10.5 pt) unterschreitet.
Das trifft tatsächlich aber nur für die einzelnen, nicht verbundenen Arpeggios zu. Das verbundene ist schon auf Grund des Abstands der beiden Systeme viel zu groß als daß es da meiner Meinung nach Probleme geben könnte.

Ich hätte also auch schreiben können: Ignorier die Warnungen.
Ich bin allerdings auch ein Fan von Kompilierungen ohne jegliche Fehler und Warnungen.
Es gibt die Möglichkeit in manchen Fällen Warnungen abzustellen, tatsächlich gibt es auch die Option keinerlei Warnungen ausgeben zu lassen (ist allerdings eine gaaanz schlechte Idee).
Die Funktion ly:expect-warning gibt eine Warnung aus, falls keine erwartete Warnung auftaucht. Ist also auch nicht das was man haben möchte.

Stattdessen habe ich den Code so geändert, daß zumindest die Klammer minimaler Größe für die einzelnen Arpeggios benutzt wird.
Das hat soweit ich sehe keinerlei Auswirkung auf das verbundene Arpeggio und damit den sichtbaren output, stellt aber die unnötigen Warnungen ab.

Darüberhinaus habe ich "I" fett und kleiner gemacht.

\version "2.16.0"
     
brace =
#(define-music-function (parser location adjust-size roman-number)(number? string?)
#{
\once \set GrandStaff.connectArpeggios = ##t

\once \override Arpeggio #'Y-extent =
          #(ly:make-unpure-pure-container
             ly:grob::stencil-height
             (lambda (grob start end) (ly:grob::stencil-height grob)))
       
        \once \override GrandStaff.Arpeggio #'stencil =
          #(lambda (grob)
            (let* ((default-stil (ly:arpeggio::print grob))
                   (positions (ly:grob-property grob 'positions))
                   (center-pos (interval-center positions))
                   (layout (ly:grob-layout grob))
                   (pt (ly:output-def-lookup layout 'pt))
                   (y-ext (ly:stencil-extent default-stil Y))
                   (size (max (+ 2 pt) (interval-length (interval-widen y-ext adjust-size))))
                   (new-stil
                     (grob-interpret-markup grob
                       (markup
                           (#:left-brace (/ size pt)))))
                   (roman-num
                     (grob-interpret-markup grob
                        (markup
                          #:fontsize -3
                          #:vcenter
                          #:bold
                          roman-number)))
                   (new-stil-x-length
                     (interval-length
                       (ly:stencil-extent new-stil X))))
            (ly:stencil-add
              (ly:stencil-translate
                new-stil
                (cons new-stil-x-length center-pos))
              (ly:stencil-translate
                roman-num
                (cons (* -2 new-stil-x-length) center-pos)))))
#})

\score {
  \new GrandStaff
    <<
    \new Staff = "upper1"
    \new Voice \relative c'' {
    \brace #-2 #"I"
        <des f bes des>2\arpeggio
    }
    \new Staff = "upper2"
    \new Voice \relative c' {
        <d! g! b!>2\arpeggio
    }
    >>
  \layout { }
}


-Harm
« Letzte Änderung: Dienstag, 7. Mai 2013, 00:29 von harm6 »

DocTaxon

  • Member
Re: geschweifte Klammer über zwei Systeme
« Antwort #12 am: Dienstag, 7. Mai 2013, 10:41 »
ja okay: dann hab ich auch noch die Begriffe "Fehler" und "Warnungen" vertauscht. Warnungen und Fehler waren bei mir bis jetzt das gleiche, das habe ich aber gerade abgestellt.

Nix für ungut,
Doc Taxon ...