Autor Thema: einzelne Staff bezeichnen (Solisten und Chor)  (Gelesen 1983 mal)

matrices

  • Member
einzelne Staff bezeichnen (Solisten und Chor)
« am: Montag, 19. September 2011, 17:37 »
Hallo,
ich benötige Hilfe bei der Bezeichnung der Staffs in der pdf-Datei. Leider habe ich dafür keine Funktion gefunden.
staff 1 ist für die Solisten
staff 2 ist für den Chor
Die Partitur soll dies schriftlich auszeichnen. Meine Vorstellung ist, jeweils Solisten und Chor als Bezeichnung direkt links neben die dicke Klammer der einzelnen Staff zu setzen. Also zwischen den Stimmenbezeichnungen und der jeweiligen Klammer. Die Staffbezeichnungen sollen unmittelbar über der Linie der Klammer stehen, also vertikal zu allen anderen Bezeichnungen. Auch die Schrift und Größe muss veränderbar sein.
Ist dies möglich?

Meine Syntax:
\score {
<<
\new StaffGroup = solistStaff <<
    \new Voice =
      "soprano" << \global \soprano >>
    \new Lyrics =
      "sopranoLyrics" \lyricsto soprano { \sopranoText }
    \new Voice =
      "altus" << \global \altus >>
    \new Lyrics =
      "altusLyrics" \lyricsto altus { \altusText }
    \new Voice =
      "tenors" << \global \tenors >>
    \new Lyrics =
      "tenorsLyrics" \lyricsto tenors { \tenorsText }
    \new Voice =
      "bassus" << \global \bassus >>
    \new Lyrics =
      "bassusLyrics" \lyricsto bassus { \bassusText }
     >>
\new StaffGroup = choirStaff <<    
    \new Voice =
      "SopranNoten" << \global \SopranNoten >>
    \new Lyrics =
      "sopranLyrics" \lyricsto SopranNoten { \SopranText }
    \new Voice =
      "AltNoten" << \global \AltNoten >>
    \new Lyrics =
      "altLyrics" \lyricsto AltNoten { \AltText }
    \new Voice =
      "TenorNoten" << \global \TenorNoten >>
    \new Lyrics =
      "tenorLyrics" \lyricsto TenorNoten { \TenorText }
    \new Voice =
      "BassNoten" << \global \BassNoten >>
    \new Lyrics =
      "bassLyrics" \lyricsto BassNoten { \BassText }
  >>
>>

pdf-Beispiel dabei
Vielen Dank.

harm6

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #1 am: Dienstag, 20. September 2011, 00:49 »
Hallo matrices,

mir ist nicht ganz klar was Du eigentlich haben willst. Aber vielleicht hilft:

\version "2.14.2"

\paper {
        indent = 22
        %left-margin = 1.3\cm
}

      #(define ((system-start markup) grob)
        (if (ly:stencil? (ly:system-start-delimiter::print grob))
           (let* ((start-bar (ly:system-start-delimiter::print grob))
                  (start-bar-extent (ly:stencil-extent start-bar Y))
                  (start-bar-middle (/ (interval-length start-bar-extent) -2)))
           (ly:stencil-combine-at-edge (ly:system-start-delimiter::print grob)
             Y RIGHT (grob-interpret-markup grob markup) start-bar-middle))
             #f))
       
      #(define solo-group-markup
         (make-line-markup
           (list
             (make-with-dimensions-markup '(0 . 0) '(0 . 0)
               (make-translate-markup (cons -5.5 0)
                 (make-italic-markup
                   (make-rotate-markup 90
                   "SOLO")))))))
             
      #(define choro-group-markup
         (make-line-markup
           (list
             (make-with-dimensions-markup '(0 . 0) '(0 . 0)
               (make-translate-markup (cons -6 0)
                 (make-fontsize-markup -1
                   (make-sans-markup
                     (make-rotate-markup 90
                     "CHORO"))))))))
                     
groupStartSolo = {             
      \once \override StaffGroup.SystemStartBracket #'stencil = #(system-start solo-group-markup)
      \once \override StaffGroup.SystemStartBracket #'padding = #0.6
}           

groupStartChoro = {
      \once \override StaffGroup.SystemStartBracket #'stencil = #(system-start choro-group-markup)
      \once \override StaffGroup.SystemStartBracket #'padding = #0.6
}

revertGroupStart = {
        \revert StaffGroup.SystemStartBracket #'stencil
        \revert StaffGroup.SystemStartBracket #'padding
}

one = \relative c' {
        \groupStartSolo
        a1
        \revertGroupStart
        \repeat unfold 20 { a }
}

two = \relative c' {
        b \repeat unfold 20 { b }
}

three = \relative c' {
        c \repeat unfold 20 { c }
}

four = \relative c' {
        d \repeat unfold 20 { d }
}

