Durchgängigen Taktstrich in Piano Context einmalig für dynamikangab unterbrechen

Begonnen von Multimax, Freitag, 9. Dezember 2022, 11:02

« vorheriges - nächstes »

Multimax

Hallo zusammen,

beim Nachbau eines handgestochenen Orgelsatzes bin auf folgende Stelle (Bild 1)gestoßen.

Der Taktstrich wird zugunsten eines Pianissimo kurz unterbrochen.

Mein Nachbau sieht folgendermaßen aus:
\version "2.22.2"
\language "deutsch"

% Definition für Eckige Klammer
#(define-markup-command (openBrack layout props heitgh) (number?)
   (interpret-markup layout props
     (markup #:line (#:with-dimensions (cons 0 0) (cons 0 0)
                      (#:path 0.23
                        (list (list (quote moveto) 0 0)
                          (list (quote lineto) -0.5 0)
                          (list (quote lineto) -0.5 (* heitgh -1))
                          (list (quote lineto) 0 (* heitgh -1))))))))

global = {
  \key as \major
  \time 6/4
}

rightOne = \relative c'' {
  \global
  \stemNeutral

g'4  (es b g f es)\tempo "1º Tempo"
\once \override Staff.BarLine.allow-span-bar = ##f %Taktstrich teilen
\once\override Staff.BarLine.bar-extent = #'(-3.5 . 2) \bar "||" %länge anpassen
\once \override TextScript.extra-offset = #'(0 . -1)-\markup \openBrack #6  %Klammer setzen

\once \override DynamicText.Y-offset = -4 
\once \override DynamicText.X-offset = -3
\once \override NoteColumn.force-hshift = 1 % Note verschieben geht nicht!
c'\pp
\once \override TextScript.outside-staff-priority = #500
_\markup{ \halign#0.5  Réc.}

(g'  f es8 c as4 es)
}

rightTwo = \relative c'' {
  \global
}

leftOne = \relative c' {
\global
b2. (<des g,>) \once\override Staff.BarLine.bar-extent = #'(-2 . 3) \bar"||"
c es
}

leftTwo = \relative c' {
  \global
<es,~ b'>1.
<es as~>1.
}

pedalOne = \relative c {
  \global
}


\score {
  <<
    \new PianoStaff \with {
      instrumentName = "Orgel"
     
    } <<
      \new Staff = "right" \with {
        midiInstrument = "church organ"
        \consists "Merge_rests_engraver"
      } << \rightOne \\ \rightTwo >>
      \new Staff = "left" \with {
        midiInstrument = "church organ"
             \consists "Merge_rests_engraver"
      } { \clef bass << \leftOne \\ \leftTwo >> }
    >>
    \new Staff = "pedal" \with {
      midiInstrument = "church organ"
    } { \clef bass \pedalOne   }
  >>
  \layout { }
  \midi { }
}

In Bild 2 ist das Ergebnis.

Meine Fragen dazu sind:

1) Wie kann ich die Takstriche noch enger an das pp bekommen. Wenn ich es durch Anpassung von
Staff.BarLine.bar-extentversuche, will das pp nicht mehr in der Mitte bleiben, sondern rutscht enteder links oder rechts neben den unterbrochenen Strich.

2) Warum funktioniert das forceschift nicht, um etwas mehr Raum zu schaffen?

3) Was sollen mir die Warnungen sagen?

Um eine Hilfe wäre ich dankbar.

Viele Grüße
Multimax


Malte

