Open dquenne opened 10 months ago
Proof-of-concept implementation here: 55caa373e9c337a460111abbd71b3422879949a5
Still a lot of legwork required to add the other MVP destinations. Biggest headache is threading all the other patch parameters through FmVoice
- right now Synth
reads them direction from the patch struct.
Another thing blocking removing the limited FmPatchOperatorScalingConfig
is introducing a really simple way to have all carrier operators scaled by velocity. This will essentially be a one-byte parameter that is shorthand for a mod matrix entry that scales carrier operator levels by velocity, because this is such a common use case.
0180f96e5114827bee42ce121f1a71871f8faa3d introduces some flexible modulation options for FM operators, but (1) isn't very scalable, and (2) adds clutter to voices that don't need this level of modulation. The next sensible step is to convert this to a flexible modulation matrix instead.
A lot of this will probably apply to PSG voices, but that can of worms can be left closed for now. (the fact is, PSG voices have far fewer parameters, so this level of flexibility isn't as important or valuable)
Mod matrix parameters
Mod destinations
Mod sources
For convenience, all values will probably be normalized to 1024 (in other words, sources with a range of 128 will have their values multiplied by 8)