Autor Thema: ansteigender Barré-Spanner  (Gelesen 3429 mal)

Castor

  • Gast
ansteigender Barré-Spanner
« am: Freitag, 28. Februar 2014, 21:07 »
Hallihallo,

wie immer erstma ein hübsches Beispiel:

\version "2.18.0"

bx = #(define-music-function (parser location str)(string?)
  #{ \override TextSpanner.bound-details.left.text = \markup \upright \concat { $str " " } #})

\relative c' {

  \override TextSpanner #'dash-fraction = #1
  \override TextSpanner #'font-size = #-1
  \override TextSpanner #'(bound-details left stencil-align-dir-y) = #CENTER
  \override TextSpanner #'(bound-details right text) = \markup { \draw-line #'(0 . -.75) }
  \override TextSpanner #'(bound-details right padding) = #-1
 
  \bx V
 
  e8\startTextSpan a d g c e a d\stopTextSpan
 
}

Dem Gitarristen schmerzt es wohl in den Augen, weil man das Beispiel ja niemals so spielen kann (mit Barré in der V. Lage) aber egal.

Das Problem ist recht offensichtlich. Eigentlich auch verbreitet, aber ich hab hier im Forum nix gefunden. Lösugnsvorschläge?

Habs einmal in Paint so gemacht wie ichs mir in etwa vorstelle.

Danke & lg

Castor

trulli

  • Gast
Re: ansteigender Barré-Spanner
« Antwort #1 am: Samstag, 1. März 2014, 08:21 »
Das Problem ist recht offensichtlich. Eigentlich auch verbreitet,

Hi Castor,
was meinst du damit? So eine Angabe kommt doch in der Realität gar nicht vor. Es handelt sich auch nicht um eine Barreangabe, sondern um eine Lagenangabe. Und für eine Lagenangabe braucht man nicht immer eine Linie hinter der römischen Zahl zu ziehen.
Oder redest du vom T21 im Caprichio Arabe?  ;)

Gruß von Trulli

Castor

  • Gast
Re: ansteigender Barré-Spanner
« Antwort #2 am: Samstag, 1. März 2014, 11:20 »
Mir ist schon klar, dass das keine Barré-Klammer ist, so wie in deinem Beispiel. Aber Barré gibt man doch häufig auch einfach als röm. Zahl darüber an, und wenn er länger gehalten werden soll/kann/muss, dann macht man so nen Spanner (z. B. im T21 im Capricho Árabe ;)). Wenns dir besser gefällt, schreib halt noch ein C davor, aber auch unabhängig davon, was für ein Spanner das nun ist, von mir aus kann da auch rit. stehen und die Linie gestrichelt sein oder was auch immer, es geht einfach darum, dass da so ein großer Zwischenraum zwischen Noten und Linie entsteht. Wie gesagt, eig. ist es auch egal, weil es ja nicht zu Missverständnissen führen kann, aber schöner sähs halt aus, wenn sich der Spanner ein bissl an solche ungünstigen Noten .. naja, anschmiegen könnte.

Zitat
Das Problem ist recht offensichtlich. Eigentlich auch verbreitet,

Damit meinte ich, dass Gitarrenspieler das eig. alle kennen müssten, zumindest die, die Noten lesen, weil Barré halt häufig so angegeben wird.

lg Castor

harm6

  • Gast
Re: ansteigender Barré-Spanner
« Antwort #3 am: Samstag, 1. März 2014, 23:55 »
Hallo,

tatsächlich habe ich einen Barré mit solch einer geknickten Linie schon gesehen.
Allerdings sehr selten und immer fand ich es fürchterlich anzusehen.

Getreu dem Motto "LilyPond kann alles" habe ich mich aber doch mal dran gegeben.
Es muß Dir allerdings klar sein, daß es keine vorgefertigten Befehle für sowas gibt.
Es ist also Handarbeit angesagt, auch in der späteren Anwendung!

Ich habe jetzt den 'stencil überschrieben, damit geht fast alles :)
Die üblichen overrides für den TextSpanner werden jetzt allerdings teilweise nicht mehr beachtet oder führen zu überraschenden Ergebnissen, insbesondere die für 'bound-details.
Eine weitere Einschränkung: TextSpanner über den Zeilenumbruch hinaus funktioniert nicht wie gewünscht.

Man kann vielleicht den Zeilenumbruch noch verbessern bzw auch für mehr Automatismen sorgen, aber da bitte ich Dich um Verständnis, daß ich meine ohnehin sehr beschränkte Zeit nicht für ein Projekt aufwende von dem ich sowieso nicht überzeugt bin. ;)

