Sorry if this question is a bit low level into the programming, but I am wondering how to build a synthesizer of realistic sounds (without using samples). In the beginning, just basic instruments (guitar, drums, bass with effects), then to voice and nature sounds like lightning, fire, crickets, flowing water, etc.
The way I see it, I would start with the low level oscillators (which I know very little about yet, but this question is the start to a journey of learning audio by doing, I just need some higher level motivation), and add effects to them. But then the second step is to define all types of sounds instruments can make.
I don't really know what that means, but this is where I'm at... There is a pound sound like the drum, there is a sustained but lessening sound like the sound of a plucked string instrument. There is the sustained sound of a note in a flute. Then second to this "category" of waves (it seems to call them waves in this category), there is the transition between notes in an instrument, like sliding on a violin, vs. striking a single note.
So I guess it boils down to waves and wave transitions then. Is there a list of all types of sound waves somewhere? Something like that? I know I've seen the 4-ish standard waves of an oscillator (sine wave, triangle, etc.). But what about realistic sounds? How many types of waves are there? Can they be categorized?
If I knew how many types of waves there were and categories, then I would have a foundation upon which I could build all other sounds. I could start by defining lets say "The 100 Basic Sound Waves", and then I could play them at different intensities with different notes with different effects and durations.
Has anyone done this sort of work already in collecting the wave types to make arbitrary sound from a reasonably large alphabet of symbols?
Note: I was wondering if I should ask on Sound Design Stack Exchange, but I realize I like the idea of associating this more closely with music theory and real instruments (because I used to play in a band). Asking here you might know the higher-level building blocks on top of your standard low-level audio API, so could point me in a better/faster direction.
In terms of "all instruments", I mean every abstract "instrument", from a guitar, to a voice, to a hammer, to a keyboard typing to a flame to water to any thing that can be used to make sound. What are the categories of sound types that can be made?
Sort of like asking "what are all the shapes of 3D objects", and it boils down to shapes with certain number of sides with concave and convex. Something simple and elegant. But you can get more complicated and deep with it if you want, it evolves out of some basics.