• 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ü

Notennamen vor TABs

Begonnen von bblochl, Donnerstag, 8. August 2013, 17:40

Vorheriges Thema - Nächstes Thema

bblochl

Es gibt für ein Saiteninstrument verschiedene Stimmungen. Viele stellt lilypond zur Verfügung, andere kann man selbst erstellen.

Ich hätte gerne vor den Tabs die Notennamen für jede Saite stehen. Also für Gitarre wäre das z. B. von oben nach unten
EBGDAE. Also 1. Saite (oben im TAB) E, 2. Saite , zweite Saite im TAB B ... usw. Den Schriftzug TAB finde ich eigentlich  entbehrlich.

Suche in lilypond ergab nichts, aber vielleicht steht das ja irgendwo oder jemand hat das schon gemacht?

Grüße

fugenkomponist

#1
Dafür musst du den Stencil, der den Schlüssel setzt, ändern (in http://lsr.dsi.unimi.it/LSR/Item?id=550 wird er z. B. auf ##f gesetzt, also der ,,Schlüssel" ganz entfernt). Weiteres Stichwort: text-interface, um den Schlüssel durch ein markup zu ersetzen (siehe http://lsr.dsi.unimi.it/LSR/Item?id=378, da werden Notenköpfe durch markups ersetzt)

Falls ich nachher Zeit hab, kann ich noch ausführlicher werden.

Edit: Erster Zwischenschritt (hartkodierte Notennamen):\version "2.16.0"

\new TabStaff {
  \override Staff.Clef #'stencil = #ly:text-interface::print
  \override Staff.Clef #'text =
  \markup \whiteout \raise #3.3 \teeny \override #'(baseline-skip . 1.5) \center-column {
    e h g d A E
  }
  \relative c' {
    c d e f g
  }
}


Edit: Wenn man die Bezeichnung vor das System haben will, kann man natürlich auch den Clef #'stencil auf ##f setzen und instrumentName umbauen (in http://lsr.dsi.unimi.it/LSR/Item?id=658 mit Postscript gemacht, aber da geht so ein markup natürlich genauso).

Edit: ich hab grad keine Ahnung, wie man die Stimmung rauskriegt; hab noch nie was für Zupfinstrumente gesetzt. Aber da findest du ja vielleicht im Gitarren-Unterforum was.

trulli

Hallo,

die Saitennamen kannst du z.B. so einfügen:


