Deutsches Lilypond Forum (Archiv)
Allgemein => Fragen zu Funktionen => Thema gestartet von: Friederich am Freitag, 18. September 2015, 23:51
-
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
-
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
-
Vielen Dank, funktioniert :D