Mögliche Verzierungen

Begonnen von Hilflos-im-Code, Freitag, 6. März 2020, 12:50

« vorheriges - nächstes »

Hilflos-im-Code

Ich habe gerade versucht herauszufinden, was für Verzierungszeichen Lilypond zur Verfügung stellt. Bin aber auf keine Liste gestoßen. Gibt es so etwas?

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

#2
Ansonsten im Anhang der Notationsreferenz: https://lilypond.org/doc/v2.20/Documentation/notation/list-of-articulations Was suchst du denn? Es gibt ja auch die Möglichkeit, Zeichen noch zu LilyPond hinzuzufügen ;)

Edit: Leider sind \prallup und \pralldown in Version 2.20.0 noch falsch. Version 2.21.0 hat überarbeitete Versionen von \prallup, \pralldown, \downprall, \lineprall und \downmordent, außerdem zusätzlich \slashturn und \haydnturn.

Hilflos-im-Code

Zitat von: Malte am Freitag,  6. März 2020, 17:00
Ansonsten im Anhang der Notationsreferenz: https://lilypond.org/doc/v2.20/Documentation/notation/list-of-articulations Was suchst du denn? Es gibt ja auch die Möglichkeit, Zeichen noch zu LilyPond hinzuzufügen ;)
Also ich habe ein paar Zeichen gesucht, die ich für Lautentabulaturen und die daraus entstehenden Noten brauche. Die sind aber leider nicht dabei. Also vermutlich die harte Tour, Zeichen hinzufügen.

Wobei die Zeichen großteils in der Noten- bzw Notenzeile stehen sollen. Weiter systematisch zum Notenkopf bzw. Tabulaturzeichen ausgerichtet sein sollen. Siehe die geschlossene Klammer im Anhang nach der letzten Note in Tabulatur bzw. Note.

Ich habe das bisher händisch gemacht.


Abs = \markup {\bold \fontsize #3 \override #' (font-name  ."FandangoTabFlags") Ę }
{ gis''8 -\tweak extra-offset #'( 1.5 . 6 ) _\Abs}


Vielleicht würde auch reichen, wie man ein Markup automatisch zu einem Noten/Tabulaturzeichen ausrichtet.

Hilflos-im-Code

Ich habe es so gelöst:
\version "2.20.0"
Abt = -\single \textLengthOn  -\tweak font-size #-1 -\tweak font-name "Arial" -\tweak color #black -\tweak digit-names ##(")" "2" "3" "4" "0") \rightHandFinger  1
global = {
  \key c \major
  \time 4/4
}

classicalGuitar = \relative c' {
  \global
a \Abt
 
}

\score {
  \new StaffGroup  <<
    \new Staff { \clef "treble_8" \classicalGuitar }
    \new TabStaff
   
    \with {
    \consists  "New_fingering_engraver"
     \override StrokeFinger.whiteout = ##t }{
     
     
      \classicalGuitar
     
   
      }
  >>

}


Dabei habe ich festgestellt, dass \override Fingering.digit-names = ##(")" "a" "d" "e" "f") nicht funktioniert, aber auch keine Fehlermeldung erzeugt.

harm6

ZitatDabei habe ich festgestellt, dass \override Fingering.digit-names = ##(")" "a" "d" "e" "f") nicht funktioniert, aber auch keine Fehlermeldung erzeugt.
Also ich bekomme ")" sowohl im Staff als auch im TabStaff angezeigt...?

Ich hatte auch schon daran gedacht StrokeFinger zu mißbrauchen.
Einerseits würde ich dann aber etwas anders vorgehen, andereseits gibts ein Problem, daß ich nicht gelöst bekomme.

Zunächst zur Vorgehensweise.
Ich würde die digit-names im layout erweitern (unter Beibehaltung der jetzigen p-i-m-a-x-Einträge). Im Score-context, dann stehen sie überall zur Verfügung und können einfach mittels \rightHandFinger #xy  aufgerufen werden. Dafür könnte man dann auch shortcuts kreieren.
whiteout-Einstellungen ebenfalls ins TabVoice-layout...
Den Engraver lieber in TabVoice denn TabStaff, dann funktionieren context-properties-Setzungen sowohl in der Voice als auch in der TabVoice, da beides Bottom-contexte sind.

Also:


\version "2.20.0"

\layout {
  \context {
    \TabVoice
    \override StrokeFinger.whiteout-style = #'box
    \override StrokeFinger.whiteout = ##t
    \consists "New_fingering_engraver"
  }
%  \context {
%    \TabStaff
  \revert TextScript #'stencil
%  }
  \context {
  \Score
      \override StrokeFinger.digit-names =
        #(vector
          "p" "i" "m" "a" "x"
          ;; 6
          #{
          \markup \rotate #-90 \normal-text \concat \vcenter { ":" "-" ")" }
          #}
          ;; 7
          #{ \markup \musicglyph #"accidentals.rightparen" #}
          ;; 8
          #{ \markup \musicglyph #"accidentals.leftparen" #}
          ;; 9
          #{ \markup \fontsize #0 \musicglyph #"scripts.prall" #}
          ;; 10
          #{ \markup \fontsize #-1 \override #'(font-name . "Arial") ")" #}
          )
  }
}

