How I Created the Perfect NES Sound Chip
KYLXBN (Kyle) KYLXBN (Kyle)
38.6K subscribers
1,977,423 views
0

 Published On May 6, 2022

My primary goal (or experiment) in this video was to
remove the limitations of the NES (and Famicom)
sound chips.

LINKS:
Akumajou Densetsu - Demon Seed
https://url.kylxbn.com/BDKKdp

I started with the triangle channel and was able to make
it output pure triangle waves. Then, I also modified the noise
channel so that it can output floating point samples.
However, the difference is extremely subtle, so I did not
demo it in this video. However, this is my subjective
opinion, but it now sounds closer to the noise output
of the Commodore 64's 6581 sound chip IN SOME INSTANCES.
I also tried to interpolate the DPCM channel linearly so that it
won't make huge steps up and down, but it proved to be
harder than I thought. Finally, I made some touches to the
mixing code so that all channels output floating point
data, all the mixing is performed using floating point
operations, and all the channels are mixed linearly. This
means that the triangle, noise, and DPCM channels
won't affect the volume of each other, which is often the
reason when the triangle, noise, or DPCM channels are
more quiet than the two square wave channels.

My second target was the VRC6. I spent three days trying
to interpolate the sawtooth channel linearly, encountering
a problem where a higher pitch results in a louder volume,
but it seems that I only had a problem with my interpolation
formula and I was able to fix it at day 3. Same with the
2A03, I made it so that all channels output floating point
values, and so that the mixer performs floating point
operations on them.

I also tried to improve the Namco N163 sound chip. Normally,
a sound chip would mix the output of each channel
via addition, and the result would be output
44 to 48 thousand times per second. However, this
sound chip does not have a mixer at all. Instead,
the value of each channel is output in sequence like a
round robin. The more channels the N163 is working on,
the longer it takes for each channel to get its turn to output
its data, and this introduces aliasing noise to the output.
Fixing this should make it sound better theoretically, but
I have not implemented it yet so we will have to see in the
future.

Finally, I had my eyes on the VRC7. The VRC7 is an OPLL
variant, and the OPLL does some operations using fixed point
values that would probably fare better using floating point
operations (like computing sine wave samples). However, this
proved to be daunting to implement, and it turns out that
just improving the digital-to-analog converter so that all
mixing operations are done using floating point operations
was enough to make the chip sound extraordinarily good.

Doing all these fixes were tiring and it took me a lot of time.
But the result was very much worth it. Listening to some
famous NES soundtracks like Megaman, Castlevania 3,
Journey to Silius, Ninja Gaiden, and Gradius II, I can
definitely say that there IS an improvement.

Feel free to request any song in the comments section
that you might want to hear using an improved
NES sound chip!

show more

Share/Embed