Autor Thema: Sub-Unterteilung 5/4-Takt  (Gelesen 3191 mal)

gbehrendt

  • Member
Sub-Unterteilung 5/4-Takt
« am: Sonntag, 5. Juli 2015, 15:49 »
Hej.

Ich arbeite an einem 5/4-Takt, den der Komponist als 2/4 + 6/8 verstanden wissen will. Ich versuche also, den Takt jeweils mit einer gepunkteten Linie (\bar ";") oder einem kleinen Strich (\bar "'") zu unterteilen, habe dabei aber zwei Probleme:
  • Durch die Auslagerung dieser Taktunterteilung in eine neue Stimme (um sie nicht manuell in jedem Takt einzugeben), geht mir die Möglichkeit verloren, Ganztaktpausen zusammenzufassen. Außerdem kollidieren die „Zwischentaktstriche“ mit den Pausen. Wie kann ich möglichst elegant die „Zwischentaktstriche“ für Ganztaktpausen deaktivieren?
  • Im Falle der kleinen Striche (\bar "'") als Trennung der beiden Takthälften könnte es zu Verwechslungen mit Atemzeichen kommen, deshalb habe ich ausprobiert, den Strich etwas nach unten zu verschieben. Typographisch bin ich mir noch nicht sicher, ob das eine gute Lösung ist; jetzt würde ich vielleicht den Strich noch etwas verlängern wollen – wie schaffe ich das?

Herzlichen Dank für eure Hilfe.
– Gereon


\version "2.18.2"

music = \relative c'' { \time 5/4 \compressFullBarRests
   { a2 a2. | a8 a a a a4. a |
   R4*5*3 | a2 a2. }
}