Die Warnungen wollen sagen, dass die TextScripts nicht an eine Note angehängt sind (,,unattached TextScriptEvent"). An das c² sollen vier Dinge angehängt werden:
• ein Legatobogen (
• ein DynamicText \pp
• ein TextScript für die Klammer
• ein TextScript ,,Réc."

Die schweben nach den \overrides aber im Nichts. LilyPond versucht, das beste daraus zu machen, und hängt ,,Réc." und den Bogen ans g².

Es gibt jetzt zwei mögliche Abhilfen:
1. Du packst die ganzen \overrides vor die Noten und nicht zwischen Noten und anzuhängende Dinge. Das führt allerdings mit den zwei verschiedenen, gleichzeitigen TextScripts zu Problemen, weshalb ich zu 2. raten würde.
2. Du ersetzt \once \override durch \tweak und sortierst die ganzen Dinge ordentlich. Das kann dann so aussehen:
\tempo "1º Tempo"
c'
  (
  \tweak Y-offset -3 \tweak X-offset -4 \pp
  \tweak extra-offset #'(0 . -1) -\markup \openBrack #6
  \tweak outside-staff-priority #500 _\markup{ \halign#0.5  Réc.}

g' f es8 c as4 es)
Da extra-offset ein brutales Werkzeug ist, outside-staff-priority hier keine Wirkung zeigt und \halign das Markup selbst verändert statt es zu verschieben, würde ich alternativ folgende tweaks vorschlagen:
c'
  (
  \tweak Y-offset -3 \tweak X-offset -4 \pp
  \tweak Y-offset 1.5 -\markup \openBrack #6
  \tweak X-offset 0.5 _"Réc."
Für dein Problem mit dem unterbrochenen Taktstrich gibt es schließlich noch eine andere, viel einfachere Lösung: das \pp selbst kann etwas weißen Hintergrund und Rand bekommen, sodass es den Taktstrich damit überdeckt, das Zauberwort heißt whiteout. Jetzt muss man nur noch erlauben, dass das pp mit dem Taktstrich kollidiert. Das tu ich, indem ich X-extent verändere, sodass LilyPond so rechnet, als hätte es die Breite 0 und säße 2 Einheiten weiter rechts.
\tweak Y-offset -3 \tweak X-offset -4 \tweak X-extent #'(2 . 2) \tweak whiteout 4 \pp
Insgesamt ergibt sich folgendes:
\version "2.22.2"
\language "deutsch"

% Definition für Eckige Klammer
#(define-markup-command (openBrack layout props heitgh) (number?)
   (interpret-markup layout props
     (markup #:line (#:with-dimensions (cons 0 0) (cons 0 0)
                      (#:path 0.23
                        (list (list (quote moveto) 0 0)
                          (list (quote lineto) -0.5 0)
                          (list (quote lineto) -0.5 (* heitgh -1))
                          (list (quote lineto) 0 (* heitgh -1))))))))

global = {
  \key as \major
  \time 6/4
}

rightOne = \relative c'' {
  \global
  \stemNeutral
  g'4  (es b g f es)
  \tempo "1º Tempo"
  c'
    (
    \tweak Y-offset -3 \tweak X-offset -4 \tweak X-extent #'(2 . 2) \tweak whiteout 4 \pp
    \tweak Y-offset 1.5 -\markup \openBrack #6
    \tweak X-offset 0.5 _"Réc."
  g'  f es8 c as4 es)
}

rightTwo = \relative c'' {
  \global
}

leftOne = \relative c' {
  \global
  b2. (<des g,>) \once\override Staff.BarLine.bar-extent = #'(-2 . 3) \bar"||"
  c es
}

leftTwo = \relative c' {
  \global
  <es,~ b'>1.
  <es as~>1.
}

pedalOne = \relative c {
  \global
}

\score {
  <<
    \new PianoStaff \with {
      instrumentName = "Orgel"     
    } <<
      \new Staff = "right" \with {
        midiInstrument = "church organ"
        \consists "Merge_rests_engraver"
      } << \rightOne \\ \rightTwo >>
      \new Staff = "left" \with {
        midiInstrument = "church organ"
             \consists "Merge_rests_engraver"
      } { \clef bass << \leftOne \\ \leftTwo >> }
    >>
    \new Staff = "pedal" \with {
      midiInstrument = "church organ"
    } { \clef bass \pedalOne   }
  >>
  \layout { }
  \midi { }
}

Multimax

Danke. Sieht sehr gut aus. Mithilfe der Doku habe ich auch alles nachvollziehen können.  :)

Der forceshift ist jetzt auch nicht mehr nötig, weil sich das c jetzt selbst seinen Platz sucht