Autor Thema: ossia von systemStartDelimiter trennen  (Gelesen 1996 mal)

Sascha

  • Member
ossia von systemStartDelimiter trennen
« am: Mittwoch, 27. Februar 2013, 22:22 »
Hallo liebe forum Mitglieder!

Wie kann man generell ossia, unabhängig von ihre Position, von System trennen?
Unter "trennen" sind nicht nur Taktstriche sondern auch systemStartDelimiter gemeint.
In beigefügtem lilypond text Problem beginnt ab 2-te Volta.

In diesem Übung hatte ich als Grundlage sehr hilfreiche Mitteilung von Benutzer harm6
https://liarchiv.joonet.de/index.php?topic=1217.msg6684#msg6684
gehabt.

Vielen Dank im Voraus für Ihre Antworten und Tipps!

P.S.: Ich bitte um Verzeihung wegen mein schlechtes deutsch!

%%%%%%%%%%  lilypond Datei zhm_1.ly start %%%%%%%%%%
\version "2.16.2"

%{
grundlage ist Nachricht von Benutzer harm6:
https://liarchiv.joonet.de/index.php?topic=1217.0
%}

\include "zhm_ossi_function_grau_1.ly"

\paper {
  horizontal-shift = 1
  left-margin = 15
}

% Variables:
BlfI = \relative c''
{
  \clef treble
  \key g \major
  \repeat volta 2 {
    g'2
    e2 \break
  }

  \alternative {
    { fis2
      d2 \break
    }
    {
      e4 fis
      g4 r4
    }
  }
}
%ossia noten bfl1
OsiBlfI = \relative c'' {
  \clef treble
  \key g \major
  e8 e fis fis
  g4 r4
}

BlfII = \relative c'' {
  \clef treble
  \key g \major
  \repeat volta 2 {
    b2
    c2
  }
  \alternative {
    {
      d2
      b2
    }
    {
      d4 c
      g4 r4
    }
  }
}

%ossia noten bfl2
OsiBlfII = \relative c'' {
  \clef treble
  \key g \major
  d8 d c c
  g4 r4
}
% %%%%
\score {
  \new StaffGroup <<
    \time 2/4
    % Blockflöte 1 beginn
    \new Staff = "Bfl1"
    {
      \BlfI
    }
    % Blockflöte 1 ende
    % Blockflöte 2 beginn
    \new Staff = "Bfl2"
    \with {
      \override BarLine #'allow-span-bar = ##f
    }
    {
      \BlfII
    }
    % Blockflöte 2 ende
    % Blf1 ossia function include beginn
    { \skip 4*2*4
      \OssiVerhGrau
      \OsiBlfI
    }
    % Blf1 ossia function include ende
    % Blf2 ossia function include beginn

    { \skip 4*2*4
      \OssiNizGrau
      \OsiBlfII
    }

    % Blf2 ossia function include ende
  >>
  \layout { }
  %\midi { }
}

%%%%%%%%%% lilypond Datei zhm_1.ly stop %%%%%%%%%%

%%%%%%%%%% lilypond include Datei zhm_ossi_function_grau_1.ly %%%%%%%%%% start
\version "2.16.0"

%{grundlage ist Nachricht von Benutzer harm6
https://liarchiv.joonet.de/index.php?topic=1217.0
%}

OssiVerhGrau =
#(define-music-function (parser location music)(ly:music?)
  #{
    \new Staff = "OsiOben" \with {
      alignAboveContext = #"Bfl1"
      fontSize = #-4.5
      \override Clef #'stencil = ##f
      \override KeySignature #'stencil = ##f
      \override TimeSignature #'stencil = ##f
      \override StaffSymbol #'staff-space = #(magstep -5)
      \override StaffSymbol #'thickness = #(magstep -5)
      \override BarLine #'allow-span-bar = ##f
      \override Stem #'direction = #UP
    }
    $music
#})

OssiNizGrau =
#(define-music-function (parser location music)(ly:music?)
  #{
    \new Staff = "OsiUnten" \with {
      alignBelowContext = #"Bfl2"
      fontSize = #-4.5
      \override Clef #'stencil = ##f
      \override KeySignature #'stencil = ##f
      \override TimeSignature #'stencil = ##f
      \override StaffSymbol #'staff-space = #(magstep -5)
      \override StaffSymbol #'thickness = #(magstep -5)
      \override Stem #'direction = #DOWN
    }
    $music
#})

%%%%%%%%%% lilypond include Datei zhm_ossi_function_grau_1.ly stop %%%%%%%%%%
« Letzte Änderung: Mittwoch, 27. Februar 2013, 23:34 von Sascha »

