hairpin unterbrochen durch DynamicText

Begonnen von chf, Montag, 29. Mai 2017, 15:33

« vorheriges - nächstes »

chf

Liebe Freunde,

ohne euch komme ich nicht weiter:
Mein Beispiel zeigt, was ich  n i c h t  will, sondern
nach dem forte soll die Klammer offen weitergehen!\

version "2.18.2"
\relative c'' {
c\< d e f g\f\< a b c\!   
}


Gruß
chf

kilgore

meine "quick and dirty" Lösung:

\version "2.18.2"

\relative c'' {
c\< d e f
g
-\tweak #'extra-offset #'( 0 . 2 )
_\markup \whiteout \dynamic " f "
a b c\!   
}


Malte


harm6

Hallo,

ich habe kürzlich elbowed-hairpin umgeschrieben.

Das kann man hier verwenden, nötig ist 2.19.60:

\version "2.19.60"

\paper {
  ragged-right = ##f
  indent = 0
}

largeHairpinPart =
\tweak stencil #(elbowed-hairpin '((0.0 . 0.5)(1.0 . 1.0)) #t)
\etc

smallHairpinPart =
\tweak stencil #(elbowed-hairpin '((0.0 . 0.0)(1.0 . 0.5)) #t)
\etc

{
  \override Hairpin.to-barline = ##f
  c'2\ff-\largeHairpinPart \> c'2\f-\smallHairpinPart \> c'2\p
  c'2\p-\smallHairpinPart \< c'2\f-\largeHairpinPart \< c'2\ff
  \break
  \override Hairpin.style = #'dashed-line
  c'2\ff-\largeHairpinPart \> c'2\f-\smallHairpinPart \> c'2\p
  c'2\p-\smallHairpinPart \< c'2\f-\largeHairpinPart \< c'2\ff
}


Allerdings ist elbowed-hairpin eine Funktion mit sehr vielen Möglichkeiten. Als Spezial-Fall hatte ich noch 'open-hairpin' geschrieben und da ich grad dabei war auch noch die Möglichkeit eingeführt Hairpin.dash-definition zu nutzen.
Dieser code ist noch nicht in LilyPond selbst, da ich noch nicht dazu gekommen bin beide zu verschmelzen (falls überhaupt möglich), insoweit hier der scheme-code:

\version "2.19.27"

