Let me try to explain the simple-most generator for Renoise I can think of: Zebra-Line-Drawing in the Sample Editor. Right, look at u-he Zebra and see how basic these
oscillators are set up. It’s a line tool as in graphics software. You can create: Saw, pulse and triangle among other simmilar shapes. Zebra can
actually do frequency-domain drawing and morphing too. We’re at the moment not interested in these. And it would be enough to draw only a single line segment.
So, what should happen when you have drawn such a line in the Sample Editor? Simply: It gets rendered into the Waveform, with exacly the size that matches onto
the wave view, at exactly the start and end points you have dragged the line.
Loop points for this cycle will be set by Renoise. So with one drag you can create a saw. With two drags you can create a triangle, but the loop points are on the
second segment then, the same applies when creating a pulse. So there should be some minimal assistance in getting the loop points correctly. A sine cycle could be
done by afterwards using the already-there filtering on selected wave-data. Again, with some loop point assistance.
Now that would be a very simple wave generator. But a lot of folks would complain how it sounds, heavily aliasing. So, after the groundwork is done, to cure this
aliasing there would be two features needed: Adding more than just cubic interpolation to Renoise. Saved in the song per Waveform. There’s a few more interpolators
than just 4 point cubic, and they are also using only few points. They all have different characteristics when applied to the transitions of basic shapes. Some give less
aliasing on saw transitions, some on pulse. Basicly it would allow a “blind” way to create PolyBLEP oscillators.
The rest of the aliasing could then be reduced with oversampling. Since other parts of Renoise should not be touched, it would be good to do oversampling on each Instrument.
Doing the filtering and downsampling on each Renoise Instrument, or even each Waveform (as there might be already things in an Instrument that cannot handle a different
audio rate) would, at first, not be very fast.
So, the pulse width modulation would be left. This could be fixed by - as Zebra does - morphing between two Waveforms. Meaning, it’s not impossible, though in this scenario
depending on a feature that’s not trivial to implement. Edit: gentleclockdivider pointed out that Zebra uses graintables for this.