oneAll = \relative c' {
        \groupStartChoro
        a \repeat unfold 20 { a }
}

twoAll = \relative c' {
        b \repeat unfold 20 { b }
}

threeAll = \relative c' {
        c \repeat unfold 20 { c }
}

fourAll = \relative c' {
        d \repeat unfold 20 { d }
}
 
\score {
        <<
        \new StaffGroup <<
          \new Staff \with { instrumentName = "Sopran" } \one
          \new Staff \with { instrumentName = "Alt" } \two
          \new Staff \with { instrumentName = "Tenor" } \three
          \new Staff \with { instrumentName = "Bass" } \four
          >>

        \new StaffGroup <<
          \new Staff \with { instrumentName = "Sopran" } \oneAll
          \new Staff \with { instrumentName = "Alt" } \twoAll 
          \new Staff \with { instrumentName = "Tenor" } \threeAll
          \new Staff \with { instrumentName = "Bass" } \fourAll
          >>
        >>
        \layout {
            \context {
                  \Staff
                  \RemoveEmptyStaves
            }
        }
}

Ein Problem gibt es dabei allerdings: Ich habe keinen Weg gefunden die Solo/Choro-Zusätze wieder zurückzunehmen, obwohl ich mit \once bzw \revert gearbeitet habe.

Gruß,
  Harm

EDIT: Code korrigiert um das Ausschließen leerer Partiturzeilen zu ermöglichen.
« Letzte Änderung: Dienstag, 20. September 2011, 01:13 von harm6 »

matrices

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #2 am: Dienstag, 20. September 2011, 17:15 »
Hallo Harm,
es ist perfekt. Herzlichen Dank für Deine Hilfe.
matrices

harm6

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #3 am: Dienstag, 20. September 2011, 21:40 »
Hallo matrices,

schön, daß es Dir gefällt. Perfekt ist es allerdings nicht. Ich wüßte zum Beispiel gern warum der Abstand zwischen SystemStartBracket und SystemStartBar angewachsen ist, obwohl das hinzugefügte markup eine Ausdehnung von null hat. Ich war gezwungen das dann wieder auszugleichen.
Mit Hilfe von David Nalesnik von der englischen Liste weiß ich jetzt aber, warum es mir nicht gelang die SystemStartBracket wieder auf default zurückzusetzen: Denn nicht nur ist eine einzelne SystemStartBracket ein Spanner-Objekt, sondern der ganze SystemStart ist ein einziger großer Spanner und muß als solcher behandelt werden.

Im folgenden habe ich zwei Befehle zum auswählen in den \with-Ausdruck einer jeden StaffGroup geschrieben: der eine schreibt Solo bzw. Choro überall, der andere nur in der ersten Zeile (im Moment aktiv).

Falls Du den Text ("Solo" "Choro"), die Schriftart oder die Größe änderst, mag es notwendig sein im solo-group-markup bzw choro-group-markup den Wert von make-translate-markup zu ändern.

\version "2.14.2"

\paper {
        indent = 22
        %left-margin = 1.3\cm
}

      #(define ((system-start markup) grob)
        (if (ly:stencil? (ly:system-start-delimiter::print grob))
           (let* ((start-bar (ly:system-start-delimiter::print grob))
                  (start-bar-extent (ly:stencil-extent start-bar Y))
                  (start-bar-middle (/ (interval-length start-bar-extent) -2)))
           (ly:stencil-combine-at-edge
             (ly:stencil-translate-axis (ly:system-start-delimiter::print grob) 1 X)
             Y RIGHT (grob-interpret-markup grob markup) start-bar-middle))
             #f))
       
      #(define solo-group-markup
         (make-line-markup
           (list
             (make-with-dimensions-markup '(0 . 0) '(0 . 0)
               (make-translate-markup (cons -4 0)
                 (make-fontsize-markup -1
                   (make-italic-markup
                     (make-rotate-markup 90
                     "SOLO"))))))))
             
      #(define choro-group-markup
         (make-line-markup
           (list
             (make-with-dimensions-markup '(0 . 0) '(0 . 0)
               (make-translate-markup (cons -4.95 0)
                 (make-fontsize-markup -1
                   (make-italic-markup
                     (make-rotate-markup 90
                     "CHORO"))))))))
                     