Abt = -\single \textLengthOn 
      -\tweak font-size #-1
      -\tweak font-name "Arial"
      -\tweak color #black
      -\tweak digit-names ##(")" "2" "3" "4" "0")
      \rightHandFinger  1
     
global = {
  \key c \major
  \time 4/4
}

classicalGuitar = \relative c' {
  \global
  a \Abt
  ais-\rightHandFinger #6
  b-\rightHandFinger #7
  \once \set strokeFingerOrientations = #'(left)
  c-\rightHandFinger #8
  cis-\rightHandFinger #9 ^\markup { "Foo" }
  d-\rightHandFinger #10
}

\score {
  \new StaffGroup  <<
    \new Staff { \clef "treble_8" \classicalGuitar }
    \new TabVoice \classicalGuitar
  >>
}


Das Problem:
Sobald ein markup dazukommt, gibts einen programming error:
side-axis not set for grob StrokeFinger

Keine Ahnung warum und wie man es vermeidet.
Ich hab mal' auf der internationalen Liste gefragt.
https://lists.gnu.org/archive/html/lilypond-user/2020-03/msg00052.html

Gruß,
  Harm

harm6

Zitat
Zitat
Dabei habe ich festgestellt, dass \override Fingering.digit-names = ##(")" "a" "d" "e" "f") nicht funktioniert, aber auch keine Fehlermeldung erzeugt.
Also ich bekomme ")" sowohl im Staff als auch im TabStaff angezeigt...?
Ah, falsch gelesen...
Es muß
StrokeFinger.digit-names
heißen.

Gruß,
  Harm

Hilflos-im-Code

Deine Lösung ist cool, weil man nicht auf 10 (Anzahl der Finger) beschränkt ist.

Hilflos-im-Code

Ich wollte deine Lösung noch für ein anderes Problem benutzen.

Lilypond setzt meiner Meinung nach das "p" zu hoch. Aber

\version "2.20.0"

\layout {


  \context {
  \Score
      \override StrokeFinger.digit-names =
        #(vector
         #{ \markup  \override #'(X-offset . -2)  "p"  #}

          "i" "m" "a" "x"
       

          )
  }
}



global = {
  \key c \major
  \time 4/4
}

classicalGuitar = \relative c' {
  \global
  a8\rightHandFinger #1  8 \rightHandFinger #2
  8\rightHandFinger #3  8 \rightHandFinger #4
}

\score {
  \new StaffGroup  <<
    \new Staff { \clef "treble_8" \classicalGuitar }

  >>
}


führt nicht weiter. Mit \translate bin ich auch nicht weiter gekommen.

harm6

Zitat von: Hilflos-im-Code am Montag,  9. März 2020, 11:02
Ich wollte deine Lösung noch für ein anderes Problem benutzen.

Lilypond setzt meiner Meinung nach das "p" zu hoch.
Ich bin nicht sicher, ob ich da zustimmen würde...

Zitat

Aber

\layout {
  \context {
  \Score
      \override StrokeFinger.digit-names =
        #(vector
         #{ \markup  \override #'(X-offset . -2)  "p"  #}
          "i" "m" "a" "x")
  }
}


führt nicht weiter.

Es gibt kein markup-command, das auf einen override für X-offset hört. Das ist etwas für das grob selbst.

