Autor Thema: Schlagpfeile / Schlagmuster  (Gelesen 2883 mal)

gfuellerer

  • Gast
Schlagpfeile / Schlagmuster
« am: Donnerstag, 24. Dezember 2015, 13:29 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #1 am: Donnerstag, 24. Dezember 2015, 16:17 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #2 am: Donnerstag, 24. Dezember 2015, 16:24 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #3 am: Freitag, 25. Dezember 2015, 07:19 »
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!
« Letzte Änderung: Freitag, 25. Dezember 2015, 12:37 von gfuellerer »

harm6

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #4 am: Freitag, 25. Dezember 2015, 12:24 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #5 am: Samstag, 26. Dezember 2015, 07:25 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #6 am: Samstag, 26. Dezember 2015, 08:08 »
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

  • Gast
Re: Schlagpfeile / Schlagmuster
« Antwort #7 am: Samstag, 26. Dezember 2015, 20:25 »
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