Aber hier der Code, Kommentare inline:

\version "2.18.0"

#(define ((kneed-line coords txt start-offset) grob)

  (define (pair-to-list pair)
    (list (car pair) (cdr pair)))
   
  (define (normalize-coords goods x y)
    (map
     (lambda (coord)
       (cons (* x (car coord)) (* y (cdr coord))))
     goods))
     
  (define (my-c-p-s points thick)
    (make-connected-path-stencil
     points
     thick
     1.0
     1.0
     #f
     #f))
     
  ;; outer let to trigger suicide
  (let ((sten (ly:line-spanner::print grob)))
    (if (grob::is-live? grob)
        (let* ((thick (ly:grob-property grob 'thickness 1))
               (thick (* thick (layout-line-thickness grob)))
               (xex (ly:stencil-extent sten X))
               (lenx (- (interval-length xex) (car start-offset)))
               (yex (ly:stencil-extent sten Y))
               (leny (interval-length yex))
               (xtrans (car xex))
               (ytrans (car yex))
               (uplist (map pair-to-list
                            (normalize-coords coords lenx (/ leny 2)))))
          (ly:stencil-add
            (ly:stencil-translate
              (my-c-p-s uplist thick)
             (cons (+ xtrans (car start-offset)) (+ ytrans (cdr start-offset))))
            (grob-interpret-markup grob (markup #:normal-text txt))))
        '())))
       
#(define (kneed-text-span txt buckle height start-offset)
  (kneed-line
    `((,buckle . 0)(1 . ,height) (1 . ,(- height 1))) txt start-offset))
 
kneedTextSpanner =
#(define-music-function (parser location txt buckle height start-offset)
  (markup? number? number? number-pair?)
"
 @code{kneedTextSpanner} benötigt vier Argumente:
   @var{txt} ist der Text
   @var{buckle} ist die Stelle an der der Knick sein soll, gemessen in
     Prozent der Länge des gesamten TextSpanner
   @var{height} ist die Höhe, die die Linie dann erreichen soll.
   @var{start-offset} regelt den Anfang der Linie. Der erste Wert bestimmt wie-
     viel Abstand zum Text eingehalten werden soll (gemessen ab dem ref-point
     des Textes, d.h. am linken Rand vom Text). Der zweite Wert legt fest in
     welcher Höhe die Linie relativ zum Text anfangen soll.
"
#{
  \override TextSpanner #'stencil =
    #(kneed-text-span txt buckle height start-offset)
  \override TextSpanner #'outside-staff-priority = ##f
  \override TextSpanner #'(bound-details right padding) = #-1
  \override TextSpanner.bound-details.left.text = \markup "|"
#})

\version "2.18.0"

\score {
  \relative c' {
    \override TextSpanner #'padding = #2
    \override TextSpanner #'font-size = #-1
    \kneedTextSpanner "XIV" #0.3 #8.5 #'(4 . 0.8)
    e8\startTextSpan a d g c e a d\stopTextSpan
  }
}

\score {
  \relative c' {
    \override TextSpanner #'padding = #2
    \override TextSpanner #'font-size = #-1
    \kneedTextSpanner "XIV" #0.3 #8.5 #'(4 . 0.8)
    e8\startTextSpan a d g c e a d\stopTextSpan
  }
  \layout { ragged-right = ##f }
}

\score {
  \relative c' {
    \override TextSpanner #'padding = #2.5
    \override TextSpanner #'font-size = #-1
    \kneedTextSpanner "I" #0.3 #4.5 #'(1 . 0.8)
    e8\startTextSpan a d g c d e f\stopTextSpan
  }
}

\score {
  \relative c' {
    \override TextSpanner #'padding = #2.5
    \override TextSpanner #'font-size = #-1
    \kneedTextSpanner "I" #0.3 #4.5 #'(1 . 0.8)
    e8\startTextSpan a d g c d e f\stopTextSpan
  }
  \layout { ragged-right = ##f }
}

Gruß,
  Harm

Castor

  • Gast
Re: ansteigender Barré-Spanner
« Antwort #4 am: Sonntag, 2. März 2014, 09:25 »
Hi,

vielen Dank dafür, für nen ansteigenden Barré funktioniert es sehr gut.

Zitat
ein Projekt [...] von dem ich sowieso nicht überzeugt bin

also würdest du dann einfach die Variante mit der geraden Linie und dem Zwischenraum bevorzugen? Na wenn das so ist ... :)

also ich werd deinen Code jetz sicher das eine oder andere Mal verwenden :D

lg Castor