Self noise is probably a wee bit high, but cool that you modeled it.
I found that it is crucial to reproduce high resonance filter sweeps at intermediate frequencies. I can try to take it down a bit.
The real JX-8P had a nastier click when amplitude envelopes were retriggered at dramatically different velocities, but this sounds close enough.
In fact, I included a LP filter on the velocities in order to remove clicks. I never noticed them on my JX-8P. I could increase the cutoff frequency to get those clicks back, but I am not sure whether I want that...
Love that you can change programs and the voice continues, like a real programmable polysynth. Congrats.
Make sure you implement cycle assignment too. And increasing bend range to at least 1 octave would be nice.
Do you mean the mode when the "poly" button is blinking? I have not really been able to figure out, how exactly it allocates the voices. What I modelled so far, is that a note, when pressed again triggers the same voice and the ADSR just continues where is was left off.
CPU usage on my Core2Quad q9300 @ 2.5 GHz is about 5% with all voices going. Fine, particularly considering the 12x oscillator and 4X filter oversampling you're using.
I hope that I can still save some CPU, since some people here reported that it is quite a CPU hog.
Would be nice if you could push the filter resonance into self oscillation (you could make a real JX-8P or JX-3P do this by tweaking trim pots inside).
Actually, I was planning to add some tweaks later, for instance boosting the resonance, or switching the envelopes from their quantised versions (they only update every 5 ms on my JX-8P) to truly continuous, or even add PWM for the square wave (can be done at no extra cost).
Not crazy about the switches on the GUI needing so much mouse travel. SE must provide a better control type for this, no? Sliders are ok, but a coarse/fine mode would be nice.
I am not happy about the long distances myself, but have not yet figured out whether that can be changed.
What's the list dropdown do?
This dropdown controls the 'secondary oversampling'. Right now, the whole engine, i.e. mainly the LP filter is oversampled 4 times. In order reduce aliasing, especially for hard sync, it is necessary to have even higher oversampling for the oscillators. Since this can get quite expensive, but is not always necessary (only for real high frequencies, and when using ring modulation or hard sync), I made it available to users. I am still thinking about some clever way to make this more intelligent, such as automatically choosing different values depending on the pitch of a given voice. This way, the expensive oversampling would only kick in for high notes.