harm6

  • Member
Re: ossia von systemStartDelimiter trennen
« Antwort #1 am: Donnerstag, 28. Februar 2013, 01:26 »
Hallo Sascha,

willkommen im forum.

Ich bin mir nicht ganz sicher, ob ich schon verstanden habe, was Du erreichen willst:

Willst Du dort wo die ossia-Staffs beginnen
a) keinen durchgehenden SystemStarBar
b) aber trotzdem die verbliebenen Systeme als Staffgroup, also mit verbindendem SystemStartBar und SystemStartBracket
haben?
Und das ganze soll/muß nach einem \break stattfinden?

Falls ich damit richtig liege so wird das nicht ganz einfach und ich habe ehrlich gesagt zu viel zu tun, um hier einzusteigen.
Aber falls jemand möchte (Torsten? ;) ) ein paar Hinweise.
1. Frage an Sascha: Warum Clef, KeySignature etc ausschließen.
2. Der systemStartDelimiter ist ein einziger großer spanner. Man wird also mit ly:spanner-broken-into umgehen müssen.
3. Ich habe gerade heute abend ein neues, noch nicht freigegebenes snippet ins LSR gestellt, welches mit dem systemStartDelimiter hantiert.
Ist vielleicht hilfreich:
Preview hier.

Gruß,
  Harm

Sascha

  • Member
Re: ossia von systemStartDelimiter trennen
« Antwort #2 am: Donnerstag, 28. Februar 2013, 18:57 »
Zitat
...Willst Du dort wo die ossia-Staffs beginnen
a) keinen durchgehenden SystemStarBar...

ja, kein SystemStartBar und was dazu gehört (StartBrace, StartBracket, StartSquare)
Also völlig "freischwebende" ossia.
Zitat
... b) aber... Staffgroup... mit ... SystemStartBar und SystemStartBracket haben?...
ja.
Zitat
Und das ganze soll/muß nach einem \break stattfinden?
Eben. Es passiert kein Weltuntergang wenn nicht, aber sieht unschön und nicht Einheitlich.
Besonders wenn man zuvor oder danach hat schon im Partitur "freischwebende" ossia.
Zitat
1. ...Warum Clef, KeySignature etc ausschließen...
Meine Meinung nach, ossia muß nur Wesentliche enthalten.
Vielleicht ossia im Lehrmaterial oder Sonderfall braucht volle Angaben.

Danke für LSR Hinweis! Ich habe paar Abende probiert mit Begriffen "Nesting staves", "systemStartDelimiterHierarchy", leider ohne Ergebniss.

Be-3

  • Member
Re: ossia von systemStartDelimiter trennen
« Antwort #3 am: Freitag, 1. März 2013, 17:30 »
Aber falls jemand möchte (Torsten? ;) ) ein paar Hinweise.
[...]
3. Ich habe gerade heute abend ein neues, noch nicht freigegebenes snippet ins LSR gestellt, welches mit dem systemStartDelimiter hantiert.
Ist vielleicht hilfreich:
Preview hier.

Hallo Sascha, hallo Harm,

ja, danke, dieses Snippet hat mir viel Herumprobiererei mit der systemStartDelimiterHierarchy erspart. Ich habe nur in leichter Abwandlung SystemStartSquare anstelle von -Brace "geopfert", dann kann man in ähnlichen Fällen leichter auf ein Klaviersystem "umrüsten".
Dank dieses Tricks, den hartnäckigen SystemStartBar verschwinden zu lassen und durch eine zum Strich umfunktionierte Square-Klammer zu ersetzen, kann man die Ossia-Zeilen schön freistellen.

Das Problem mit den üblichen Ossia-Lösungen besteht darin, daß die Ossia-Staffs bei Bedarf innerhalb der "Hauptstimmen" erzeugt werden und daher automatisch zu dieser StaffGroup gehören - deshalb werden sie auch am Zeilenanfang in die Akkolade (Bracket) mit einbezogen.

Um das zu umgehen, habe ich selbständige Ossia-Zeilen in die Partitur aufgenommen, die bei Bedarf per \startStaff gestartet und per \stopStaff wieder abgestellt werden können.
Etwas handlicher wird es durch den neuen Staff-Typen FreeOssiaStaff, der bereits die passenden Eigenschaften hat (Kleiner, keine Schlüssel, keine Vorzeichen, keine Taktangaben usw.).
Für den geringeren Abstand der oberen Ossia-Zeile ist diese Zeile selbst verantwortlich, der geringere Abstand zur unteren Ossia-Zeile muß von der StaffGroup aus geregelt werden.

