okay great, thanks.
Yes the M4 has a single precision FPU. It would be nice to be able to specify single precision output from the code gen (feature request 1!).
We already provide fast approximations of trig, exp and log functions, but the way SOUL code gen works we can’t easily plop them in.
With FAUST we can generate code that doesn’t use the
std:: prefix for math.h functions, so we can easily substitute them using macros.
Another method that works well for us is how Heavy does it (Pure data patches): the generated code calls e.g.
hv_sin(x), and then in a header file they provide
#define hv_sin(x) sinf(x) // or std::sin(x) if you prefer
This makes it easy for us to provide alternative implementations.
Could either of these options be adopted with SOUL?
Another feature request:
It is fantastic and impressive that the generated code does not use heap allocations. Huzzah! However on the downside, all required memory is contained within the main graph itself (unless I’ve misunderstood). With embedded platforms we often have non-contiguous memory, with different access times, so being able to allocate things like delay buffers separately can make a big performance difference. Is this on your roadmap already?
edit: this was supposed to be a PM, sorry!
I also have an M7 device here, which runs 8 voices TX with no problem. It seems that the M7, with higher clock speed and more internal RAM, is closer to the sweet spot for SOUL. We don’t have any products with this MCU in production, but I could maybe send you a prototype. Are you a Eurorack user, or would you prefer a desktop device?
Also would be good to discuss (putting this here so I don’t forget!):
- output parameters (block rate CV)
- parameter assignments, e.g. to hardware knob, and attributes
- handling buttons and triggers with sample accuracy
- device independent debug output
- output MIDI from patch
- MIDI message port id, for routing MIDI between USB i/fs