TODO:
- Save / Loading patches
- Add "transpose" or keyboard movement buttons to UI
- "Randomize" Button
- Effects
- Vibrato
- Tremolo
- Adjust feedback numbers to be more granular
- SSG-EG mode?
- Optimizations:
- Optimize sampler tick rates/tick times with integer math?
- Optimize sine function?
- Use fixed point? u16 or something instead of f32, can then use a lookup table
ORIGINAL NOTES:
- Sound engine limitations, how many channels (16?), samples etc
- 48 khz sample rate
- Support Sound Limits:
- 8 FM channels, 8 sample channels for music
- 8 FM channels, 8 sample channels for "game sounds"
- Support stereo sounds?
- Samples should be built in to the engine
- Generate some Synth starter tones
- Select up to 512(?) possible samples
https://plutiedev.com/ym2612-registers#reg-40 https://www.smspower.org/maxim/Documents/YM2612#alittlebitaboutoperators https://manualmachine.com/sega/genesisfmdrive/2121418-user-guide/ https://moddingwiki.shikadi.net/wiki/OPL_chip http://gendev.spritesmind.net/forum/viewtopic.php?t=386&start=106
ym2612 feedbacks: 0 = 0 1 = PI / 16 2 = PI / 8 3 = PI / 4 4 = PI / 2 5 = PI 6 = 2 * PI 7 = 4 * PI
consider fast sin function as described: https://www.youtube.com/watch?v=1xlCVBIF_ig
For ratios / Freq Multiplier https://www.angelfire.com/in2/yala/2fmsynth.htm
Envelope Example Code: http://www.martin-finke.de/blog/articles/audio-plugins-011-envelopes/