Autor Thema: Notennamen vor TABs  (Gelesen 5143 mal)

bblochl

  • Member
Notennamen vor TABs
« am: Donnerstag, 8. August 2013, 17:40 »
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

  • Member
Re: Notennamen vor TABs
« Antwort #1 am: Donnerstag, 8. August 2013, 18:49 »
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.
« Letzte Änderung: Donnerstag, 8. August 2013, 20:30 von fugenkomponist »

trulli

  • Member
Re: Notennamen vor TABs
« Antwort #2 am: Freitag, 9. August 2013, 15:56 »
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://liarchiv.joonet.de/index.php?topic=577.msg3214#msg3214

Gruß

bblochl

  • Member
Re: Notennamen vor TABs
« Antwort #3 am: Samstag, 10. August 2013, 11:13 »
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://liarchiv.joonet.de/index.php?topic=577.msg3214#msg3214 werde ich mir jetzt vornehmen.

Dank und Grüße


« Letzte Änderung: Samstag, 10. August 2013, 11:31 von bblochl »

trulli

  • Member
Re: Notennamen vor TABs
« Antwort #4 am: Samstag, 10. August 2013, 12:47 »
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ß
« Letzte Änderung: Samstag, 10. August 2013, 12:49 von trulli »

bblochl

  • Member
Re: Notennamen vor TABs
« Antwort #5 am: Samstag, 10. August 2013, 14:29 »
Nee, war an der falschen Stelle! (Bin ja lilypond-Anfänger!) Läuft jetzt!

Danke für die Korrektur!

Grüße
« Letzte Änderung: Samstag, 10. August 2013, 14:42 von bblochl »

trulli

  • Member
Re: Notennamen vor TABs
« Antwort #6 am: Samstag, 10. August 2013, 22:44 »
@Lomtas

Bitte bei Gelegenheit mal diesen Thread in die Gitarrenecke verschieben.

Danke!

bblochl

  • Member
Re: Notennamen vor TABs
« Antwort #7 am: Sonntag, 11. August 2013, 16:18 »
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

  • Member
Re: Notennamen vor TABs
« Antwort #8 am: Montag, 12. August 2013, 08:31 »
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

  • Member
Re: Notennamen vor TABs
« Antwort #9 am: Montag, 9. September 2013, 03:17 »
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