#(define ((group-callback markup) grob)
 (let* ((orig (ly:grob-original grob))
        (siblings (if (ly:grob? orig)
                     (ly:spanner-broken-into orig)
                     '())))

  (if (and (>= (length siblings) 2)
           (not (eq? (car (reverse siblings)) grob)))
           
    (if (ly:stencil? (ly:system-start-delimiter::print grob))
           (let* ((start-bar (ly:system-start-delimiter::print grob))
                  (start-bar-extent (ly:stencil-extent start-bar Y))
                  (start-bar-middle (/ (interval-length start-bar-extent) -2)))
           (ly:stencil-combine-at-edge
             (ly:stencil-translate-axis (ly:system-start-delimiter::print grob) 1 X)
             Y RIGHT (grob-interpret-markup grob markup) start-bar-middle))
             #f)
  (ly:system-start-delimiter::print grob)
             )))

one = \relative c' {
        a1 \repeat unfold 20 { a }
}

two = \relative c' {
        b \repeat unfold 20 { b }
}

three = \relative c' {
        c \repeat unfold 20 { c }
}

four = \relative c' {
        d \repeat unfold 20 { d }
}

oneAll = \relative c' {
        a \repeat unfold 20 { a }
}

twoAll = \relative c' {
        b \repeat unfold 20 { b }
}

threeAll = \relative c' {
        c \repeat unfold 20 { c }
}

fourAll = \relative c' {
        d \repeat unfold 20 { d }
}
 
\score {
        <<
        \new StaffGroup
        \with {
                % write "SOLO" only at the first line
            \override SystemStartBracket #'stencil = #(group-callback solo-group-markup)
                % write "SOLO" at all lines
            %\override SystemStartBracket #'stencil = #(system-start solo-group-markup)
        }
        <<
          \new Staff \with { instrumentName = "Sopran" } \one
          \new Staff \with { instrumentName = "Alt" } \two
          \new Staff \with { instrumentName = "Tenor" } \three
          \new Staff \with { instrumentName = "Bass" } \four
          >>

          \new StaffGroup
          \with {
                  % write "CHORO" only at the first line
              \override SystemStartBracket #'stencil = #(group-callback choro-group-markup)
                  % write "CHORO" at all lines
              %\override SystemStartBracket #'stencil = #(system-start choro-group-markup)
          }
        <<
          \new Staff \with { instrumentName = "Sopran" } \oneAll
          \new Staff \with { instrumentName = "Alt" } \twoAll 
          \new Staff \with { instrumentName = "Tenor" } \threeAll
          \new Staff \with { instrumentName = "Bass" } \fourAll
          >>
        >>
        \layout {
            \context {
                  \Score
                  \override VerticalAxisGroup #'remove-first = ##t
            }
            \context {
                  \Staff
                  \RemoveEmptyStaves
            }
        }
}

Gruß,
  Harm

harm6

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #4 am: Mittwoch, 21. September 2011, 13:06 »
Hallo matrices,

zu meiner Schande muß ich bekennen die einfachste Lösung schlichtweg übersehen zu haben: Auch für eine StaffGroup kann man den instrumentName angeben!

\version "2.14.2"
\score {
      <<
        \new StaffGroup
        \with { 
          instrumentName = \markup { \null \fontsize #-1 \translate #'(8 . 0) \rotate #90 \italic "SOLO" }
          }
        <<
          \new Staff \with { instrumentName = "Sopran" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Alt" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Tenor" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Bass" }
          \repeat unfold 20 {a'1}
          >>
          \new StaffGroup
          \with { 
          instrumentName = \markup { \null \fontsize #-1 \translate #'(7 . 0) \rotate #90 \italic "CHORO" }
          }
        <<
          \new Staff \with { instrumentName = "Sopran" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Alt" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Tenor" }
          \repeat unfold 20 {a'1}
          \new Staff \with { instrumentName = "Bass" }
          \repeat unfold 20 {a'1}
          >>
        >>
        \layout {
            \context {
                  \Score
                  \override VerticalAxisGroup #'remove-first = ##t
            }
            \context {
                  \Staff
                  \RemoveEmptyStaves
            }
        }
}

Gruß,
  Harm

RobUr

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #5 am: Mittwoch, 21. September 2011, 14:59 »
Hallo alle,

zwei kleine Sachen sollten noch korrigiert werden:
(1) Für Chorsysteme nimmt man ChoirStaff (keine Taktstriche zwischen Zeilen).
(2) Es heißt „CORO“ (it. ohne h); „choros“ wäre griechisch.

Grüße, Robert

matrices

  • Member
Re: einzelne Staff bezeichnen (Solisten und Chor)
« Antwort #6 am: Donnerstag, 22. September 2011, 15:13 »
Hallo Harm und RobUr,
herzlichsten Dank. Ich werde mein Script entsprechend umarbeiten.
Und ja, es heißt CORO, habe ich glatt übersehen. Aber die Griechen können auch gut singen, sind aber wahrscheinlich mehr für die Texte verantwortlich. (kleiner Scherz)
Für Harm: Pefektion ist immer eine Definitionsfrage, was bekanntlich eine der schwersten Dinge im Leben ist und stets, um so genauer es definiert ist, von der momentanen Wahrnehmung abhängt. Ich fand es perfekt. Vielen Dank.
Herzliche Grüße
matrices