Zitat
Mit \translate bin ich auch nicht weiter gekommen.

\translate braucht hier einen Referenzpunkt.
Wenn ich das richtig verstehe kann sonst ein grob mit negativen extents herauskommen und LilyPond filtert sowas.

Also:

\layout {
  \context {
  \Score
      \override StrokeFinger.digit-names =
        #(vector
         "p"
          #{ \markup  \combine \null \translate #'(0 . -1.5) "i" #}
          "m" "a" "x")
  }
}


Aber der numerische Wert muß je nach staff-size manuell angepasst werden...

Vielleicht ist folgendes besser:

\version "2.20.0"

adjustedStrokeStencil =
\override StrokeFinger.stencil =
   #(lambda (grob)
      (let ((stil (ly:text-interface::print grob)))
        (if (ly:stencil? stil)
            (let ((stil-x (ly:stencil-extent stil X))
                  (stil-y (ly:stencil-extent stil Y)))
             
              (ly:make-stencil
                (ly:stencil-expr stil)
                stil-x
                (cons 0 (cdr stil-y))))
            '())))

m =
\relative c' {
  a'8\rightHandFinger #1 
  8 \rightHandFinger #2
  8\rightHandFinger #3 
  8 \rightHandFinger #4
  8 \rightHandFinger #5
}

<<
  \new Staff \m
  \new Staff { \adjustedStrokeStencil \m }
>>


Gruß,
  Harm

Hilflos-im-Code

Zitat von: harm6 am Montag,  9. März 2020, 22:42
Zitat von: Hilflos-im-Code am Montag,  9. März 2020, 11:02
Ich wollte deine Lösung noch für ein anderes Problem benutzen.

Lilypond setzt meiner Meinung nach das "p" zu hoch.
Ich bin nicht sicher, ob ich da zustimmen würde...
Vielen Dank.

Bei genauerem Hingucken habe ich gerade festgestellt, dass Lilypond Regeln aus der ersten Klasse Grundschule (Ich habe einfach zu viel mit diesen Kindern zu tun. Die schimpfen immer wegen meiner Schrift und versuchen mir anständiges Schreiben beizubringen. Sie sind sehr rabiat dabei.) nicht beachtet. Siehe http://www.familothek.de/liniertes-papier-grundschule-welche-linien-wofuer.html unter dem Punkt Erstklässler.

\version "2.20.0"




\relative c' {  \set fingeringOrientations = #'(left)
               
< a'-1-2-3-4-5 \rightHandFinger #1   \rightHandFinger #2   \rightHandFinger #3   \rightHandFinger #4   \rightHandFinger #5    >4

}




\relative c' {  \set fingeringOrientations = #'(left)
                 \override StrokeFinger.color = #red
                 \override Fingering.color = #green
< a'-1-2-3-4-5 \rightHandFinger #1   \rightHandFinger #2   \rightHandFinger #3   \rightHandFinger #4   \rightHandFinger #5    >4

}

\relative c' {  \set fingeringOrientations = #'(left)
                 \override StrokeFinger.font-name = "Bookman"
                 \override StrokeFinger.color = #red
                 \override Fingering.color = #green
                   \override Fingering.font-name = "Bookman"
< a'-1-2-3-4-5 \rightHandFinger #1   \rightHandFinger #2   \rightHandFinger #3   \rightHandFinger #4   \rightHandFinger #5    >4

}


\relative c' {  \set fingeringOrientations = #'(left)
                 \override StrokeFinger.font-name = "Bromine"
                 \override StrokeFinger.color = #red
                 \override Fingering.color = #green
                   \override Fingering.font-name = "Bad Script"
< a'-1-2-3-4-5 \rightHandFinger #1   \rightHandFinger #2   \rightHandFinger #3   \rightHandFinger #4   \rightHandFinger #5    >4

}




Besonders beim letzten Beispiel sieht man besonders gut, dass Lilypond die Buchstaben anders bezüglich des Hausbodens anordnet als eine Textverarbeitung.

harm6

Du vergleichst Äpfel mit Birnen.

Ein Vergleich zwischen einem beliebigen Textverarbeitungsprogramm und einem beliebigen Notensatzprogramm ist nur dort aussagekräftig wo beide Programme auch dieselbe Aufgabe bekommen.