\set Staff.instrumentName = \markup 
                                    \override #'(baseline-skip . 1)
                                    \override #'(font-name . "FreeSans")
                                    \abs-fontsize #6
                                    { \null \hspace #8 { \column { [e'] [b] [e] [d] [A] [E] } } }


Je nach Geschmack kannst du die Klammern weglassen, Kreise (\draw-circle #0.6 #0.1) oder Kästchen (\box \pad-to-box #'(0 . 1) #'(0 . 1)) um die Buchstaben ziehen.

Und dann ist da natürlich der Thread in der Gitarrenecke:
https://archiv.lilypondforum.de/index.php?topic=577.msg3214#msg3214

Gruß

bblochl

#3
Vielen Dank für die Hilfe!
Der Code von fugenkomponist funktioniert. Etwas unschön finde ich den Taktstrich ganz am Anfang, schöner wäre es, die Notennamen vor die Saitenzeile zu schreiben, nicht in/über die Zeilen.  Musswohl noch etwas daran arbeiten.
Der Code von trulli gibt einen schweren Fehler:

Analysieren...
tab2.ly:3:1: Fehler: syntax error, unexpected \set


habe auch new probiert:

tab2.ly:3:11: Fehler: syntax error, unexpected '.'
\new Staff.instrumentName = \markup 


Zeile 3 deshalb, weil ich \version "2.17.23-1" und eine Leerzeile voran gesetzt habe.

Im Handbuch habe ich in einem langen Beispielcode gefunden
http://lilypond.org/doc/v2.16/Documentation/learning/other-templates.de.html

trumpet = {
  \global
  \set Staff.instrumentName = #"Trumpet"
  \clef treble
  <<
    \trpt
  >>
}

Dadurch wird aber eldiglich "Trumpet" vor die Notenzeile gesetzt.

den Link
https://archiv.lilypondforum.de/index.php?topic=577.msg3214#msg3214 werde ich mir jetzt vornehmen.

Dank und Grüße



trulli

#4
Hallo,

hast du den Code denn an die richtige Stelle gesetzt?

\version "2.16.0"

\new TabStaff {
  \override Staff.Clef #'stencil = #ly:text-interface::print

  \relative c' {
    \set Staff.instrumentName = \markup 
                                    \override #'(baseline-skip . 1)
                                    \override #'(font-name . "FreeSans")
                                    \abs-fontsize #5.5
                                    { \null \hspace #6 { \column { [e'] [b] [g] [d] [A] [E] } } }
 
    c d e f g
  }
}


Gruß

bblochl

#5
Nee, war an der falschen Stelle! (Bin ja lilypond-Anfänger!) Läuft jetzt!

Danke für die Korrektur!

Grüße

trulli

@Lomtas

Bitte bei Gelegenheit mal diesen Thread in die Gitarrenecke verschieben.

Danke!

bblochl

Ja, das passt sehr gut zur Gitarre. Ich habe meine erste Anfrage nach Gitarre kopiert und zu dem Start des Threads hier eine Link angegeben. 

Wenn die Anderen nacheinander in passender Reihenfolge kopieren, ist er unter Gitarre  auch zu lesen. Der Nächste wäre fugenkomponist ... usw. (Vollständige Threads kann wohl nur ein Administrator verschieben/kopieren? Soll aber vermutlich nur kopiert werden und in "Fragen zu Funktionen" bleiben? )

Habe das schon mal mit einem Thread praktiziert, der vollkommen nach Linux abgedriftet ist (dann allerdings zusammen mit den Anderen nach Absprache an der anderen Stelle gelöscht)

Grüße

trulli

Hallo bblochl,

ich glaube, es ist nicht nötig alle Antworten in der Gitarrenecke noch einmal aufzulisten.

Übersichtlicher ist es, wenn du selbst die Lösung(en) gleich im Themenstart vorstellst. Letztendlich ist es ja egal von wem die Lösung kam - Hauptsache es funktioniert.  :)

Grüße von Trulli

harm6

Und hier noch mein weitgehend automatisierter Vorschlag:

\version "2.17.25"

#(define (make-note-name-markup pitch)
  ;; Return pitch-name-markup for @var{pitch}.
  ;; Limitation: - works for default-language (dutch) only.
  ;;             - half-step-alterations are supported, but no quarter-steps or
  ;;               double-half-steps.
  ;;
  ;; @lilypond[verbatim,quote]
  ;; \markup { #(make-note-name-markup #{ c #}) }
  ;; @end lilypond
  (let ((row-note-name-strg
          (vector-ref #("C" "D" "E" "F" "G" "A" "B")
                      (ly:pitch-notename pitch))))
  (make-line-markup
    (list
      (make-simple-markup
        (string-append
          (if (>= (ly:pitch-octave pitch) -1)
              (string-downcase row-note-name-strg)
              row-note-name-strg)
          (case (ly:pitch-alteration pitch)
             ((0) "")
             ((1/2) "is")
             ((-1/2) "es"))
          (case (ly:pitch-octave pitch)
             ((-4) ",,")
             ((-3) ",")
             ((-2) " ")
             ((-1) " ")
             ((0) "'")
             ((1) "''")
             ((2) "'''")
             ((3) "''''"))))))))

#(define-markup-command
  (print-vertical-pitches layout props ls staff-space)
    (list? number?)
  "Draw columned strings taken via @code{make-note-name-markup} from @var{ls},
   which is supposed to be a list of pitches."

  (let* ((scale-factor (magstep (/ 1.5 staff-space)))
         (font-size (* -4.5 scale-factor))
         (text
            (make-column-markup
              (map
                (lambda (pitch)
                  (make-note-name-markup pitch))
                ls))))

    (interpret-markup layout props
                 (markup #:vcenter
                         #:bold
                         #:fontsize font-size
                         #:override (cons 'baseline-skip staff-space)
                         #:left-align text))))

#(define ((instrument-name::print-strings-note-names pitch-lst) grob)
   ;; Adds columned note-names to @code{instrumentName} only in the starting
   ;; Staff-line.
   ;; These note-names are taken via @code{print-vertical-pitches} from
   ;; @var{pitch-lst}
   (let* ((staff-symbol (ly:grob-object grob 'staff-symbol))
          (staff-space (ly:staff-symbol-staff-space grob))
          (string-indications-stencil
            (grob-interpret-markup grob
               (make-print-vertical-pitches-markup
                  pitch-lst staff-space)))
          (orig (ly:grob-original grob))
          (siblings (if (ly:grob? orig)
                        (ly:spanner-broken-into orig)
                        '() )))

      (if (and (>= (length siblings) 1) (eq? grob (car siblings)))
          (let ((stil (or (system-start-text::print (car siblings))
                          point-stencil)))
            (ly:stencil-combine-at-edge
              string-indications-stencil
              X
              LEFT
              (ly:stencil-aligned-to stil Y CENTER)
              staff-space))
          (system-start-text::print grob))))

#(define*
  (string-tuning-with-indication #:optional (string-tuning 'guitar-tuning))
    ;; Prints the names of the strings before the first line of a tabulature, by
    ;; adding them to @code{instrumentName}.
    ;; If @code{instrumentName} isn't set separately in @code{\\with} of the
    ;; relevant @code{TabStaff}, an empty string is used instead.
    ;; @code{shortInstrumentName} will not be modified.
    ;; The optional @var{string-tuning} may be specified, otherwise
    ;; @code{guitar-tuning} will be used.
    (let* ((tuning-pitch-list (assoc-get string-tuning defaultStringTunings)))
    #{
      \with {
        \override InstrumentName #'stencil =
          #(instrument-name::print-strings-note-names tuning-pitch-list)
        \override InstrumentName #'self-alignment-X = #RIGHT
        stringTunings = #tuning-pitch-list
        instrumentName = ""
      }
    #}))
 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% EXAMPLES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#(set-global-staff-size 19.7)

% These settings in \paper are not needed.
% Only written to get an overall nice pdf :)

\paper {
indent = 0
line-width = 50
markup-system-spacing #'padding = #2
        markup-markup-spacing #'padding = #2
system-system-spacing=
           #'((basic-distance . 5)
              (minimum-distance . 5)
              (padding . 1)
              (stretchability . 12))
score-markup-spacing =
           #'((basic-distance . 5)
              (minimum-distance . 5)
              (padding . 4)
              (stretchability . 12))
        page-count = 1
}

\header {
title = \markup \center-column {
"Indicating"
"string-names with"
#(lilypond-version)
}
}

%%%%%%%%%%%%%%%%%%%
% EXAMPLE 1
%%%%%%%%%%%%%%%%%%%

\markup \fontsize #-1 \bold
  \fill-line {
      \center-column {
        "Default-guitar-tab,"
        "no \"\\instrumentName\" is set"
      }
  }

\new TabStaff
  \with { #(string-tuning-with-indication) }
  { c1 \break d }
 
%%%%%%%%%%%%%%%%%%%
% EXAMPLE 2
%%%%%%%%%%%%%%%%%%%
 
\markup \fontsize #-1 \bold
  \fill-line {
      \center-column {
        "Default-guitar-tab,"
        "\"\\instrumentName\" is set"
        "Smaller staff-size"
      }
  }
 
\new TabStaff
  \with {
    #(string-tuning-with-indication)
    instrumentName = \markup
                       \override #'(baseline-skip . 1)
                       \center-column { "classical" "guitar" }
    fontSize = #-3
    \override StaffSymbol #'staff-space = #(magstep -3)
    \override StaffSymbol #'thickness = #(magstep -3)
  }
  { c1 \break d }
 
%%%%%%%%%%%%%%%%%%%
% EXAMPLE 3
%%%%%%%%%%%%%%%%%%%
 
\markup \fontsize #-1 \bold
  \fill-line {
      \center-column {
        "bass-tab,"
        "\"\\instrumentName\" and"
        "\"\\shortInstrumentName\" is set"
      }
  }

\new TabStaff
  \with {
    #(string-tuning-with-indication 'bass-four-string-tuning)
    instrumentName = "bass"
    shortInstrumentName = \markup \line { "b" \hspace #3 }
  }
  { c1 \break d }
 
%%%%%%%%%%%%%%%%%%%
% EXAMPLE 4
%%%%%%%%%%%%%%%%%%%
 
\markup \fontsize #-1 \bold
  \fill-line {
      \center-column {
        "five-string-bass-tab,"
        "\"\\instrumentName\" is set"
      }
  }
 
\new TabStaff
  \with {
    #(string-tuning-with-indication 'bass-five-string-tuning)
    instrumentName = \markup
                          \override #'(baseline-skip . 2)
                          \center-column { "five" "string" "bass"}
  }
  \relative c { c1 \break d }
 
%%%%%%%%%%%%%%%%%%%
% EXAMPLE 5
%%%%%%%%%%%%%%%%%%%
 
\markup \fontsize #-1 \bold
  \fill-line {
      \center-column {
        "seven-string-guitar-tab,"
        "\"\\instrumentName\" is set"
        "Larger staff-size"
        \override #'(font-name . "Purisa") "Changed font-name"
      }
  }
 
\new TabStaff
  \with {
    \override InstrumentName #'font-name = #"Purisa"
    #(string-tuning-with-indication 'guitar-seven-string-tuning)
    instrumentName = \markup
                         \override #'(font-name . 'default)
                         \center-column { "seven" "string" "guitar"}
    fontSize = #3
    \override StaffSymbol #'staff-space = #(magstep 6)
    \override StaffSymbol #'thickness = #(magstep 3)
  }
  { c1 \break d }


file und png auch im Anhang.


Gruß,
  Harm