first...its great that your implementing your own code! for transposing in cm3 you could just use the 'plus' function -- its overloaded to handle common list procssing like this. so you just pass it the scale as the first arg and the distance you want to transpose it as the second:
(plus '(60 62 64} 7) => (67 69 71) so the only bit of code you need (i guess...) is a function that converts two keysigs to the semitone interval distance between them. if you encode signatures using signed ints where 0=C -7= seven flats and 7=seven sharps something like this might work i think (define (sigdiff sig1 sig2) (modulo (* 7 (- sig2 sig1)) 12)) (sigdiff -3 3) ; ef to a => 6 (sigdiff -3 2) ; ef to d => 11 (sigdiff 0 1) ; c to g => 7 (sigdiff 0 -1) ; c to f => 5 On Mar 18, 2009, at 1:36 PM, Lieven Moors wrote: > I see, I had a look at it already, but didn't realize that I could > pass > a list of steps. > (should have read the manual better...). But still that doesn't solve > the problem > of transposing the mode. I wanted to be able to say: transpose this > mode > up or > down with n flats or sharps, and always do the right thing... Do you > think there > is a simple way to do this? > > greets > _______________________________________________ Cmdist mailing list [email protected] http://ccrma-mail.stanford.edu/mailman/listinfo/cmdist