subdivision = { \repeat unfold 2 { s2 \bar ";" s2.  |  s2 \bar "'" s2.  |  s2
\once \override Staff.BarLine #'extra-offset = #'(0 . -2) \bar "'" s2. } }

\score {
\new Staff << \subdivision  \music >>
}

Pierre

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #1 am: Sonntag, 5. Juli 2015, 18:45 »
Hallo Gereon,

herzlich willkommen in Forum!

Folgendes funktioniert:
\version "2.18.2"

subdivision = {
  s2 
  \once\override Staff.BarLine.bar-extent = #'(-1 . 1)
  \bar "|" 
  s2.
}

\relative c'' {
  \time 5/4
  \compressFullBarRests
  \override MultiMeasureRest.expand-limit = #2
  <<
    {
      a2 a2. |
      a8 a a a a4. a |
    }
    \\
    \repeat unfold 2 \subdivision
  >>
  R4*5*3 |
  <<
    {
      a2 a2. |
    }
    \\
    \subdivision
  >>
}


Gruß,
~PPS

viertel

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #2 am: Sonntag, 12. Juli 2015, 05:52 »
Hi gbehrendt

So geht's richtig:
\version "2.18.2"
notenEins = {
\time 5/4 \compoundMeter #'((2 4) (6 8))
\relative c' { c4 d \bar "!" \noBreak e f g }
}
\score { \repeat unfold #10 { \notenEins } \layout {} }
Damit wird die Taktart korrekt angezeigt und du hast die gestrichelten "Zwischentaktstriche". Um diese Striche mußt du dich leider selbst mit \bar "!" kümmern.
Das noBreak ist notwendig, sonst kann es dir passieren, daß die Zeile an diesem Zwischentaktstrich umbrochen wird (probier es mal ohne \noBreak aus, ggf. die Taktwiederholung variieren).
Da du die Sequenz "\bar "!" \noBreak" in jedem Tak angeben mußt macht es Sinn, dies abzukürzen:
B = { \bar "!" \noBreak }
Und den Zwischenstrich dann mit \B einfügen.

gbehrendt

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #3 am: Montag, 13. Juli 2015, 21:31 »
Herzlichen Dank für eure Vorschläge!
Das Aussehen des Zwischentaktstrichs als drei Zwischenräume große Variante des normalen gefällt mir fürs erste sehr gut. Das Abkürzen und die Notwendigkeit von \noBreak leuchten ein, aber um diesen Zwischentaktstrich nicht in jedem Takt händisch einzugeben, lagere ich das doch aus, nur statt in eine partiturweite Variable eben in einen subdivision pattern für jedes Instrument. Etwas mehr Aufwand, weil man einmal auszählen muss, wie viele Pausentakte vorkommen, aber vielleicht gibt es bei anderen Instrumenten dann zufällige Übereinstimmungen...

Danke auch für den Hinweis mit compoundMeter. Ich würde – nah am Autograph – lieber 5/4 stehen lassen, die Unterteilung in 2/4 + 6/8 aber gern als markup über die Notenzeile setzen. Wie spreche ich compoundMeter (oder meinetwegen einzelne timeSignatures) im markup an?

Besten Dank
– Gereon

\version "2.18.2"

music = \relative c'' { \time 5/4 \compressFullBarRests
   { a2 a2. | a8 a a a a4. a |
   R4*5*3 | a2 a2. }
}

T = { \once\override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"\noBreak }

subdivisionpattern = { \repeat unfold 2 { s2 \T s2. }
s4*5*3  \repeat unfold 1 { s2 \T s2. } }

\score {
\new Staff << \subdivisionpattern  \music >>
}

Pierre

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #4 am: Dienstag, 14. Juli 2015, 09:46 »
[...] Wie spreche ich compoundMeter (oder meinetwegen einzelne timeSignatures) im markup an? [...]

Probier mal so:\version "2.18.2"

music = \relative c'' { \time 5/4 \compressFullBarRests
   { a2 a2. | a8 a a a a4. a |
   R4*5*3 | a2 a2. }
}

T = { \once\override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"\noBreak }

subdivisionpattern = { \repeat unfold 2 { s2 \T s2. }
s4*5*3  \repeat unfold 1 { s2 \T s2. } }

\score {
  \new Staff <<
    \tweak break-align-symbols #'(time-signature)
    \mark\markup\fontsize #-2 {
      \column { \number "2" \number "4" }
      \vcenter "+"
      \column { \number "6" \number "8" }
    }
    \subdivisionpattern 
    \music
  >>
}

Gruß,
~Pierre

gbehrendt

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #5 am: Dienstag, 14. Juli 2015, 19:03 »
Wunderbar, danke!

Doch noch einmal zurück zur Form der Zwischentaktstriche:
Ich würde anstelle des oben erwähnten verkürzten Taktstriches nun lieber eine divisio maior aus der gregorian.ly nehmen, weil ansonsten innerhalb der StaffGroup diese Zwischentaktlinien auch zwischen den Systemen erscheinen, was ich nicht möchte (die „normalen“ Taktstriche sollen da aber natürlich sein). Kann ich von der divisio maior auch so leicht die Länge verändern (auf zwei Zwischenräume)? Mit BreathingSign.Y-extent hab ich es leider nicht hinbekommen...
Oder schafft man es, die Taktstriche zwischen den Systemen einmalig auszuschalten?

Besten Dank
– Gereon

harm6

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #6 am: Dienstag, 14. Juli 2015, 19:32 »
Versuch mal:

\version "2.19.22"

\version "2.18.2"

music = \relative c'' { \time 5/4 \compressFullBarRests
   { a2 a2. | a8 a a a a4. a |
   R4*5*3 | a2 a2. }
}

T = { \once\override Staff.BarLine.bar-extent = #'(-1 . 1) \bar "|"\noBreak }

subdivisionpattern = { \repeat unfold 2 { s2 \T s2. }
s4*5*3  \repeat unfold 1 { s2 \T s2. } }

mus =
  \new Staff <<
    \tweak break-align-symbols #'(time-signature)
    \mark\markup\fontsize #-2 {
      \column { \number "2" \number "4" }
      \vcenter "+"
      \column { \number "6" \number "8" }
    }
    \subdivisionpattern 
    \music
  >>

\score {
  \new StaffGroup <<
  \mus
  \mus
  >>
  \layout {
    \context {
      \Staff
      \override BarLine.after-line-breaking =
      #(lambda (grob)
        (let ((bar-extent (ly:grob-property grob 'bar-extent)))
        ;(display bar-extent)
         (if (equal? bar-extent '(-1 . 1))
             (ly:grob-set-property! grob 'allow-span-bar #f))))
    }
  }
}

Gruß,
  Harm
« Letzte Änderung: Dienstag, 14. Juli 2015, 22:43 von harm6 »

gbehrendt

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #7 am: Sonntag, 26. Juli 2015, 21:22 »
Herzlichen Dank auch für diese Antwort!
Erwartungsgemäß funktioniert es auf diese Weise, aber mir wäre es dennoch lieber, den Zwischentaktstrich als Atemzeichen einzugeben – u.a. aus dem Grund, dass ich mich dann nicht darum kümmern muss, ihn zwischen den Systemen wieder auszublenden; auch der Zusatz \noBreak ist dann nicht nötig; v.a. aber bin ich der Meinung, ich hätte mehr Flexibilität bei der Auswahl des Symbols für den Zwischentaktstrich.

Genau dazu dann aber doch wieder eine Frage:
Ist es möglich, das Symbol eines Taktstrichs (z.B. \bar ";") in ein Markup einzufügen, um es als Atemzeichen zu verwenden? Grund ist der oben genannte, ein anderes Anwendungsbeispiel füge ich unten ein: die lang ausgehaltenen Tremolo-Schlusstöne vielfach geteilter Geigen sollen nebeneinander erscheinen, getrennt durch eine gepunktete Linie – die aber nur in der Geigen-Zeile stehen darf und also keine Taktgrenze für alle Systeme sein kann.

Also,
wie bekomme ich den Taktstrich \bar ";" in ein Markup?
Und kann ich da auch einen normalen Taktstrich (\bar "|") mit nur halber Länge einfügen?

Herzlichen Dank für eure Ideen!
– Gereon

\version "2.18.2"

teilung = { \bar ";" }
%teilung = { \once \override BreathingSign.text = \markup { \musicglyph #"scripts.rvarcomma" }     \breathe }

\relative c'' {
<<
{es\breve*1/8:16\!_\markup{1.}^\markup{div. a 4}
\teilung c!\breve*1/8:16_\markup{2.}
\teilung ces\breve*1/8:16_\markup{3.}
\teilung bes\breve*1/8:16_\markup{4.}
\bar "|." }
R1 >>
}

harm6

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #8 am: Montag, 27. Juli 2015, 09:46 »
Zitat
wie bekomme ich den Taktstrich \bar ";" in ein Markup?

Die Definition für \bar ";" befindet sich in bar-line.scm, ist aber nicht public.
Du kannst sie natürlich in Dein File kopieren und dann verwenden.
Ich würde allerdings 'stencil und nicht 'text angehen. Das führt zu:

\version "2.18.2"

#(define (make-dotted-bar-line grob extent)
  "Draw a dotted bar line."
  (let* ((position (round (* (interval-end extent) 2)))
         (correction (if (even? position) 0.5 0.0))
         (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
         (i (round (+ (interval-start extent)
                      (- 0.5 correction))))
         (e (round (+ (interval-end extent)
                      (- 0.5 correction))))
         (counting (interval-length (cons i e)))
         (stil-list (map
                     (lambda (x)
                       (ly:stencil-translate-axis
                        dot (+ x correction) Y))
                     (iota counting i 1))))

    (define (add-stencils! stil l)
      (if (null? l)
          stil
          (if (null? (cdr l))
              (ly:stencil-add stil (car l))
              (add-stencils! (ly:stencil-add stil (car l)) (cdr l)))))
    (add-stencils! empty-stencil stil-list)))
   
#(define (dotted-bar-breathe grob)
  (let* ((radius (ly:staff-symbol-staff-radius grob))
         (extent (cons (- radius) radius)))
   (make-dotted-bar-line grob extent)))

teilung = {
\once \override BreathingSign.Y-offset = 0
\once \override BreathingSign.stencil = #dotted-bar-breathe
\breathe
}

\relative c'' {
<<
{es\breve*1/8:16\!_\markup{1.}^\markup{div. a 4}
\teilung c!\breve*1/8:16_\markup{2.}
\teilung ces\breve*1/8:16_\markup{3.}
\teilung bes\breve*1/8:16_\markup{4.}
\bar "|." }
R1 >>
}

Zitat
Und kann ich da auch einen normalen Taktstrich (\bar "|") mit nur halber Länge einfügen?

Hier weiß ich nicht was Du meinst.


Gruß,
  Harm

gbehrendt

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #9 am: Montag, 27. Juli 2015, 13:29 »
Danke, Harm, das hilft mir schon.
Mit „halber Länge“ meinte ich das, was Pierre in #1 für den Taktstrich schon gelöst hatte – der normale \bar "|"-Strich, oben und unten um einen Zwischenraum verkürzt. Wenn ich den Strich als Atemzeichen verwenden will, muss ich’s aber vermutlich anders machen, oder?

harm6

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #10 am: Dienstag, 28. Juli 2015, 19:34 »
Ich habe das Ganze noch mal überarbeitet, da es nicht mit verschiedenen Staff-Größen skalierte.
Auch dabei ein BreathingSign als "halber" Taktstrich.

\version "2.18.2"

#(define (dotted-pseudo-bar-line-breathe grob)
  "Draw a dotted line, putting a dot in every staff-space."
  (let* ((radius (ly:staff-symbol-staff-radius grob))
         (staff-space (ly:staff-symbol-staff-space grob))
         (extent (symmetric-interval (* staff-space radius)))
         (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
         (line-count
           (ly:grob-property
             (car
              (filter
                (lambda (g)
                  (grob::has-interface g 'staff-symbol-interface))
                (ly:grob-array->list
                  (ly:grob-object (ly:grob-parent grob Y) 'elements))))
             'line-count)))
   (apply ly:stencil-add
     (map
       (lambda (x)
         (ly:stencil-translate-axis
           dot
           (+ (interval-start extent) (* (+ x 0.5) staff-space ))
           Y))
       (iota (1- line-count))))))
   
#(define (shortened-pseudo-bar-line-breathe grob)
  "Draw a vertical line shortened at bottom and top for one staff-space"
  (let* ((line-thickness (layout-line-thickness grob))
         (thickness
           (*
             (ly:grob-property
               (car
                (filter
                  (lambda (g)
                    (grob::has-interface g 'staff-symbol-interface))
                  (ly:grob-array->list
                    (ly:grob-object (ly:grob-parent grob Y) 'elements))))
               'thickness 1)
             line-thickness))
         (radius (ly:staff-symbol-staff-radius grob))
         (staff-space (ly:staff-symbol-staff-space grob))
         (extent (symmetric-interval (- (* staff-space radius) staff-space))))
   (ly:round-filled-box (cons 0 thickness) extent 0)))

dotted-breathe = {
  \once \override BreathingSign.Y-offset = 0
  \once \override BreathingSign.stencil = #dotted-pseudo-bar-line-breathe
  \breathe
}

half-bar-breathe = {
  \once \override BreathingSign.Y-offset = 0
  \once \override BreathingSign.stencil = #shortened-pseudo-bar-line-breathe
  \breathe
}

%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%

mus =
\relative c'' {
<<
  {
    es\breve*1/8:16_"1."^"div. a 4"
    \dotted-breathe c!\breve*1/8:16_"2."
    \dotted-breathe ces\breve*1/8:16_"3."
    \dotted-breathe bes\breve*1/8:16_"4."
  }
  {
    c4
    \half-bar-breathe
    d
    \half-bar-breathe
    e
    \half-bar-breathe
    f
  }
>>
}

%% From http://lsr.di.unimi.it/LSR/Item?id=862
%% Only inserted here to save typing while testing different sizes for Staves
staffSize =
#(define-music-function (parser location new-size) (number?)
  #{
    \set fontSize = #new-size
    \override StaffSymbol.staff-space = #(magstep new-size)
    \override StaffSymbol.thickness = #(magstep new-size)
  #})

<<
  \new ChoirStaff
    \with { \staffSize #-6 }
    \mus
 
  \new ChoirStaff
    \with { \staffSize #-3 }
    \mus
 
  \new ChoirStaff 
    \mus
 
  \new ChoirStaff
    \with { \staffSize #3 }
    \mus
 
  \new ChoirStaff
    \with { \staffSize #6 }
    \mus
>>


HTH,
  Harm

gbehrendt

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #11 am: Dienstag, 4. August 2015, 01:10 »
Wunderbar, das funktioniert sehr gut, ich wollte mich noch bedanken.

Jetzt habe ich das gleiche aber in einen einzeiligen DrumStaff geworfen (weil im Orchester ja eben auch Schlagzeug herumsteht) und da steigt das zum Zwischentaktstrich umfunktionierte Atemzeichen aus. Ein bisschen hab ich mir das schon gedacht, weil es die ausgerechnete Länge korrumpiert, aber gelöst bekomme ich es alleine nicht. Würdest du noch einmal reinschauen, Harm? Man könnte auch eine andere Funktion für solche Notenzeilen definieren.

Danke schon im Voraus
– Gereon


\version "2.18.2"

#(define (dotted-pseudo-bar-line-breathe grob)
  "Draw a dotted line, putting a dot in every staff-space."
  (let* ((radius (ly:staff-symbol-staff-radius grob))
         (staff-space (ly:staff-symbol-staff-space grob))
         (extent (symmetric-interval (* staff-space radius)))
         (dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
         (line-count
           (ly:grob-property
             (car
              (filter
                (lambda (g)
                  (grob::has-interface g 'staff-symbol-interface))
                (ly:grob-array->list
                  (ly:grob-object (ly:grob-parent grob Y) 'elements))))
             'line-count)))
   (apply ly:stencil-add
     (map
       (lambda (x)
         (ly:stencil-translate-axis
           dot
           (+ (interval-start extent) (* (+ x 0.5) staff-space ))
           Y))
       (iota (1- line-count))))))
   
#(define (shortened-pseudo-bar-line-breathe grob)
  "Draw a vertical line shortened at bottom and top for one staff-space"
  (let* ((line-thickness (layout-line-thickness grob))
         (thickness
           (*
             (ly:grob-property
               (car
                (filter
                  (lambda (g)
                    (grob::has-interface g 'staff-symbol-interface))
                  (ly:grob-array->list
                    (ly:grob-object (ly:grob-parent grob Y) 'elements))))
               'thickness 1)
             line-thickness))
         (radius (ly:staff-symbol-staff-radius grob))
         (staff-space (ly:staff-symbol-staff-space grob))
         (extent (symmetric-interval (- (* staff-space radius) staff-space))))
   (ly:round-filled-box (cons 0 thickness) extent 0)))

dotted-breathe = {
  \once \override BreathingSign.Y-offset = 0
  \once \override BreathingSign.stencil = #dotted-pseudo-bar-line-breathe
  \breathe
}

half-bar-breathe = {
  \once \override BreathingSign.Y-offset = 0
  \once \override BreathingSign.stencil = #shortened-pseudo-bar-line-breathe
  \breathe
}

%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%

mus =
\relative c'' {
c4  \half-bar-breathe  d  \half-bar-breathe  e  \half-bar-breathe  f  }

<<
\new Staff { \mus }
\new DrumStaff {
  \override Staff.StaffSymbol.line-positions = #'( 0 )
  \override Staff.BarLine.bar-extent = #'(-1.5 . 1.5)
\mus }
>>

harm6

  • Member
Re: Sub-Unterteilung 5/4-Takt
« Antwort #12 am: Dienstag, 4. August 2015, 02:21 »
Versuch mal:

#(define (shortened-pseudo-bar-line-breathe grob)
  "Draw a vertical line shortened at bottom and top for one staff-space"
  (let* ((line-thickness (layout-line-thickness grob))
         (thickness
           (*
             (ly:grob-property
               (car
                (filter
                  (lambda (g)
                    (grob::has-interface g 'staff-symbol-interface))
                  (ly:grob-array->list
                    (ly:grob-object (ly:grob-parent grob Y) 'elements))))
               'thickness 1)
             line-thickness))
         (staff-space (ly:staff-symbol-staff-space grob))
         (staff-radius (ly:staff-symbol-staff-radius grob))
         ;; Fall back:
         (radius (if (zero? staff-radius) 2 staff-radius))
         (extent (symmetric-interval (- (* staff-space radius) staff-space))))
   (ly:round-filled-box (cons 0 thickness) extent 0)))

HTH,
  Harm