Main Page
Gleam is a sound synthesizer library written in C++. It receives sound synthesis events such as note on, program change, pitch bend, etc, and produces a raw audio stream.
Gleam is intended as a library rather than a stand-alone program. However, some basic example programs are provided that allow e.g. playing a MIDI file using a given soundfont.
Design goals
- Well documented library API for use by external programs.
- Well documented and structured implementation to ease contributions by casual developers.
- Modularity so e.g. new synthesis models can be implemented with minimum impact on the rest of the codebase.
- Performance tweaks where they provide significant benefits or don't conflict with the other design goals.
Implemented features
These features are implemented and have received some basic testing, but they may still be quite buggy.
- Wavetable synthesis based on the SoundFont 2 standard (you can load instrument definitions from an .sf2 file).
- Optional non-realtime synthesis (you can synthesize at whatever speed your CPU supports, irrespective of whether that is faster or slower than real time).
- Loading of and playing MIDI files.
- ALSA sequencer server.
- Support for 24-bit soundfonts.
- Delayed loading of sample data, to save memory. Sample data is only loaded into memory when it is about to be used.
Short-term goals
- Fixing all obvious synthesis bugs.
- Enabling chorus, reverb and the SF2 filter.
- Building dynamic libraries (at the moment only static libraries are built).
- Automatic generation of C and Python bindings.
Mid-term goals
- Thread locking between the audio thread and the event thread (this might get promoted to a short-term goal if locking problems are found frequently in practice).
- Generation of API documentation.
Long-term goals
- Support for other synthesis models and loading of the associated file formats (e.g. Impulse Tracker-compatible synthesis and loading of its instrument, sample and module formats).
