Autor Thema: Wiederholung "Brackets" ?  (Gelesen 11987 mal)

kilgore

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #15 am: Dienstag, 26. April 2011, 17:15 »
Hey ihr beiden!

Also ich bin begeistert davon was ihr gebaut habt!  Sieht richtig klasse aus.    Meine einzige Änderung für meine Zwecke, war die Brackets ein bisschen zu vergrössern ( #:fontsize 3  ).   Die kleineren sehen tatsächlich ganz gut aus, aber ich hatte immer den Wünsch die nochmal mit dem Stift grösser zu machen.  Klar ist klar :)

Zu den Zeilenumbrüchen, mach ich den Trick mit \grace s16 ....  mir ist sonst nichts besseres eingefallen.   
Gruß
kil

harm6

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #16 am: Dienstag, 26. April 2011, 20:45 »
Hallo zusammen,

das mit dem Zeilenumbruch ließ mir keine Ruhe und so habe ich eine kleine Funktion ersonnen, die das etwas besser zu handeln weiß:
combinedBreak =
#(define-music-function (parser location ) ()
#{
    \stopRepeatBracket
    \break
    \grace s4
    \startRepeatBracket
#})
%------------------------ Test -------------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
        d
        \combinedBreak
        e
        \stopRepeatBracket
}

@Robert:
Ich bin Deiner Prüfmethode mal gefolgt (und habe den Adobe Reader extra runtergeladen):
Du hast völlig recht!!

Gruß,
  Harm

kilgore

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #17 am: Dienstag, 26. April 2011, 23:12 »
und mit:

combinedBreak =
#(define-music-function (parser location ) ()
#{
    \stopRepeatBracket
    \break
    \grace s4
    \startRepeatBracket
    \once \override Staff.BarLine #'extra-offset = #'( -2.3 . 0 )
#})
%------------------------ Test -------------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
        d
        \combinedBreak
        e
        \stopRepeatBracket
}

...so ein bisschen weniger auffällig, oder?

Gruß
kil

harm6

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #18 am: Dienstag, 26. April 2011, 23:25 »
Hallo kil,

würd ich nicht machen!
Probier mal mit \key cis\major

Gruß,
  Harm

kilgore

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #19 am: Mittwoch, 27. April 2011, 16:41 »
ja stimmt, aber da ich meistens sachen ohne tonart schreibe ist es für mich egal.    Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt. 
komisch, dieses Rätsel!

RobUr

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #20 am: Mittwoch, 27. April 2011, 20:26 »
Zitat von: kilgore
[…] aber da ich meistens sachen ohne tonart schreibe […]
Aha! C-Dur/a-Moll ist also keine Tonart ;D  Du meinst sicher ohne Vorzeichen;)  Wir geben uns immer Mühe, dass ein Snippet universell eingesetzt werden kann. Deine Hinweise sind trotzdem wertvoll für andere, die das Aussehen an ihren persönlichen Geschmack anpassen möchten.

@harm6
Ja: ein Makro à la \combinedBreak ist wohl die unaufwändigste Lösung momentan. Angesichts der Vielfalt anderer Wiederholungsstrichtypen wäre es eigentlich wünschenswert, eine Art Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:" zur Verfügung zu haben, das die Zeilenumbruchsregeln beibehält. Aber der ursprüngliche Wunsch war ja, nur ab und zu diese geschweiften Wiederholungen einsetzen zu wollen. Wenn ich aber an’s Real Book denke, gibt es sicherlich Bedarf an dieser Funktion nicht nur in unserer Community!

Viele Grüße, Robert

harm6

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #21 am: Mittwoch, 27. April 2011, 23:01 »
Hallo Allerseits,

