Skip to content

NSFPlay 3.0+ roadmap #7

@bbbradsmith

Description

@bbbradsmith

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

  • 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
  • better resampling options, libsoxr's readme has some good references, want to provide options for at least fast (iir?), default (fir?), and high/slow resampling
  • 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
  • "APU clock" square should be 8 part not 16, and the divider should never reset manually, see: https://forums.nesdev.com/viewtopic.php?p=185505#p185505 / https://forums.nesdev.com/viewtopic.php?p=186129#p186129
  • 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.
  • N163 oversampling
  • VRC7 emulation rewrite (don't forget YM2413)
    -- https://github.com/0xJonas/VRC7-Sound
    -- http://www.smspower.org/Development/YM2413
    -- https://github.com/chocolate-doom/chocolate-doom/tree/master/opl
  • Jaleco sample playback emulation, maybe also develop an audio estimation technique? Should be similar to NEC UPD7759:
    -- https://github.com/mamedev/mame/blob/master/src/devices/sound/upd7759.cpp
  • Export multi-WAV individual channels
  • Export all tracks
  • Export PLS Ability to Mass Generate PLS Files #86
  • EPSM Request: EPSM Support #66

Other stuff that was on 2.5's wishlist:

Visualizer thoughts:

  • Would be nice to have a low volume note threshold, like a transparent dot, on the keyboard view.

Metadata

Metadata

Assignees

Labels

roadmapOfficial future plans for NSFPlay

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions