automatisches Beaming beeinflussen [gelöst]

Begonnen von rgree, Mittwoch, 7. Dezember 2022, 17:17

« vorheriges - nächstes »

rgree

Hallo,

ich möchte in einem System mit zwei Staffs das Beaming unterschiedlich gestalten:
im Staff I sollen 4 8-tel zusammengefasst werden, im zweiten Staff II jeweils 2.
Offensichtlich wirken aber die \set-Befehle auf Score-Ebene, so dass im Beispiel
das Setting in Staff II dasjenige in Staff I zerstört.
Kann ich Lilypond dazu überreden, die Settings pro Staff zu beachten ?

Gruß,
Reinhard 

Beispiel:

\version "2.20.0"
\score {
    \context StaffGroup = "strings" <<
      %
      \new Staff % I
      {
        {
           \time 2/4
           \set Timing.baseMoment = #(ly:make-moment 1/4)
           \set Timing.beatStructure = #'(2)
           c'8 8 8 8
           c'8 8 8 8
        }
      }
      %{ wenn dieses Staff aktiviert wird, greifen die obigen \set-Angaben nicht mehr
      \new Staff % II
      {
           \time 2/4
           \set Timing.baseMoment = #(ly:make-moment 1/4)
           \set Timing.beatStructure = #'(1)
           c'8 8 8 8
           c'8 8 8 8
      }
      %}
    >>
  \layout { }
}


Malte

Hallo Reinhard,

Timing wirkt standardmäßig auf Score-Ebene, die Befehle wirken so, als hättest du \set Score.... geschrieben. Man kann das aber ändern, indem man den Timing_translator und den Default_bar_line_engraver vom Score- in den Staff-Kontext verschiebt:
  \layout {
    \context {
      \Score
      \remove Timing_translator
      \remove Default_bar_line_engraver
    }
    \context {
      \Staff
      \consists Timing_translator
      \consists Default_bar_line_engraver
    }
  }

Damit wird dein gewünschtes Ergebnis erreicht, du musst aber mit Nebenwirkungen rechnen: Andere Timing-bezogene Befehle wie \time für die Taktart gelten dann auch nur noch auf Staff-Ebene, d. h. du musst anders als sonst jetzt in jedem Staff die Taktart einzeln setzen. In deinem Beispiel hast du das schon getan, deshalb fällt es erstmal nicht auf. Probiere aber mal, was passiert, wenn du einen der beiden \time-Befehle auskommentierst ;)

Viele Grüße
Malte

rgree


Manuela

Es geht auch einfacher

\score {
  \context StaffGroup = "strings" <<
    %
    \new Staff % I
    {
      {
        \time 2/4
        \set Staff.beamExceptions = #'()
        \set Staff.baseMoment = #(ly:make-moment 1/4)
        \set Staff.beatStructure = #'(2)
        d'8 8 8 8
        e'8 8 8 8
      }
    }
    % { wenn dieses Staff aktiviert wird, greifen die obigen \set-Angaben nicht mehr
      \new Staff % II
      {
           c'8 8 8 8
           c'8 8 8 8
      }
    %}
  >>
  \layout { }
}
Danke für eure Hilfe
viele Grüße
-- Manuela