Wavetable Synthesis
Wavetable Synthesis
Idea: Save waveform, play it back when key is pressed
Memory issues
Needs lots of memory (not a problem anymore)
Memory access is slow (needs lots of cache)
Conceptual issues
Want note to last as long as key is held: looping is needed
May not have a wave for every key: pitch shifting is needed
Wave may have inappropriate envelope: envelope generation is desirable
May want to dynamicaly modify waveform: effects are desirable
Envelope: Attack, Decay, Sustain, Release
ADSR model is standard envelope description
Attack: short ramp-up at start of note
Decay: short ramp-down just after attack
Sustain: constant hold level when decay is complete
Release: short ramp-down after key is released
Often linear ramps, sometimes smoothed
Used in pretty much every kind of synthesis
Sustain and Looping
Want to maintain sustain level for as long as key is held down
Infinite time stretching is a thing
Techniques mentioned previously apply: usual is looping, i.e. time-domain stretching
Loop start and end may be marked manually, or can try to infer
Soundfonts
Standard file format for wavetables, set up for synthesizer consumption
File format is immensely complicated, so use a library and think carefully about handling
"General MIDI" synthesizers are almost always this: standard GM soundfonts are readily available