ich hab' mal weiter rumgespielt mit den schicken neuen Brackets. Vor allem in Hinblick auf den Zeilenumbruch und die Zeilenumbruchsregeln:

  • Tonartwechsel am Zeilenende klappt tadellos!
  • Beim Taktwechsel gibts ein kleines Problem (bei meinem Macro). Wenn man davon absieht, daß es zu eng ist (hab' ich nicht korrigiert) erscheint die Taktangabe woanders. Ich finde es eigentlich ok so, aber was meint ihr? (-> barlineOne.png

Der Code dazu:
\relative c' {
        \key cis\major

        \grace s4 ^\markup { \fontsize #'2 BracketTips }
\startRepeatBracket
b'1
        \key ces\major
        \time 2/2
        \combinedBreak
\mark\markup { \with-color #red \fontsize #'5 "!" }
        e
        \stopRepeatBracket
        \bar "|."
}

\relative c' {
        \key cis\major
        \repeat volta 2 { b'1^\markup { \fontsize #'2 default } }
       
        \key ces\major
        \time 2/2
\break
        \repeat volta 2 { \mark\markup { \with-color #red \fontsize #'5 "!" } e }
}

Ich habe auch dies probiert:
#(define my-bar-glyph-alist
  '((":|:" . (":|" . "|:"))
    (":|.|:" . (":|" . "|:"))
    (":|.:" . (":|" . "|:"))
    ("||:" . ("||" . "|:"))
    ("dashed" . ("dashed" . '()))
    ("|" . ("|" . ()))
    ("||:" . ("||" . "|:"))
    ("|s" . (() . "|"))
    ; amended this entry
    ("|:" . ("||" . "|:"))
    ("|." . ("|." . ()))

    ;; hmm... should we end with a bar line here?
    (".|" . ("|" . ".|"))
    (":|" . (":|" . ()))
    ("||" . ("||" . ()))
    (".|." . (".|." . ()))
    ("|.|" . ("|.|" . ()))
    ("" . ("" . ""))
    (":" . (":" . ""))
    ("." . ("." . ()))
    ("empty" . (() . ()))
    ("brace" . (() . "brace"))
    ("bracket" . (() . "bracket"))
    ))
%{
#(define-public (my-bar-line::calc-break-visibility grob)
  (let* ((glyph (ly:grob-property grob 'glyph))
(result (assoc glyph my-bar-glyph-alist)))
    (if result
(vector (string? (cadr result)) #t (string? (cddr result)))
#(#t #t #t))))
%}
#(define (my-bar-line::calc-glyph-name grob)
   (let* (
          ; inlined this from lily-library.scm, since it isn't public
          (index-cell (lambda (cell dir)
                        (if (equal? dir 1)
                            (cdr cell)
                            (car cell))))
          (glyph (ly:grob-property grob 'glyph))
          (dir (ly:item-break-dir grob))
          (result (assoc glyph  my-bar-glyph-alist))
          (glyph-name (if (= dir CENTER)
                          glyph
                          (if (and result (string? (index-cell (cdr result) dir)))
                              (index-cell (cdr result) -1)
                              #f)))
          )
     glyph-name))

%------------------------------ Test -------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
        \stopRepeatBracket
    \once \override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
    \bar ":|:"
    \break
    \mark\markup { \with-color #red \fontsize #'5 "?" }
        e
        \stopRepeatBracket
}
-> barlineTwo.png
In der neuen Zeile erscheint die Bracket. Warum die BracketTips mitgenommen werden weiß ich nicht. Sie sind allerdings seitenverkehrt. Der Doppelpunkt war eigentlich auch auf der falschen Seite aber durch eine kleine Änderung gegenüber dem Original ist er auf die andere Seite gerutscht.

                              (index-cell (cdr result) -1)

Das weckt in mir die Hoffnung, daß es möglich ist die zweite Bracket gänzlich zu drehen, zu spiegeln oder ähnliches.

@kilgore
Zitat
Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt.
komisch, dieses Rätsel!
Das ist eigentlich kein Wunder, denn (um ein Bild zu gebrauchen) Du hast eine Wand im Haus versetzt aber die Einrichtung gelassen wo sie war.

Gruß,
  Harm

kilgore

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #22 am: Mittwoch, 27. April 2011, 23:43 »
Aha! C-Dur/a-Moll ist also keine Tonart Grinsend  Du meinst sicher ohne Vorzeichen …
nee ich meine tatsächlich ohne Tonart  :)   Freu mich aber, dass meine Frage eine so robuste Gespräch angefangen hat  ;D

harm6

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #23 am: Freitag, 29. April 2011, 01:36 »
Hallo zusammen,

es ist mir gelungen die Bracket in der neuen Zeile zudrehen! ;D

Dazu habe ich die Definition für shift-right-at-line-begin aus /scm/output-lib.scm verändert. Eine Definition für my-bar-glyph-alist, die sich in ihrem einzigen Inhaltspunkt noch nicht mal vom Original unterscheidet, war nur nötig um der Definition my-bar-line::calc-glyph-name grob einen Bezugspunkt zu liefern.
Jetzt gelingt es auch ein neues \Break zu bestimmen mit einem üblichen \bar ":|:" und \break als "Auslöser".

Nun kann man alles schöner und einfacher gestalten. Es gibt auch keine Verschiebung nach rechts mehr und beim Taktwechsel erscheint die Taktangabe genauso wie in der default-Einstellung.

Beim Schreiben würde ich ganz normal die Noten mit den neuen repeatBrackets setzen und nur dort wo \combinedRepeatBracket an ein Zeilenende kommt durch \stopRepeatBracket\Break ersetzen, alternativ #'line-break-permission = ##f und alles per Hand regeln.

@Robert
Das ist zwar ein übler Hack und noch weit entfernt von einem "Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:"", aber im Moment weiß ich nichts besseres. Und es funktioniert!

\version "2.12.3"

\layout {
    indent = 10
    short-indent = 10
}
\paper {
    ragged-right =##f
}

#(define-markup-command (lthskip layout props amount) (number?)
  ;; lthskip = "line-thickness skip"
  (let ((l-th (ly:output-def-lookup layout 'line-thickness)))
    (ly:make-stencil "" (cons 0 (* amount l-th)) '(0 . 0) )))

#(define my-bar-glyph-alist
  '((":|:" . (":|" . "|:"))))
  
#(define (my-bar-line::calc-glyph-name grob)
   (let* (
          ; inlined this from lily-library.scm, since it isn't public
          (index-cell (lambda (cell dir)
                        (if (equal? dir 1)
                            (cdr cell)
                            (car cell))))
          (glyph (ly:grob-property grob 'glyph))
          (dir (ly:item-break-dir grob))
          (result (assoc glyph  my-bar-glyph-alist))
          (glyph-name (if (= dir CENTER)
                          glyph
                          (if (and result (string? (index-cell (cdr result) dir)))
                              (index-cell (cdr result) -1)
                              #f)))
          )
     glyph-name))

#(define (rotate-at-line-begin g)
  "Rotate an item, but only at the start of the line."
  (if (and (ly:item? g)
  (equal? (ly:item-break-dir g) RIGHT))
  (ly:grob-set-property! g 'rotation (list 180 0 0))
      ))
      
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
 (ly:stencil-add
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y UP
     (grob-interpret-markup grob (markup
       #:musicglyph "brackettips.up"))
     -0.1 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:musicglyph "brackettips.down"))
     -0.1 0)))  
\bar "|:"
}

stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
 (ly:stencil-add
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y UP
     (grob-interpret-markup grob (markup
         #:concat (
         #:lthskip 6
         #:right-align
         #:rotate 180
         #:musicglyph "brackettips.down" )))
     -0.1 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:concat (
         #:lthskip 6
         #:right-align
         #:rotate 180
         #:musicglyph "brackettips.up" )))
     -0.1 0)))  
\bar ":|"
}

combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
 (ly:stencil-add
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y UP
     (grob-interpret-markup grob (markup
       #:concat (
         #:lthskip 3
         #:concat (
           #:right-align
           #:vcenter
           #:rotate 180 #:musicglyph "brackettips.down"
           #:lthskip 3
           #:vcenter
           #:musicglyph "brackettips.up"))))
     -0.1 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:concat (
         #:lthskip 3
         #:concat (
           #:right-align
           #:vcenter
           #:rotate 180 #:musicglyph "brackettips.up"
           #:lthskip 3
           #:vcenter
           #:musicglyph "brackettips.down"))))
     -0.1 0)))
\bar ":|:"
}

Break =  {
    \once\override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
    \once\override Staff.BarLine #'after-line-breaking = #rotate-at-line-begin  
    \bar ":|:"
    \break
}

%------------------------- Test ------------------------------------------------


%#(set-global-staff-size 11.22) %% smallest recommended staff size
#(set-global-staff-size 20) %% default staff size
% #(set-global-staff-size 35.2) %% largest recommended staff size

\score {
  \relative c' {
          \key cis\major
  \mark\markup { \with-color #red \fontsize #'3 "Beispiel I" }
           \grace s4
   \startRepeatBracket
   b'1
           \stopRepeatBracket
           \Break
       \time 2/2
           e
           \stopRepeatBracket
           \bar "|."
  }
  \layout {
    ragged-right = ##t
  }
}

\relative c' {
        %\key cis\major
\mark\markup { \with-color #red \fontsize #'3 "Beispiel II" }
        \grace s4
\startRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break  
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \stopRepeatBracket
}

Grüße,
  Harm
« Letzte Änderung: Freitag, 29. April 2011, 01:51 von harm6 »

RobUr

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #24 am: Freitag, 29. April 2011, 13:03 »
WOWOWOWOW!!!

Das ist ja echt abgefahren ;D Herzlichen Dank! Das Snippet ist wiedermal LSR-verdächtig ;)

Und es funktioniert auch mit \repeat volta x { ... }

Grüße, Robert

harm6

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #25 am: Freitag, 29. April 2011, 16:08 »
Hallo zusammen,

ich hab' noch ein bißchen weitergetestet:
\override Staff.BarLine #'thick-thickness = #8  (hat Robert schon erwähnt)
\override Staff.BarLine #'kern = #8       
\override Staff.BarLine #'thin-kern = #8   

zerstören das Konstrukt!


\override Staff.BarLine #'bar-size = #8    
\override Staff.BarLine #'hair-thickness = #8

funktionieren!


@Robert
Ich finde auch, daß das etwas fürs LSR ist (sieht man ja schon an der Zahl der Aufrufe dieser Seite).

Allerdings sind zahlreiche Kommentare nötig:


Da die meisten Ideen von Dir stammen und mein Englisch wirklich miserabel ist, schlage ich vor, daß Du das machst. ;) Ich helf' natürlich gerne.
Wenn Du magst, kannst Du mich ja als Co-Autor benennen.


Gruß,
  Harm
« Letzte Änderung: Freitag, 29. April 2011, 16:36 von harm6 »

kilgore

  • Member
Re:Wiederholung "Brackets" ?
« Antwort #26 am: Freitag, 29. April 2011, 18:11 »
Ihr seid meine Helden!!  Wirklich super geil!!
 ;D   ;D   ;D