Ossia

Begonnen von hotte, Donnerstag, 11. März 2021, 19:47

« vorheriges - nächstes »

hotte

Hallo liebe Leute,

nach langer Zeit melde ich mich mal wieder.
Ich habe ein Problem mit der Ossia-Funktion. Ich wollte ein Ossia schreiben das sich nicht einzeln über dem eigentlichen System sondern als StaffGroup damit die Taktstriche durch beide Systeme gehen. Dazu musste ich ich den Clef-engraver entfernen damit der Schlüssel nicht immer über allen systemen angezeigt wird.
Jetzt ist aber der Abstand am Anfang der Zeile bevor das Ossia beginnt zwischen Notenschlüssel und erster Note viel zu gering.
Ich habe schon einiges versucht aber konnte das Problem bisher nicht lösen.
Meine Version: 2.18.2
Mein Code:

\paper {
  indent = #0
}

bisOssia = \relative c' {
  \repeat unfold 48 { c16 } \break
  \repeat unfold 16 { c }
}

abOssia = \relative c' {
  \repeat unfold 32 { c16} \break
  \repeat unfold 48 { c16 }
}

ossia = \relative c'' {
  \repeat unfold 32 { c16 }
  \revert Staff.Clef.stencil
  \repeat unfold 16 { c }
}

<<
  \new StaffGroup <<
    \new Staff = ossia \with {
      \remove "Time_signature_engraver"
      \override Clef.stencil = ##f
    }
    { \stopStaff s2*9 }
    \new Staff {
      \bisOssia
      <<
        { \abOssia }
        \context Staff = ossia {
          \startStaff
          \ossia
          \stopStaff
        }
      >>
    }
  >>
>>


Ich weiß das ist nicht sehr wenig Code aber vielleicht kann mir ja trotzdem jemand helfen wie ich das Problem lösen kann.

Vielen Dank und Grüße

hotte

kilgore

Hallo hotte!

Ganz verstehe ich das Problem nicht.

ZitatJetzt ist aber der Abstand am Anfang der Zeile bevor das Ossia beginnt zwischen Notenschlüssel und erster Note viel zu gering.

zu gering für was? Für meinen Augen sieht es genau richtig aus.

Aber trotzdem, würde ich in so einer Situation wahrscheinlich etwas schnell und unkompliziert machen, wie ein unsichtbare \grace vor dem ersten Ton um etwas Platz zu schaffen:


\version "2.18.2"

\paper {
  indent = #0
}

bisOssia = \relative c' {
  \repeat unfold 48 { c16 } \break
  \grace { \hideNotes c8 \unHideNotes }
  \repeat unfold 16 { c16 }
}

abOssia = \relative c' {
  \repeat unfold 32 { c16} \break
  \repeat unfold 48 { c16 }
}

ossia = \relative c'' {
  \repeat unfold 32 { c16 }
  \revert Staff.Clef.stencil
  \repeat unfold 16 { c }
}

<<
  \new StaffGroup <<
    \new Staff = ossia \with {
      \remove "Time_signature_engraver"
      \override Clef.stencil = ##f
    }
    { \stopStaff s2*9 }
    \new Staff {
      \bisOssia
      <<
        { \abOssia }
        \context Staff = ossia {
          \startStaff
          \ossia
          \stopStaff
        }
      >>
    }
  >>
>>

hotte

Hallo kilgore,

vielen Dank! Das ist auf jeden Fall schon mal eine gute Lösung.
Jetzt besteht mein Originalcode allerdings aus 12 Zeilen bevor das Ossia beginnt. Ich kann natürlich den \grace-Befehl vor jeder Zeile einfügen. Aber gibt es da vielleicht auch eine allgemeine Lösung für den gesamten Code?

Zitatzu gering für was? Für meinen Augen sieht es genau richtig aus.

Also bei mir wird das erste c mit sehr wenig Abstand zum Notenschlüssel angezeigt. Wenn ich "\override Clef.stencil = ##f" wegnehme ist der Abstand wieder normal (so wie mit dem \grace-Befehl). Nur dann wird mir über jeder einzelner Zeile ein zweiter einzelner Notenschlüssel angezeigt.

Herzlichen Dank und viele Grüße

hotte

kilgore

Versuche es mal mit \override Clef.transparent = ##t. So wird den Schlüssel gedruckt (aber unsichtbar) und der Abstand bleibt gleich als wäre der Schlüssel noch da...

hotte

Danke, super!
Das klappt jetzt mit dem Abstand.
Jetzt tritt nur ein neues Problem auf. Nämlich wird mir dann am Anfang jedes unsichtbaren Systems eine Taktzahl angezeigt. Jeder mir bekannte Befehl ("\remove "Bar_number-engraver"", "\override BarNumber.transparent = ##t" usw.) funktioniert leider nicht.

hotte

Oder gibt es vielleicht eine Möglichkeit ein stinknormales Ossia mit alignAboveContext zu erstellen und dann mit den Taktstrichen beide Systeme zu verbinden?
Mein Ossia erstreckt sich halt über 8 Takte und ich möchte nicht dass es so über der eigentlichen Stimme hängt sondern mit ihr verbunden ist wie ein zweiter Staff oder eine zusammenhängende StaffGroup.
Irgendwie komme ich gerade nicht weiter.

hotte

!!!!!! Ich hab die Lösung gefunden

\score {
  <<
    \new StaffGroup \relative c' {
      \set StaffGroup.systemStartDelimiter = #'SystemStartBar
      \new Staff = main {
        \repeat unfold 48 { c16 } \break |
        \repeat unfold 16 { c }
        <<
          { \repeat unfold 32 { c } \break |
            \repeat unfold 16 { c }
          }
          \new Staff \with {
            \remove "Time_signature_engraver"
            alignAboveContext = #"main"
            firstClef = ##f
          }
          { \repeat unfold 48 { c' } }
        >>
        \repeat unfold 32 { c, }
      }
    }
  >>
}


Das ist genau so wie ich es haben wollte. Habe mit den ganzen Variablen viel zu kompliziert gedacht. Jetzt muss ich nur noch die Größe ändern.
Danke für Eure Inspiration.

kilgore

Hallo hotte,
Freut mich, dass du eine Lösung gefunden hast! ich war ein paar Tage offline und lese das alles erst jetzt. Weiterhin viel Erfolg mit Lilypond :)

hotte