NSFPlay 2.6 will likely be the last version 2 release. NSFPlay 3.0 will be a huge rewrite to address many architectural problems due to the program's age. Cross platform support and performance improvement is the biggest goal here, but also trying to make future maintenance easier.
rewrite all audio generation to potentially use floating point? (#definable)
Infinite playtime option
Seeking easier, seek when paused/stopped?
Sound device selection.
Bus/stack plugins: NSF validator, other export tools, trace logger?
Improve loop detection
APU debug pin emulation
wider resample window? (i.e. multi-lobe sinc?)
Mac/Linux versions?
Foobar2000 plugin
KB plugin
Visualizer plugin system. Full register view capability.
De-MFC GUI, change to a .lib, and build directly into plugin.
Remove plugin stubs from xgm, these belong in the plugin project itself.
Breakout window for info (nice for looking at NSFe text chunk).
NSFe metadata editor (maybe other people would start making NSFes???)
One click button for keyboard view?
Vertical stacking for multiple key dots on same pitch?
Other: Behaviour with 2 NSFs in a playlist is counterintuitive.
Always On Top > wxSTAY_ON_TOP on wxFrame?
ROM usage (CDL?) visualization for NSF rippers, other debugging tools?
Mirroring of chip registers
-- create a "yoked" wrapper for multichip that responds to only lowest address?
VRC6 exhibits "vibrato click" at A-3, see: https://cdn.discordapp.com/attachments/239104268794200064/317404503986929664/test.nsf
-- clicking does happen on hardware but seems to be exacerbated by NSFPlay, maybe this is a sampling granularity thing?
-- this might be count-down vs count-up behaviour (i.e. reload "counter" to freq2 only when counter counts down to 0, also eliminates weird arbitrary need to clamp counter on 9001/2 writes)
--- we could test this: play low frequency, do a $4011 pop to mark time, write a low frequency, see how long it takes (trigger at several phases, use enable bit to reset)
--- test 2A03 and VRC6 and MMC5 and 5B this way! (can I make a multichip NSF for convenience?)
--- 2A03 already went to countdown logic in 2020: eeff32d
option to not disable bankswitch registers with bank 0 0 0 0 0 0 0 0
5B does not support ImATrackMan's PWM envelope volume control (i.e. high freq square + env = half volume env)
MMC5 squares, are they nonlinear, does PCM affect them?
Battletoads track 10, noise sounds much duller on hardware.
Better anti-click fadeoff?
Play Metroid FDS 33 on hardware, make sure that wrapping is correct.
See thread: https://twitter.com/ImATrackMan/status/940851266191855616
-- Summary: Phase reset clicks are suffering from lack of timing precision, should be fixed when moving to a timing method that has cycle synchronization of writes and emulator.
-- Summary: 5B exhibits phase reset from $0FF to $100 but not $100 to $0FF transition? (Think this is expected behaviour if low byte is written first in both cases. Should be fixed by better timing precision.)
-- counter[ch] > freq2[ch] etc. clamps for VRC6 frequency writes are probably wrong (should do immediate modulo, maybe? this is a wrong implementation clearly, but borne out of the many clocks per update problem)
--- See VRC6 countdown note above.
Waveform visualizer
Expand info window to show all available fields (+text?) rather than one string for the whole thing
Play speed override option (keyboard adjustment should have more than just 1-8 integers), maybe allow CPU speed adjustment too?
NSFLive memory access viewer: visual map of memory usage (like FCEUX code data log)
DPCM ripper
Sesame Street Countdown does not play. Bad rip?
validation: VRC7 speed limit? (hard)
validation: illegal opcodes
validation: IRQ usage
validation: writes to register mirrors
linearity tests for APU especially and expansion audio as well, should be able to automate by playing a consistent frequency at different volumes, do RMS average over stable areas of the recording, etc.
Winamp plugin: hover over taskbar, play controls work but track select does not work properly.
5B emulation rewrite
-- Tone/Envelope/Noise 0 = 1 (envelope is incorrect)
-- Phase should increment and >= period. (Current implementation is weird.)
-- MAME: https://github.com/mamedev/mame/blob/master/src/devices/sound/ay8910.cpp
-- Amplifier model
--- https://forums.nesdev.com/viewtopic.php?f=2&t=17745
--- Hard knee amplification: https://github.com/bbbradsmith/nsfplay/compare/5b_amplifier
---- hard knee model works, need to highpass inputs (including 2A03)
---- is there something more efficient than pow per sample?
---- UI to make it optional, should amplifier-off version be tweaked too? (undo the flattening of high volumes in output table?)
---- multichip should use the amplifier for 5B only and not 2A03 or other chips
-- 50% PVM of envelope by high frequency tone should work #43
Loopy's new wave of FDS RE:
-- https://forums.nesdev.com/viewtopic.php?p=232662#p232662
-- Sweep test its lowpass filter
-- Waveform DAC nonlinearity model? (Maybe just a slider from 0 perfect to 1 = big discontinuity... a harmonic recursion that remaps the ranges to 0-255 with overlap?)
-- FDS verify all halts / non-halts
N163 what happens when you cut down a very long period with a short one (does it take multiple ticks to drop down phase? can probably read it back to test?)
2A03 verify all halts / non-halts (should be well documented by now, MMC5 should be same)
N163 verify all halts / non-halts
VRC6 verify all halts / non-halts
5B / VRC7 halts should be known now
Conflict between $E000 silence of N163/VRC7 with 5B multichip? (Block these in multichip. Only N163 actually implements it currently.)
VRC7 test register, VRC7 $E000 register.
APU square period should be 8 not 16 long and instead internal period register should be doubled to simulate 1/2 clock divider.
Triangle "silence on 0" seems to reveal inconsistent halting behaviour, may also affect init option? (Does triangle init explicitly init to phase 0 correctly?)
Test CPU again.
OPLL + VRC7 as TNS cart See: #54
Debug export at native CPU frequency instead of audio samplerate.
Scroll wheel to control master volume?
Visualizer thoughts:
Would be nice to have a low volume note threshold, like a transparent dot, on the keyboard view.
NSFPlay 2.6 will likely be the last version 2 release. NSFPlay 3.0 will be a huge rewrite to address many architectural problems due to the program's age. Cross platform support and performance improvement is the biggest goal here, but also trying to make future maintenance easier.
Work will be done in the nsfplay3 branch: nsplay3
Other stuff that was on 2.5's wishlist:
Visualizer thoughts: