;;;; along with LilyPond. If not, see <http://www.gnu.org/licenses/>.
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+;; clefs
+
+(define-public (clef-octavation-markup oct style)
+ "The octavation sign formatting function. @var{oct} is supposed to be
+a string holding the octavation number, @var{style} determines the
+way the octavation number is displayed."
+ (let* ((delim (if (symbol? style)
+ (case style
+ ((parenthesized) (cons "(" ")"))
+ ((bracketed) (cons "[" "]"))
+ (else (cons "" "")))
+ (cons "" "")))
+ (text (string-concatenate (list (car delim) oct (cdr delim)))))
+
+ (make-vcenter-markup text)))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; metronome marks
(length (filter (lambda (x) (not (null? x)))
art-list)))
+ (define (string-number event)
+ "Get the string-number from @var{event}. Return @var{#f}
+if no string-number is present."
+ (let ((num (ly:event-property event 'string-number)))
+ (and (integer? num) (positive? num) num)))
+
(define (determine-frets-and-strings
notes
defined-strings
(define (calc-fret pitch string tuning)
"Calculate the fret to play @var{pitch} on @var{string} with
@var{tuning}."
- (- (ly:pitch-semitones pitch) (ly:pitch-semitones (list-ref tuning (1- string)))))
+ (* 2 (- (ly:pitch-tones pitch) (ly:pitch-tones (list-ref tuning (1- string))))))
(define (note-pitch note)
"Get the pitch (in semitones) from @var{note}."
articulations)
finger-found))
- (define (string-number event)
- "Get the string-number from @var{event}. Return @var{#f}
-if no string-number is present."
- (let ((num (ly:event-property event 'string-number)))
- (if (number? num)
- num
- #f)))
-
(define (delete-free-string string)
(if (number? string)
(set! free-strings
(and (or (and (not restrain-open-strings)
(eq? fret 0))
(>= fret minimum-fret))
+ (integer? fret)
(close-enough fret))))
(define (open-string string pitch)
tuning)))
(if (< this-fret 0)
(ly:warning (_ "Negative fret for pitch ~a on string ~a")
- (car pitch-entry) string))
+ (car pitch-entry) string)
+ (if (not (integer? this-fret))
+ (ly:warning (_ "Missing fret for pitch ~a on string ~a")
+ (car pitch-entry) string)))
(delete-free-string string)
(set! specified-frets (cons this-fret specified-frets))
(list-set! string-fret-fingers
defined-strings defined-fingers))
;;; body of determine-frets-and-strings
- (let* ((pitch-alist (apply (lambda (mylist)
- (let ((index -1))
- (map (lambda (note)
- (begin
- (set! index (1+ index))
- (cons (note-pitch note)
- index)))
- mylist)))
- notes '()))
- (pitches (map note-pitch notes)))
+ (let* ((pitches (map note-pitch notes))
+ (pitch-alist (map cons pitches (iota (length pitches)))))
;; handle notes with strings assigned and fingering of 0
(for-each
(ly:context-property context
'handleNegativeFrets
'recalculate)))
- (cond ((or (>= this-fret 0)
+ (cond ((or (and (>= this-fret 0) (integer? this-fret))
(eq? handle-negative 'include))
(set-fret! pitch-entry string finger))
((eq? handle-negative 'recalculate)
(defined-strings (map (lambda (x)
(if (null? x)
x
- (ly:event-property x 'string-number)))
+ (or (string-number x) '())))
(car specified-info)))
(defined-fingers (map (lambda (x)
(if (null? x)