• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Schlagpfeile / Schlagmuster

Begonnen von gfuellerer, Donnerstag, 24. Dezember 2015, 13:29

Vorheriges Thema - Nächstes Thema

gfuellerer

Ich habe mir Schlagpfeile über einen markup definiert:

arrUp=_\markup {
  \fontsize #5
  \override #'(thickness . 2)
  \combine
    \arrow-head #Y #UP ##t
    \draw-line #'(0 . -4)
}


und auch die Diskussion unter https://archiv.lilypondforum.de/index.php?topic=1493.0 gelesen.
Die Schlagpfeile können mittels markup entweder über oder unter den Noten platziert werden. Wie bekomme ich sie über die Notenlinien (vgl. OriginalSchlgapfeile).

Frohe Weihnachten!


Pierre

Hallo gfuellerer,

Siehe hier: http://lilypond.1069038.n5.nabble.com/arpeggio-line-td57703.html#a57704

%% \version "2.19.34"
%% oder:
\version "2.18.2"

arpeggioStrikeDown = {
        \override Arpeggio.stencil =
          #(lambda (grob)
            (let* ((pos (ly:grob-property grob 'positions))
                   (ln (grob-interpret-markup grob
                         (markup #:override (cons (quote thickness) 1.3) #:draw-line
                          `(0 . ,(- (interval-length pos))))))
                   (arrow-head (grob-interpret-markup grob (markup
                       #:arrow-head Y DOWN #f))))
            (ly:stencil-add
              (ly:stencil-translate-axis ln (interval-end pos) Y)
              (ly:stencil-translate-axis arrow-head (interval-start pos) Y))))

% Perhaps you may want to adjust the 'X-extent-override
        \override Arpeggio.X-extent = #'(-0.4 . 0.4)

        \override Arpeggio.Y-extent =
        #(ly:make-unpure-pure-container
          ly:grob::stencil-height
          (lambda (grob start end) (ly:grob::stencil-height grob)))
}

arpeggioStrikeUp = {
        \override Arpeggio.stencil =
          #(lambda (grob)
            (let* ((pos (ly:grob-property grob 'positions))
                   (ln (grob-interpret-markup grob
                         (markup #:override (cons (quote thickness) 1.3) #:draw-line
                          `(0 . ,(- (interval-length pos))))))
                   (arrow-head (grob-interpret-markup grob (markup
                      #:arrow-head Y UP #f))))

            (ly:stencil-add
              (ly:stencil-translate-axis ln (interval-end pos) Y)
              (ly:stencil-translate-axis arrow-head (interval-end pos) Y))))

% Perhaps you may want to adjust the 'X-extent-override
        \override Arpeggio.X-extent = #'(-0.4 . 0.4)

        \override Arpeggio.Y-extent =
        #(ly:make-unpure-pure-container
          ly:grob::stencil-height
          (lambda (grob start end) (ly:grob::stencil-height grob)))
}

\relative c' {
        \arpeggioStrikeDown
        <c' e g bes>\arpeggio
        <c, e g bes>\arpeggio

        \arpeggioStrikeUp
        <c' e g bes>\arpeggio

        \arpeggioStrikeDown
        <c, e g bes>
        -\tweak positions #'(-4 . 3)
        \arpeggio

        \arpeggioStrikeUp
        <c e g bes>
        -\tweak positions #'(-3.5 . 2.5)
        \arpeggio

        \arpeggioNormal
        <c e g bes>\arpeggio
}

\relative c {
        \time 3/16

        \arpeggioStrikeDown
        <e c' fis dis'>16\mf
        -\tweak positions #'(-6 . 3)
        \arpeggio
}


Frohe Weihnachten!
Pierre

harm6

Ich finde die Schlagpfeile ja übersichtlicher, wenn sie über oder unter dem System stehen, wie hier:
http://lsr.di.unimi.it/LSR/Item?id=409
Aber ich kenn' es auch anders.

ich würde Arpeggio überschreiben:


\version "2.19.32"

#(define ((strike direction) grob)
  (let* ((pos (ly:grob-property grob 'positions))
         (thick (ly:grob-property grob 'thickness 1)))
  (grob-interpret-markup grob
    (markup
      #:combine
        #:translate
          `(0 . ,(interval-end pos))
        #:override `(thickness . ,thick)
        #:draw-line
          `(0 . ,(- (interval-length pos)))
        #:translate
          (cons
            0
            ((if (= direction 1) interval-end interval-start)
             (interval-widen pos 0.5)))
        #:fontsize thick
        #:arrow-head Y direction #f))))

strikeUp =
#(define-event-function ()()
#{
  -\tweak stencil #(strike UP)
  -\tweak X-extent #'(-0.5 . 0.5)
  \arpeggio
#})

strikeDown =
#(define-event-function ()()
#{
  -\tweak stencil #(strike DOWN)
  -\tweak X-extent #'(-0.5 . 0.5)
  \arpeggio
#})


\new Staff <<
  \new Voice {
    \time 3/8
    \voiceOne
    %\override Arpeggio.thickness = 2
    gis'8 <b e' gis' b' e''>16\strikeUp 16\strikeDown 16\strikeUp 16\strikeDown
  }
  \new Voice {
    \voiceTwo e'8 b16 16 16 16
  }
>>


HTH,
  Harm

P.S.
Hab' gerade gesehen, daß Pierre meinen früheren Code verlinkt hat.
Der obige ist neuer und eleganter :)

gfuellerer

#3
Danke für die prompte Rückmeldung - Ich habe den Code von Pierre verwendet.
Beim Code von Harm bekomme ich in Version 2.18.2 folgende Fehlermeldung, die ich nicht verstehe:
Starte lilypond 2.18.2 [TestSchlagpfeile02_harm.ly]...
»/var/folders/ds/090bttvx3fsfkyn3xs_0m1sr0000gq/T/frescobaldi-mUaw9d/tmpcBPMUQ/TestSchlagpfeile02_harm.ly« wird verarbeitet
Analysieren.../Applications/LilyPond.app/Contents/Resources/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: In expression (apply (ly:music-function-extract fun) parser ...):
/Applications/LilyPond.app/Contents/Resources/share/lilypond/current/scm/ly-syntax-constructors.scm:56:23: Wrong number of arguments to #<procedure #f ()>
Wurde mit dem Return-Code 1 beendet.


Mit lilypond 2.19.34 klappt es wunderbar!

harm6

Zitat
Beim Code von Harm bekomme ich in Version 2.18.2 folgende Fehlermeldung, die ich nicht verstehe:
[...]

Deshalb hatte ich ja auch \version "2.19.32" geschrieben, damit klappt es.

Bitte gebe immer, die von Dir verwendete Version an!

Gruß,
  Harm

gfuellerer

Hallo harm,

Ist es möglich, dass der Schlagpfeil vor dem Fingersatz platziert wird?

\version "2.19.32"

#(define ((strike direction) grob)
  (let* ((pos (ly:grob-property grob 'positions))
         (thick (ly:grob-property grob 'thickness 1)))
  (grob-interpret-markup grob
    (markup
      #:combine
        #:translate
          `(0 . ,(interval-end pos))
        #:override `(thickness . ,thick)
        #:draw-line
          `(0 . ,(- (interval-length pos)))
        #:translate
          (cons
            0
            ((if (= direction 1) interval-end interval-start)
             (interval-widen pos 0.5)))
        #:fontsize thick
        #:arrow-head Y direction #f))))

strikeUp =
#(define-event-function ()()
#{
  -\tweak stencil #(strike UP)
  -\tweak X-extent #'(-0.5 . 0.5)
  \arpeggio
#})

strikeDown =
#(define-event-function ()()
#{
  -\tweak stencil #(strike DOWN)
  -\tweak X-extent #'(-0.5 . 0.5)
  \arpeggio
#})


\new Staff <<
  \new Voice {
    \time 3/8
    \voiceOne
    \set fingeringOrientations = #'(left)
    %\override Arpeggio.thickness = 2
    <e'' c''-1 a'-3 e'-2 a>16 \strikeUp

  }
  \new Voice {
     \set fingeringOrientations = #'(left)
    \voiceTwo <a-2>16

  }
>>



harm6

Klar, mittels:



%% #(define ((strike direction) grob)  ....

strikes =
#(define-event-function (dir)(integer?)
#{
  -\tweak stencil #(strike dir)
  -\tweak X-extent #'(-0.5 . 0.5) %% better do override??
  -\tweak script-priority #101
  \arpeggio
#})

strikeUp = \strikes #UP
strikeDown = \strikes #DOWN


Den Code habe ich noch etwas eingedampft.

Gruß,
  Harm

trulli

Zitat von: harm6 am Donnerstag, 24. Dezember 2015, 16:24
Ich finde die Schlagpfeile ja übersichtlicher, wenn sie über oder unter dem System stehen...

Finde ich auch und kommt häufig vor. In der Gitarrenliteratur stehen meistens die Pfeile darüber/darunter, wenn viele Schläge hintereinander kommen, also wenn ein Schlagmuster vorliegt. Für Schlussakkorde/einzelne Akkorde habe ich meistens den Pfeil neben den Noten gesehen.

Das nur am Rande zum unerschöpflichen Thema: "Was ist üblich in der Gitarrennotation?"  ::)

LG