- [X] working pulse sound output
- [X] simple oscillator
- [X] MIDI in
- [X] note on/note off
- [X] build pipeline
- [X] play corresponding notes on note on/note off
- [X] play smooth sounds (it’s currently awful)
- [X] switch to mono output as long as there is no stereo data
- [X] find a better name than synth
- [ ] variable sample rate
- [ ] refactor duplicated code in error handling (in input and output)
- [X] [5/5] more oscillators
- [X] sine
- [X] triangle
- [X] sawtooth up
- [X] sawtooth down
- [X] wavelets (which?)
- [ ] support modulation (eg. pulsewidth on squarewave)
- [X] use MIDI program change to switch oscillators
- [X] multiple oscillators simultaneously?
- [X] polyphony
- [X] switch stop oldest/newest note on polyphony overflow
- [ ] phazor effect? find out how to make atmospheric strings
- [X] stereo output
- [X] ADSR envelope
- [X] configure ADSR parameters via MIDI controls
- [X] support velocity on note on/note off
- [ ] support aftertouch?
- [X] add some status output
- [ ] use main thread for some commands (like quit)
- [ ] re-using an active lane does not reset the envelope.value of that lane; decide whether that is a bug or a feature
- [ ] global amplifier
- [X] compressor
- [X] support all notes off command
- [X] determine code coverage after tests
- [ ] phase-shift all oscillators so they start at 0
- [ ] provide arpeggiator instead of polyphony
- [ ] [0/4] add filters
- [ ] basic FIR filter
- [ ] configurable low pass filter (map to brightness?)
- [ ] configurable high pass filter (map to ???)
- [ ] filter envelopes
- [ ] prevent DC offsets on on non-50% pulsewidth square waved by spreading energy
- make the 25% wavelet ‘flatter’ on the 75% part
- think of this if the pulsewidth modulation feature gets implemented