the oscillators are pretty much nailed down now. the code has been optimized a lot and also various modulations that can work on a limited platform are working well. because it will be living in a modular synth,
Inputs: MIDI, CV(for internal modulation, not pitch), sync
Outputs: MIDI, OSC pair 1, OSC pair 2, CV, Trigger/sync x 2 ,
Controls done with pots because any LCD/memory etc screw up the sound. this little arduino is on the edge of not working anyways
there is MIDI in/out for controls in remote mode i can use it as a MIDI controller, and send my changes to the sequencer to be sent back for playback.
2x oscillator Pairs each with 9 controls:
offset "highest wave in the wavetable that can be used"
Osc B offset: (play higher for sync)
Wave select: mode (play higher up on the wavetable depending on velocity, external cv, accent etc)
Modulation selector: (modulate osc b by envelope, LFO, accent, external, combinations)
XOR: which is sort of a distortion control
unison: (works even when A and B are synced)
Mod amount: bipolar control of how much Modulation by mod selector.
Shared between the 2 pairs of oscs:
sync mode: no sync, normal sync, unpitched normal sync, unpitched normal sync with single cycle B osc.
bank select: select one of 4 banks 32 wave tables(16 waves 256x256) each
LFO source Triangle, saw, ramp, square, random, random by note, velocity, (adding more)
LFO sync on, off, on by accent, off by accent.
(no key scaling, its a bass synth, but if i can spare a knob, maybe
Osc output level controlled by: both by ADSR, Both gated, Both open, Mix by ADSR, Mix by LFO
Output CV mode: Envelope, envelope + velocity, envelope only on accent, LFO, lfo on accent.
Accent velocity level: adjust the velocity point where an accent is(much more fun than a "accent at 100" fixed one).
trig/sync output: sync out(osc1A), Trigger on envelope, trigger on accent.
switch only in software so far, have to put in a switch on the panel: sync/phase (all it does is stop the click when a synced osc resets)
Glide speed: adusts how fast the glide (303 style) gets to the next note.
duoB: second MIDI note controls "b" oscs
duoA : duophonic but uses both pairs of osc, can still use all effects, only controlled by osc 1 controlls
poly: all the oscs use settings from osc 1 but you can play a 4 note chord (no unison)
Each pair of oscillators can work like paradox in that the second oscillator in the pair can be pitched but synced to the main one and have the sync "click" removed. (yeap, they call it "phase synthesis" when they do that its just sync with the click removed lol)
The "b" oscillator can be made to only play one cycle, no matter what the pitch is. this is like "PWM" but for any shape waveform, and if the b osc has a fixed pitch then you can get some very nice sounds which have little to do with the wavetables themselves. the b osc is now sounding like a resonator (which can have a different "q" depending on what part of the wavetable is being played)
In a more traditional manner, the b osc can also be modulated by on board ADSR, external CV, or LFO which gives nice sync.
Note: A and B oscillators "synced" yet still le detuned from each other for phatness. with the 2 pairs of oscs going with slightly different rates i can get 4 way "supersaw" but with any waveform in the ROM, besides just saw.
I had planned a 4 pole chebychev fileter for the output but when i finally built that part..big mistake it resonated like hell. so i have a slow rolloff starting at 10khz, after the final amplification. its not ideal but i could not hear aliasing even with pre filter out except when i was coding the pitch bend and it just kept going up
anyways after the final amplifier to the "moog and synthesizers.com" standard im using i just have a weak 1 pole filter which only has the output frequency(31.25khz) down 15 DB, but it sounds very nice, amplifying to 10v P/P makes a HUGE difference to the sound.
did a bit of woodwork