I fixed up the n2p routine, although not in the same output format as the book (“Cybernetic Music”) it seems to track the relative octave increases and decreases from the examples. I apologize for the not very J-ish style for the support routine ‘ROCT’ (new routine not part of the original APL).
NB. ROCT - relative octave processing. The goal is to move down NB. a list of note numbers and record upticks and down tics in NB. octave. NB. x is the starting relative octave (usually 0) NB. y is the array of notes ROCT =: 4 : 0 aoct =. <.y%TONSYS smoutput aoct loct =. x oct =. 1$loct for_i. aoct do. delta =. i - loct oct =. oct, i - loct if. delta ~: 0 do. loct =. i end. end. oct ) NB. N2P - in J using boxing to generate and display pitch names NB. this makes it much easier to manipulate than the APL NB. routines originally developed n2p =: 3 : 0 NB. Octave would be the relative octave away from main octave NB. The octave is found by dividing by the # of tones in an octave NB. ie. divide by TONSYS and then using floor <. to produce the NB. integer truncation. Then use format ": to turn it all into NB. Text octave =. ": each ;/ }. 0 ROCT y NB. The following will map a note to it's text pitch name pitch =. (TONSYS|y) { _3 <\NOTENAME (('0';' ')&stringreplace each octave),:pitch ) ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm