Well, I investigated some more, and now I'm even more confused! I decided I should forget MIDI and see how simple table lookups behave. >From the manual, I see: "For arrays whose length is a power of 2, space allocation always provides for 2^n points plus an additional guard point. If size is an exact power of 2, the guard point will be a copy of the first point. If size is set to 2^n + 1, the guard point value automatically extends the contour of table values." So if, for example, I use this score statement: f1 0 16 7 0.2 16 1 I should get a table with index 0 containing 0.2 and index 15 = 1.0. According to the above, the guard point should contain 0.2 also. I expected that 'index 16' would access the guard point. If I used a size of 17, keeping everything else the same, the table contents would be as before, but the guard would now be 1.0. That's not what happens! Here's my test code (run in 6.04): -m0 -odac instr 1 printks "16 points table -- no guard:\n", 1 giRamp = 1 ka = 0 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb ka = 15 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb ka = 16 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb printks "16 points table -- with guard:\n", 1 giRamp = 2 ka = 0 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb ka = 15 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb ka = 16 kb table ka, giRamp printks "%d: %f\n", 1, ka, kb endin f1 0 16 7 0.2 16 1 f2 0 17 7 0.2 16 1 i1 0 0.1 The result is: 16 points table -- no guard: 0: 0.210526 15: 1.000000 16: 1.000000 16 points table -- with guard: 0: 0.200000 15: 0.950000 16: 0.950000 Not only am I not seeing the expected guard-point, but the normalization seems crazy! What am I missing? -- Pete -- Csound mailing list Csound@listserv.heanet.ie https://listserv.heanet.ie/cgi-bin/wa?A0=CSOUND Send bugs reports to https://github.com/csound/csound/issues Discussions of bugs and features can be posted here