Z.B. für die Textverabeitung
p i m a x
pimax

Für LilyPond
\markup { p i m a x }
\markup { pimax }


Das Ergebnis zeigt, daß Deine Aussage
ZitatBei genauerem Hingucken habe ich gerade festgestellt, dass Lilypond Regeln aus der ersten Klasse Grundschule (Ich habe einfach zu viel mit diesen Kindern zu tun. Die schimpfen immer wegen meiner Schrift und versuchen mir anständiges Schreiben beizubringen. Sie sind sehr rabiat dabei.) nicht beachtet. Siehe http://www.familothek.de/liniertes-papier-grundschule-welche-linien-wofuer.html unter dem Punkt Erstklässler.
schlichtweg unzutreffend ist.

Alle anderen Vergleiche sind nicht möglich (Textverarbeitung kann keinen Notensatz).
Das aktuelle Problem ("p" als StrokeFinger.text zu hoch) verdient vielmehr eine genauere Reflection.

Tatsächlich war meine Aussage
Zitat
Ich bin nicht sicher, ob ich da zustimmen würde...
nicht darauf gezielt, daß ich Deine Beobachtung in Frage stelle, sondern vielmehr wollte ich zum Ausdruck bringen, daß ich noch unentschieden bin, was hier die beste Lösung ist.

Per default setzt LilyPond die StrokeFinger-Zeichen immer zentriert zur rechten des Notenkopfes. Zentriert in dem Sinne, daß die gesamte Länge des Schriftzeichens zu Grunde gelegt wird, ähnlich wie im vcenter-markup:
\markup \italic \vcenter { p i m a x }

Aber was ist die Alternative?
Der "Hausboden", also die baseline, ausrichten hin zum Notenkopf?

Im Bild zunächst der default (erst mit dann ohne Referenzpunkte), dann die Baseline auf Höhe des Notenkopfeszentrums.



Das erste ist Dir (in meinen Worten) zu "unordentlich", das zweite ist auch nicht akzeptabel.
Die Baseline der StrokeFinger könnte natürlich am unteren Rand des Notenkopfes ausgerichtet werden. Aber um das zuverlässig hinzukriegen muß man erst die maximale Ausdehnung aller möglichen Schriftzeichen der gewählten Schriftart kennen. Wie soll das gehen? Und selbst wenn man das wüßte, so läuft es trotzdem aus dem Ruder, sobald reine Grafik ins Spiel kommt...

Wie schon gesagt, ich bin hier unentschieden.
Einerseits stört mich der default wenig. Andererseits sehe ich keine Möglichkeit, wie man das Ganze zuverlässig ändern könnte.

-Harm

Hilflos-im-Code

Ist dir eigentlich schon mal aufgefallen, dass der rechte Fingersatz in käuflichen Ausgaben sehr spärlich ist und der linke großzügig verteilt wird? Trotz Gitarrenstudium 30 Jahren Leben danach, würde ich keine Aussage treffen wollen, wo rechter Fingersatz normalerweise steht, außerhalb der Zeile oder innerhalb.

Aber wenn der rechte Fingersatz außerhalb steht, dann fällt die ungleiche Verteilung von Lilypond ins Auge, weil dort der Fingersatz visuell eine Gruppe bilden kann, die auf einer imaginären Linie steht. Da ist mir das mit dem p auch aufgefallen. Weil das immer so nach oben springt.Das fällt sogar teilweise bei schiefen Balken auf.

Notiert man den Fingersatz in die Zeile, wird man dies nie tun, wie bei meinem Beispiel. Sondern der Fingersatz hängt an einem Notenkopf. Die Linien sollen den Buchstaben nicht anschneiden und schwer leserlich machen. Da gibt es zwei Fälle. Note ist zwischen zwei Linien oder auf der Linie.

1. Note auf der Linie

{g' \rightHandFinger 1  \rightHandFinger 2  \rightHandFinger 3  \rightHandFinger 4}

Wenn man p und i leicht anheben würde, wäre es lesbarer.

2. Note zwischen zwei Linien.

{a' \rightHandFinger 1  \rightHandFinger 2  \rightHandFinger 3  \rightHandFinger 4}

Passt.

Es gibt ja, wenn es jemanden stört jetzt eine dokumentierte Lösung und man kann sich helfen.