The plan for NeuralAmpModelerCore version 0.1
NeuralAmpModelerCore has been on version 0.0 for about 5 months., and the interfaces are over a year and a half old. In the meantime, I've coded some of my first C++ in quite a while. Now that things are settled and NAM has been doing its job, I "put a stake in the ground" with version 0.0.1 and I'm finally taking a second pass at the interfaces of the core DSP library. The result will be released as version 0.1 of NeuralAmpModelerCore.
I'm writing this blog post to give a quick summary of some of the changes that I've got in my mind. If you're building with NAM and you've got feedback or input that would help this be a better open-source foundation for you, get in touch!
The goal of version 0.1 is to simplify and cut scope. Concretely, this will be achieved by focusing on NAM snapshot models narrowly. The rationale is that this has proven to be the most valuable component of NeuralAmpModelerCore; therefore, I'm setting course for future development of the DSP to service this use case. The hope is that this will allow for a higher-quality, more optimized, better-maintained library.
Consequence 1: Remove parametric models
Version 0.0 supported not only the snapshot models (that replicate the sound of an amp at some specific knob setting) that NAM is now famous for, but also parametric models (CatLSTM and CatWaveNet) that can directly model the full space of the knobs and switches on gear. I've observed far more interest in the former, so I'm going to simplify the scope of the library to focus on snapshots. I will ensure that parametric modeling solutions will be compatible with the library so that anyone interested in pursuing this is still able; however, that will be positioned as an extension of NeuralAmpModelerCore. Again, if you're serious about this functionality and have questions, get in touch.
This will also allow me to get rid of extraneous components to the DSP class and remove lots of the auxiliary functions and inputs that are part of 0.0's public interface (e.g. input & output levels, the parametric settings object) and remove DSP steps in the processing call that end up doing nothing but "multiply by 1" for folks who aren't using them.
Consequence 2: Remove non-NAM DSP
In addition to NeuralAmpModelerCore's NAM/ module, it's also had a dsp/ module where miscellaneous elements were stored--loading WAV files, processing IRs, and biquad filters (peaking, shelving, LPF/HPF). These are all very standard effects, and most builders already have their favorites and don't want to use my implementations. So, I've spun these off into AudioDSPTools, a new library that will continue to be used by NeuralAmpModelerPlugin (as well as anyone else who liked them and wants to keep using them--see PR #374 for what this refactor looks like).
That's about it! Once again, I'm happy to provide detail in advance of having the code changes PR'd in--please reach out and ask. If you are building on the current interfaces, be sure to keep pointed at version 0.0 (the v0.0.1 tag is fine) for the meantime. If you have asks for the new version, get in touch and let me know what they are (or feel free to create an Issue). Otherwise, keep an eye on the changes, and I'll update here when version 0.1 is released.