I discovered when I made the editor that 93-step noise is fairly consistently about 40 cents sharp of A440 tuning. You can change the tuning by editing mktables.py and rebuilding the project. But if you tune the tonal channels to be in tune with the noise channels, it'll retune your music too.
Changing the channel doesn't "convert"; it reinterprets the old data in the new format. And the only part of the format that makes sense among all channels is the volume, though pulse and triangle use the same pitch range except for one octave of difference.
Code:
FEDC BA98 7654 3210 Each row is a 16-bit word in network byte order.
|| |||| | || ||||
|| |||| | || ++++- Noise: Period (15=lowest)
|| |||| | ++-++++- Pulse, Triangle: Log frequency (0=lowest)
|| |||| +--------- Noise: Timbre (0=hiss, 1=buzz)
|| ++++----------- Pulse, Noise: Volume (0=silent, 15=loudest)
|| ++++----------- Triangle: Priority (0=silent, 1=lowest, 15=highest)
++------------------ Pulse: Timbre (0=12.5% duty, 1=25% duty, 2=50% duty)
+------------------- Triangle: Bit 15 always set in exported data
It appears you want channel changes to perform some conversion. What should happen to the pitch if the user converts a tonal sound to noise and back?
I'll do a keyboard once I have a keyboard to test with. There's been speculative talk in #nesdev to make some sort of MCU-based translator between PS/2 keyboard protocol and the NES's SPI-like protocol, but it never resulted in any concrete projects. And unfortunately, MCUs are currently not my department. Or do I need to get an Arduino kit already so I can play with AVR?