> #(define (semitones->pitch semitone) > (let ((index (modulo semitone 12)) > (octave (floor (/ semitone 12)))) > (list > octave > (list-ref > '((0 0) ; c > (0 1/2) ; cis > (1 0) ; d > (1 1/2) ; dis > (2 0) ; e > (3 0) ; f > (3 1/2) ; fis % \jiPitch 2 1 > > (4 0) ; g > (4 1/2) ; gis > (5 0) ; a > (5 1/2) ; ais > (6 0)) ; b > index)))) > > but would like to find a solution that is more straightforward. Sorry to answer so late. I made this function some times ago, but don't know if is enough straightforward :-)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \version "2.18.2" #(define (semitones->pitch n) (let loop ((a 0) (b 0) (c n)) (cond ((> c 11)(loop (1+ a) b (- n 12))) ((< c 0)(loop (1- a) b (+ n 12))) ((< c 5) (ly:make-pitch a (quotient c 2) (* 1/2 (modulo c 2)))) (else (ly:make-pitch a (quotient (1+ c) 2) (* 1/2 (modulo (1+ c) 2))))))) %%% test #(for-each (lambda(n)(format #t "~2,' d - ~a\n" n (semitones->pitch n))) '(-5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -- Gilles _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user