Dn-Programming-Core-Management / Dn-FamiTracker

modifications and improvements for 0CC-FamiTracker (based on j0CC-FamiTracker 0.6.3)
Other
372 stars 23 forks source link

VRC7 Patch Switching Accuracy #38

Closed TakuikaNinja closed 3 years ago

TakuikaNinja commented 3 years ago

There is an obscure trick you can do with the VRC7 expansion chip to generate extra "patches". Here is a song I made a while ago which demonstrates this: https://youtu.be/T2mho3IAwFE In FT this involves changing the patch in quick successtion (usually speed 1) like this: image (using && instruments provides the most consistent results in the exported NSF)

The problem is that the resulting sound is completely different between j0cc-FT, Dn-FT, and NSFPlay. I have attached a demo module so you can compare the sound in the software I've mentioned. VRC7Flex.zip

I'm hoping that the NSFPlay core can be integrated for the VRC7, much like the 2A03/FDS.

(An outlandish request if possible: It would be convenient if this behaiviour can be implemented into an instrument, with a UI similar to a duty cycle macro.)

Gumball2415 commented 3 years ago

FamiTracker and NSFPlay uses the same emulator core for VRC7, which is emu2413 (different versions though). However, the interfaces that deal with them differ in their behavior.

TakuikaNinja commented 3 years ago

I see. This is kind of related, but what is going on with vrc7tone.h (the patch dumps)? The one in Source/APU/old/ seems to be newer than Source/APU/ext/. Which one is actually used by Dn-FT?

Gumball2415 commented 3 years ago

The files inside APU/ext and APU/old contain obsoleted files that are there mainly for reference of where it came from. (Might need to delete it once it's not needed)

The patch dumps Dn currently uses are in APU/nsfplay/xgm/devices/sound/legacy, which nsfplay's emu2413 uses. Currently, there's an option to switch between hardware patches, but it defaults to the hardware dumps from Nuke.YTK

Gumball2415 commented 3 years ago

NSFPlay 2.4, j0CC & 0CC, and vanilla uses varying different versions of emu2413, which produces varying results, even with hardware accurate patches. In the latest NSFPlay commit (which uses emu2413 v1.5.2), and NovaSquirrel's Mesen fork (which uses nuked-opll v1.0.1), the exported NSF appears to sound the same as Dn's implementation (emu2413 v1.5.2).