Here are some ideas that came to my mind.
-
Make as shared library.
- AYMO_API for __stdcall. → DROPPED: no need for __stdcall!
- AYMO_PUBLIC for declspec / attribute. → DONE!
-
Add score replayer.
- IMF score format. → DONE!
- DRO score format. → DONE!
- RAW score format. → DONE!
- VGM score format. → DONE!
- Benchmark mode, to be integrated with Meson. → DONE!
-
Add YMF262.
- All CPU architectures.
- x86 SSE4.1 → DONE!
- x86 AVX (VEX encoded SSE4.1)
- x86 AVX2 → DONE!
- ARM NEON → DONE!
- 4-slot operators. → DONE!
- rhythm mode. → DONE!
- All CPU architectures.
-
Add most of the possible YMF262 static operator configurations for unit tests. → DEFERRED: sticking to AdPlug reference scores
- Single-note scores.
- 4-slot operators.
- Rhythm mode.
- Leaving complex and dynamic parameters to actual music scores.
-
Make YMF262 queue delay dynamically configurable.
- Shrinking requires phase counter clamping.
-
Take queuing away from YMF262 instances.
- Make as CPU-independent utility class.
- Make default length 1024.
- Make length and pointers configurable.
- Queue status accessors.
-
Allow YMF262 output multiple formats.
- int16 / float. → DONE!
- 2 / 4 channels. → DONE!
- planar / interleaved buffers. → DROPPED: planar converted externally.
-
Add simple linear resampler. → DEFERRED: use existing resampler libraries
- Stereo.
- int16 / float.
- Fixed 2x/4x/8x up-samplers, with dedicated FIR windows.
- Piece-wise down-sampling to custom rates.
-
Add YM7128B.
- All CPU architectures.
- x86 SSE2
- x86 SSE4.1 → DONE!
- x86 AVX
- x86 AVX2
- ARM NEON → DONE!
- Stick to the closest fixed point models. → DONE!
- C++ wrappers.
- All CPU architectures.
-
Add TDA8425.
- All CPU architectures.
- x86 SSE
- x86 SSE4.1 → DONE!
- x86 AVX
- x86 AVX2 → DONE!
- x86 FMA
- ARM NEON → DONE!
- float32 model. → DONE!
- int16 mode.
- C++ wrappers.
- All CPU architectures.
-
Add YMF262 superset.
- Rough emulation of similar Yamaha operators.
- For accelerated music plugins (not for actual emulation).
- C++ wrappers.
-
Add YM3812 subset.
- Remove unecessary features from YMF262.
- Interleave 2-op code to benefit from multiple dispatch SIMD.
- Add Composite Sine Mode.
-
Add built-in plugin APIs to all emulated models.