I don't think you need to use controller object for this.
If you want to do it the smart way and save dsp and memory, I would say the best way would be making a wavetable with the osc types you need and then load them into a table.
Let's say you want saw, sine, square and triangle. You can create those 4 waveforms in Audacity, lets say you want each waveform to be 2048 samples long. Once you made the waveforms, you cut them so you only have ONE cycle of each. Once you done that you change each of the waveforms size so they are 2048 samples long. You do that by using the effect called "change speed". You can set the length of the waveforms with sample precision, so you set it to 2048, if that is the size you want.
Then you copy the 4 waveforms, which are now all 2048 samples into the same wavefile, so you end up with a file/wavetable with the 4 waveforms that are 8192 samples long. Then export the file in .raw format, so they can be loaded in Axoloti.
Then load the wavefile into a table and then you can use those waveforms for all 3 oscillator banks that you want in your patch. You will save alot of memory this way, cause you dont have to have 3 X saw, square, sine triangle oscillators loaded(12 oscs loaded at all times is a lot), you have just one single table, with the 4 waveforms in and then the 3 oscillator banks share the same waveforms.
To load the wavetable that you create in Audacity, you can do something like this:
The patch:
Waveforms 1.0 .axp (4.0 KB)
That is the basic playback setup. You want to add envelope, filter and so on. If you need it of course.
So you basically only need to get that wavetable with the waveforms created in Audacity. But yeah if you haven't tried that before, it might be a bit of work.