Zwei Arpeggios gleichzeitig, eines davon cross-Staff - wie? einigermaßen gelöst

Begonnen von Manuela, Mittwoch, 15. Mai 2019, 07:22

« vorheriges - nächstes »

Manuela

Hi,

wie kriege ich das hin wie im Screenshot?
Wenn ich den Code wie in diesem Snippet anwende
csBracket = \override PianoStaff.Arpeggio.stencil = #ly:arpeggio::brew-chord-bracket

\score{
  \new PianoStaff \with { connectArpeggios = ##t } <<
  \new Staff {
    \arpeggioBracket c''1\arpeggio
    \csBracket c'' \arpeggio
  }
  \new Staff << \clef bass
  \new Voice { s1 < c e >\arpeggio }
  \new Voice {
    \arpeggioBracket c'1 \arpeggio
    \csBracket c'  \arpeggio
  }
  >>
>>
}

erhalte ich nur eine einzige eckige Verbindungsklammer. Ich bin ratlos.
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

Hallo Manuela,

du könntest hier schummeln:\version "2.21.0"
\language "deutsch"

csBracket = \tweak stencil #ly:arpeggio::brew-chord-bracket \etc

\score{
  \new PianoStaff \with { connectArpeggios = ##t } <<
    \new Staff {
      c''1\arpeggio
      \set PianoStaff.connectArpeggios = ##f
      c''
      -\csBracket
      -\tweak positions #'(-6 . 0.5)
      -\tweak Y-extent #'(0 . 0)
      -\arpeggio
    }
    \new Staff <<
      \clef bass
      \new Voice { s1 < c e >\arpeggio }
      \new Voice {
        c'1 \arpeggio
        c'
      }
    >>
  >>
}

Den Wert -6 müßtest du aber zum Schluß, wenn alle Zeilenumbrüche etc. und damit die Abstände zwischen den Systemen feststehen, ggf. anpassen.
Vielleicht könnte man noch irgendwie was bauen, was den Abstand zwischen den Systemen rausfindet und die positions-Eigenschaft in der after-line-breaking-Eigenschaft setzen. Hab jetzt aber keine Zeit dafür, sorry ...

Manuela

Danke, Malte. Ich habe jetzt eine andere Lösung gefunden, allerdings weiß ich noch nicht, wie ich die Klammer auf die Höhe der Note bringe
#(define-markup-command (openBracket layout props heitgh) (number?)
  (interpret-markup layout props
    (markup #:line (#:with-dimensions (cons 0 0) (cons 0 0)
      (#:path 0.25
        (list (list (quote moveto) 0 0)
        (list (quote lineto) -1 0)
        (list (quote lineto) -1 (* heitgh -1))
        (list (quote lineto) 0 (* heitgh -1))))))))

\score{
  \new PianoStaff  <<
  \new Staff {
    c''1^\markup\openBracket #8
  }
  \new Staff << \clef bass
  \new Voice { < c e >1\arpeggio }
  \new Voice {
    c'1
  }
  >>
>>
}
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

ich würde es wahrscheinlich eher wie unten machen.

Dann braucht man sich um den vertikalen Abstand keinerlei Sorgen machen, evtl müssen aber Vorzeichen verschoben werden, und die NoteColumn mit skalierter Dauer ebenfalls ein kleines bißchen.
Die notwendigen Werte ändern sich je nach layout aber leider auch mit dieser Methode.


csBracket = \override PianoStaff.Arpeggio.stencil =
  #ly:arpeggio::brew-chord-bracket

\new PianoStaff \with { connectArpeggios = ##t }
  <<
    \new Staff
      <<
      \new Voice { \voiceOne e'4. }
      \new Voice { \voiceTwo \once \csBracket cis'1\arpeggio }
      >>
    \new Staff
      <<
      \new Voice {
        \voiceOne
        \tweak Accidental.X-offset -2.2
        fis1\arpeggio
      }
        \new Voice  {
          \clef bass
          \voiceTwo
          s1*1/100
          \once \override NoteColumn.X-offset = -0.08
          <ais,, ais,>1*99/100\arpeggio
        }
      >>
  >>


Gruß,
  Harm


Manuela

Danke Harm für deine Idee. Eine gewagte Konstruktion  :)

Leider lässt sich die vertikale Achse nicht nach links verschieben.
\version "2.19.82"

csBracket = \override PianoStaff.Arpeggio.stencil =
  #ly:arpeggio::brew-chord-bracket

\new PianoStaff \with { connectArpeggios = ##t }
  <<
    \new Staff
      <<
      \new Voice { \voiceOne e'4. }
      \new Voice { \voiceTwo \once \csBracket c'1\arpeggio }
      >>
    \new Staff
      <<
      \new Voice {
        \voiceOne
        \tweak Accidental.X-offset -2.2
        f1\arpeggio
      }
        \new Voice  {
          \clef bass
          \voiceTwo
          s1*1/100
          \once \override NoteColumn.X-offset = -1 % bleibt wirkungslos
          <ais,, ais,>1*99/100\arpeggio
        }
      >>
  >>
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

Hallo Manuela,

Zitat
Eine gewagte Konstruktion
Leider lässt sich die vertikale Achse nicht nach links verschieben.

Die NR sagt, daß Dein Vorhaben nicht möglich sei, deshalb der Versuch die Arpeggios zu verschiedenen Zeitpunkten zu setzen und dann eine Verschiebung zu erwirken.
In meinem Beispiel klappt es, in Deinem nicht.
Das ist also nicht der richtige Weg. Schade.

Da seh ich nur noch den Weg es zu faken.
Dein `openBracket´ geht ja in diese Richtung.


Gruß,
  Harm

Manuela

Ich habe jetzt eine einigermaßen zufriedenstellende Lösung gefunden, unter Einsatz des oft geschmähten extra-offset
\version "2.19.82"

#(define-markup-command (openBracket layout props heitgh) (number?)
   (interpret-markup layout props
     (markup #:line (#:with-dimensions (cons 0 0) (cons 0 0)
                      (#:path 0.25
                        (list (list (quote moveto) 0 0)
                          (list (quote lineto) -1 0)
                          (list (quote lineto) -1 (* heitgh -1))
                          (list (quote lineto) 0 (* heitgh -1))))))))

\score{
  \new PianoStaff  <<
    \new Staff {
      \once \override TextScript.extra-offset = #'(-0.5 . -2)
      c''1^\markup\openBracket #6.5
    }
    \new Staff <<
      \clef bass
      \new Voice {
        \once \override PianoStaff.Arpeggio.positions = #'(-2.2 . 1)
        < e a, >1\arpeggio
      }
      \new Voice {
        \voiceOne
        c'1
      }
    >>
  >>
}


Höhe der eckigen Klammer und Ausmaß der Verschiebung müssen natürlich individuell angepasst werden, aber besser als gar nix...
Danke für eure Hilfe
viele Grüße
-- Manuela