Seen some audio engines that do this too. You can come up with an elegant non-blocking lock free allocator and pass updates from the user thread out to system and reserve the memory, or you can just up front allocate everything that's needed.
If it's a fixed function synth, sometimes just allocating everything up front makes more sense.