Komplett leere Ossia-Zeilen werden völlig ignoriert (\RemoveEmptyStaves und remove-first = ##t), in "teilweise benutzten" Zeilen könnten störende Taktstriche entstehen, deshalb sind Taktstriche in den Ossia-Systemen absichtlich ausgeblendet.

Bei Bedarf (wie hier in der zweitaktigen Passage) kann man die Taktstriche nach Bedarf sichtbar machen.

Ich habe noch einen Takt ans urspüngliche Beispiel angehängt, damit man sehen kann, wie die Ossia-Zeilen auch wieder schön per \stopStaff aufhören. Das geänderte Beispielcoding sieht so aus:

\version "2.16.2"

\layout {
  \context {
    \Score
    \accepts "FreeOssiaStaff"
  }
  \context {
    \Staff
    \name "FreeOssiaStaff"
    \alias "Staff"

    fontSize = #-5
    \override StaffSymbol #'staff-space = #(magstep -5)
    \override StaffSymbol #'thickness = #(magstep -5)       
    \remove "Time_signature_engraver"
    \override Clef #'stencil = ##f
    \override KeySignature #'stencil = ##f
    \override KeyCancellation #'stencil = ##f
    \override BarLine #'transparent = ##t
    \override VerticalAxisGroup #'remove-first = ##t
    \RemoveEmptyStaves
    \stopStaff
  }
}



% Variables:

global = {
  \clef treble
  \key g \major
  \time 2/4
}

BlfI = \relative c''
{
  \global
  \repeat volta 2 {
    g'2
    e2 \break
  }
  \alternative {
    { fis2
      d2 \break
    }
    {
      e4 fis
      g4 r4
    }
  }
  g2 \bar "|."
}

%ossia noten bfl1
OsiBlfI = \relative c'' {
  \global
  \stopStaff
  s2*4
  \startStaff
  e8 e fis fis
  \once\override Staff.BarLine #'transparent = ##f
  g4 r4
  \stopStaff
  s2
}

BlfII = \relative c'' {
  \global
  \repeat volta 2 {
    b2
    c2
  }
  \alternative {
    {
      d2
      b2
    }
    { d4 c
        g4 r4
    }
  }
  g2 \bar "|."
}

%ossia noten bfl2
OsiBlfII = \relative c'' {
  \global
  \stopStaff
  s2*4
  \startStaff
  d8 d c c
  \once\override Staff.BarLine #'transparent = ##f
  g4 r
  \stopStaff
  s2
}


% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\score { <<
    \new FreeOssiaStaff \OsiBlfI
    \new StaffGroup <<
      \new Staff = "Bfl1" \with { \consists "Bar_number_engraver" } \BlfI
      \new Staff = "Bfl2" \BlfII
    >> 
    \new FreeOssiaStaff \OsiBlfII
  >>
  \layout {
    \context {
      \Score
      \remove "Bar_number_engraver"
      \override SystemStartSquare #'style = #'bar-line
      \override SystemStartBar #'stencil = ##f
      \override SystemStartSquare #'padding = #-0.1
      \override SystemStartSquare #'thickness = #1.6
    }
    \context {
      \FreeOssiaStaff
      \override VerticalAxisGroup #'staff-staff-spacing = #'((basic-distance . 7))
    }
    \context {
      \StaffGroup
      systemStartDelimiterHierarchy = #'(SystemStartSquare (SystemStartBracket a b))
      \override StaffGrouper #'staffgroup-staff-spacing = #'((basic-distance . 7))
    }
  }
  %\midi { }
}


Viele Grüße
Torsten


PS: kleine Änderung: ich hatte vergessen, den Taktnummern-Engraver im ersten Hauptstaff hinzuzufüngen. Taktnummer sollen sein, aber nicht oben in der Ecke neben der Ossia-Zeile.
« Letzte Änderung: Freitag, 1. März 2013, 17:45 von Be-3 »

Sascha

  • Member
Re: ossia von systemStartDelimiter trennen
« Antwort #4 am: Freitag, 1. März 2013, 21:14 »
Hallo Torsten,

unglaublich, das ist das, was ich mir stellte vor!
Mir fehlen Wörte um Dankbarkeit für Deine virtuose Arbeit auszudrücken!
Sieht doch alles ganz klar und nicht so schrecklich!
Jetzt soll ich nochmal und langsam über Deine Lösung nachdenken und lernen.

Liebe Grüße.