Skip to content

NSFPlay fork by KYLXBN - v2.6b1

Latest
Compare
Choose a tag to compare
@AndrewBHolder AndrewBHolder released this 01 May 03:38
7eb3d04

Note from Andrew Holder

I found this on KYLXBN's GitLab and decided to fork it and compile it using GitHub Actions for everyone's enjoyment. Just extract the .zip file and run the .EXE!

NSFPlay fork by KYLXBN

Description

This NSFPlay fork was made to remove so called "chip limitations" that are present
on the original hardware which are also emulated by NSFPlay (which is required for accuracy).

These chip limitations are probably a result of cost-cutting when developing the sound chips.
While they definitely add to the charm and unique feel of old sound chips like what the
NES has (and are in my strong opinion, very important to preserve), they are in the end
limitations which I tried to remove (or improve) in this fork.

This is merely a fun experiment to see how such an "idealized" sound chip could sound like.
I do not endorse that the 2A03 or any sound chip emulated by NSFPlay "should sound like this."
This is never the right way to preserve or emulate retro sound chips. Nevertheless,
it is fun and interesting to hear the difference of what it could have sounded like if
the chips were manufactured more like the MOS 6581.

Modifications

Here are the modifications that were applied to NSFPlay. These are highly opinionated changes.

2A03

  • Mix audio with floating-point precision
  • Generate a smooth triangle wave (similar to the MOS 6581)
  • Average / antialias the value of the noise channel with floating-point values
  • Apply ISO 226:2003 loudness compensation to the triangle channel to make it easier to hear
  • Force linear mixing of all channels

VRC6

  • Mix audio with floating-point precision
  • Generate a smooth sawtooth wave (similar to the MOS 6581)

VRC7

  • Mix audio with floating-point precision (this is enough to eliminate the bit-crush effect that is audible as hissing noise)

N163

  • Mix audio with floating-point precision
  • Remove all aliasing artifacts

Known limitations

This is a hack-ish project, and I do not claim to have done things in the
best way. Here are some problems you might encounter along the way.

  • Triangle wave can sometimes be too loud since many songs expect a non-volume-compensated triangle wave.
  • Most (if not all) of the modifications cannot be disabled. Use the original NSFPlay if you want an accurate emulation.
  • Crashes, maybe?
  • Extremely high CPU usage because of unoptimized floating-point computations. Render to WAV if your PC can't handle real time playback.
  • You can't change the Quality slider, else the audio might sound plain wrong. The code needs it to be set to the default 10 value.