#(define (solid-dashed-print-proc grob startx starty endx endy)
  (let* ((dash-def (ly:grob-property grob 'dash-definition))
         (thick
           (* (layout-line-thickness grob)
              (ly:grob-property grob 'thickness 0.1))))
    (if (null? dash-def)
        (ly:line-interface::line grob startx starty endx endy)
        (reduce ly:stencil-add empty-stencil
          (map
            (lambda (dash-def-elt)
              (let* ((start-x
                       (+ startx (* (- endx startx) (first dash-def-elt))))
                     (start-y
                       (+ starty (* (- endy starty) (first dash-def-elt))))
                     (end-x
                       (+ startx (* (- endx startx) (second dash-def-elt))))
                     (end-y
                       (+ starty (* (- endy starty)  (second dash-def-elt)))))
                (ly:stencil-translate
                  (ly:make-stencil
                    (list 'dashed-line
                      ;; thickness
                      thick
                      ;; on
                      (third dash-def-elt)
                      ;; off
                      (- 1 (fourth dash-def-elt)) ;; calculation correct?
                      ;; x-dest
                      (- end-x start-x)
                      ;; y-dest
                      (- end-y start-y)
                      ;; phase
                      0)
                    ;; x-ext
                    (cons start-x (- end-x start-x))
                    ;; y-ext
                    (ordered-cons 0 (- end-y start-y)))
                  (cons start-x start-y))))
            dash-def)))))
 
#(define ((open-hairpin open-gap close-gap) grob)
   (let* ((stencil (ly:hairpin::print grob))
          (thick (layout-line-thickness grob))
          (dir (ly:grob-property grob 'grow-direction))
          (X-ext (ly:stencil-extent stencil X))
          (Y-ext (ly:stencil-extent stencil Y))
          (width (- (interval-length X-ext) thick))
          (height (- (interval-length Y-ext) thick))
          (scaled-height (* height (max open-gap close-gap)))
          (scaled-gap (* height (min open-gap close-gap)))
          (upper-stil-part
            (solid-dashed-print-proc
              grob
              0
              (/ (if (= dir -1) scaled-height scaled-gap) 2)
              width
              (/ (if (= dir -1) scaled-gap scaled-height) 2))))
     (ly:stencil-translate
       (ly:stencil-add
         upper-stil-part
         (ly:stencil-scale upper-stil-part 1 -1))
       (cons (interval-start X-ext) (interval-start Y-ext)))))
     
{
  \override Hairpin.to-barline = ##f
  %% order of arguments for 'open-hairpin' doesn't matter!
  \once \override Hairpin.stencil = #(open-hairpin 0.5 1.0)
  c'2\fff\>
  \once \override Hairpin.stencil = #(open-hairpin 0.0 0.5)
  c'2\f\> c'2\pp r2
  \break
  \override Hairpin.dash-definition =
    #'((0      0.3    0    0.4)
       (0.3    0.7    1    1)
       (0.7    1.0    0.4  0.75))
  \once \override Hairpin.stencil = #(open-hairpin 0.0 0.5)
  c'2\pp\<
  \once \override Hairpin.stencil = #(open-hairpin 0.5 1.0)
  c'2\f\< c'2\fff r2
}

Dieses funktioniert seit David Nalesnik ly:line-interface::line eingeführt hat, d.h. 2.19.27

Anmerkung: das erste Codebeispiel verwendet tweak, das zweite override. Es geht natürlich immer beides.
Ein Bild für beide Codings im Anhang.

Gruß,
  Harm

P.S.
Das LSR ist wieder mal unerreichbar :(

chf

Dank euch allen - momentan ist kilgore's Lösung die nächstliegende für mich.
2.19... habe ich noch nicht , aber ich strebe sie an - ist sie jetzt stabil?

harm6

Zitat2.19... habe ich noch nicht , aber ich strebe sie an - ist sie jetzt stabil?
Was heißt schon stabil...?

2.18.2 hat bugs, 2.19. auch.

Es gibt seeeeehr viele neue features in 2.19. sowie bugfixes gegenüber 2.18.2. Manche Schwächen sind aber auch dazugekommen.

Warum nicht beide Version auf den Rechner holen und vergleichen?

Ich hab 2.12.3, 2.14.2, 2.16.2, 2.18.2, 2.19.56 sowie zweimal 2.19.61 und 2.19.62 in custom-builds mit verschiedenen guile-versionen.
Das letztere braucht niemand der weder in der Entwicklung im allgemeinen noch der guilev2-migration im besonderen involviert ist.
Aber verschiedene Versionen via installer ist kinderleicht, da gabs auch schon mindestens einen thread zu, such mal im Archiv.
Meine Methode das zu managen ist der Komplexitität dermassen vieler LilyPond/guile-Versionen geschuldet, sodaß ich hier nicht näher drauf eingehe...

Gruß,
  Harm

Malte

Ich kann harms Vorschlag zustimmen, probiers einfach aus :) Ich hab hier
2.12.3, 2.14.2, 2.16.2, 2.18.0, 2.18.2
2.19.10,15,16,18,20,33,35,36,37,38,39,40,42,44,46,47,48,49,53,56
Das ist meiner Deinstallationsfaulheit geschuldet, aber kein Problem. Seit 2.19.33 hab ich immer mal aktuelle Versionen installiert, die 2.19 davor und 2.12.3 bis 2.18.0 zum Testen, ab wann Bugs/Features da sind.

Ich installiere diese Versionen allesamt in mein Home-Verzeichnis (bzw. /home/malte/LilyPond/2.xx.xx) und mache sie Frescobaldi bekannt. Das schöne: Frescobaldi wählt anhand der \version-Angabe in der Datei automatisch die richtige LilyPond-Version aus. Einziger Haken: Ich muß auch Notationsfonts (verwende gerne Cadence) jedes Mal mit installieren. Dafür hab ich aber ein kleines Skript, welches als einziges Argument das Verzeichnis /home/malte/LilyPond/2.xx.xx bekommt, also auch sehr leicht handzuhaben ist.