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

Alphabet in historischen Tabulaturen - ohne "j"

Begonnen von Friederich, Freitag, 18. September 2015, 23:51

Vorheriges Thema - Nächstes Thema

Friederich

Hallo,

manche historische Tabulaturen im Buchstabenformat verwenden aus Gründen der Übersichtlichkeit kein "j". Wie kann man letter-tablature-format umdefinieren, sodass es j auslässt? Ich habe diese Definition gefunden und verstehe, was sie macht, weiß aber nicht, wie ich sie ändern müsste...


#(define (letter-tablature-format str context event)
  (let*
      ((tuning (ly:context-property context 'stringTunings))
       (pitch (ly:event-property event 'pitch)))
    (make-whiteout-markup
     (make-vcenter-markup
      (string (integer->char
         (+ (char->integer #\a)
            (- (ly:pitch-semitones pitch)
            (list-ref tuning (- str 1))))))))))


Alternativ könnte ich natürlich "falsche" Töne eingeben, die dem korrekten Buchstaben entsprechen; eine sauberere Lösung wäre mir aber lieber  ;)

Vielen Dank und liebe Grüße,
Friederich

harm6

Schnell zusammenkopiert und angepasst, aber vielleicht reichts ja schon:


\version "2.19.26"

#(define number->mark-letter-vector (make-vector 25 #\a))

#(do ((i 0 (1+ i))
     (j 0 (1+ j)))
    ((>= i 26))
  (if (= i (- (char->integer #\j) (char->integer #\a)))
      (set! i (1+ i)))
  (vector-set! number->mark-letter-vector j
               (integer->char (+ i (char->integer #\a)))))

#(define number->mark-alphabet-vector
  (list->vector
    (map (lambda (i) (integer->char (+ i (char->integer #\a)))) (iota 26))))

#(define (number->markletter-string vec n)
  "Double letters for big marks."
  (let* ((lst (vector-length vec)))
    (if (>= n lst)
        (string-append (number->markletter-string vec (1- (quotient n lst)))
                       (number->markletter-string vec (remainder n lst)))
        (make-string 1 (vector-ref vec n)))))
       
       
#(define-public (my-fret-letter-tablature-format
                context string-number fret-number)
  (let ((labels (ly:context-property context 'fretLabels)))
    (make-vcenter-markup
     (cond
      ((= 0 (length labels))
       (number->markletter-string number->mark-letter-vector fret-number))
      ((and (<= 0 fret-number) (< fret-number (length labels)))
       (list-ref labels fret-number))
      (else
       (ly:warning (_ "No label for fret ~a (on string ~a);
only ~a fret labels provided")
                   fret-number string-number (length labels))
       ".")))))
       
       
\layout {
  \context {
    \Score
    tablatureFormat = #my-fret-letter-tablature-format
  }
}


\new TabVoice
  \relative {
    e' f fis g gis a ais b c cis d dis e f fis g gis a ais b
  }


HTH,
  Harm

Friederich