Okay, I think we've worked out a process for fixing old ppMCK N163 NSFs. You'll need a hex editor. Search the NSF for the following string:
09 80 9D ?? 06 8D 00 48
There should only be one string that fits this form, and it's probably at an offset in the range $1000-$1300 somewhere. If there's more than one, something else may be going on. Anyhow, replace the 80 in that string with E0:
09 E0 9D ?? 06 8D 00 48
Save it, and you should be good.
If you can't find this string in the bad NSF file, then let me know, maybe I can look at it. (It turned out a little easier than I thought to figure out where the offending code was.)
For people that know 6502 ASM, here's what the string means:
09 80 = ORA $80
9D ?? 06 = STA $06??, X (RAM variable)
8D 00 48 = STA $4800 (N163 register)
Changing $80 to $E0 sets all three of the top bits, which unless they are all set will contribute to the length of the sample (making it too long). Old ppMCK versions assumed a maximum sample length of 32, and thought that the high bit was simply an enable bit (it is not, it subtracts 128 from the maximum sample length of 256, the other two bits we are setting subtract 64 and 32).
You can adjust the clock speed in the .ini file if you like. NES_BASECYCLES should control the pitch of all chips, as well as CPU speed. Tempo will be unaffected.
How flat are you finding it? I've made several hardware to render comparisons and haven't seen this problem. (There was previously a bug that made PCM playback -sharp-, but that is fixed now.) Do you have an example NSF?
What numbers can I set it to?
Also, it's not just this program, it's all my programs on my computer. I use to be able to open VirtuaNES and it would raise the pitch back to normal, but that doesn't work anymore since I had to get a new hard drive.