CL-MeltySynth is port of the excellent MeltySynth by Sinshu to Common Lisp. It is a library that provides MIDI music playback using SoundFonts for Common Lisp projects without a lot of dependencies.
If you are looking for a player that uses CL-MeltySynth, I highly suggest checking out midi123. This is both a command line MIDI player and MIDI->WAV converter.
Wanna support me? Buy me a coffee on Ko-Fi
- Warcraft 2's "Human 1" by Glenn Stafford (CL-MeltySynth v2.0.0)
- Rise of The Triad's "Spray" by Lee Jackson (CL-MeltySynth v2.0.0)
- Doom E1M1 "At Doom's Gate" by Bobby Prince (CL-MeltySynth v1.0.0)
You can find a general roadmap of planned features here in the wiki.
- Wave synthesis and Sound
- [x] 64-bit internal audio engine
- [x] Choice of linear or cubic interpolation
- [x] Loads SoundFont files
- [x] Waveform and Envelope generators
- [x] Low-pass filter
- [x] Vibrato and Modulation LFOs
- MIDI processing
- [x] Note on/off
- [x] Bank/patch selection with optional remapping (remaps unknown presets to bank 0/128)
- [x] Modulation
- [x] Volume control and Panning
- [x] Expression
- [x] Hold pedal
- [x] Pitch bend
- [x] Tuning
- [x] NRPN support
- [x] Multiple reverb choices, including a port of Zita-Rev1, with controllable parameters
- [x] Chorus effect
- [x] Stereo enhancer effect
- [x] Reverb, Chorus, and Stereo Enhancer can all be enabled/disabled individually
- Other things
- [x] Standard MIDI file support
- [x] RIFF-based MIDI file support (RMI, only the MIDI data is loaded)
- [x] Loop extension support
- [x] Performance optimizations
Building and Development
A recent version of SBCL is highly suggested, and CL-MeltySynth has been built
successfully with versions 2.2.2 through 2.2.5. Closure CL 11.5 is also known to
work, but is not as thoroughly tested. Please see the
Building article in the wiki for information on loading
the library, debug builds, and running tests. Additional example programs can
be found in the
I use a slightly different style for my code.
- Keep lines 118 characters or shorter. Obviously sometimes you can't, but please try. Use 80 characters for Markdown files, though.
- New type declarations should have their names prefixed with
T/, for example,
t/uint32-vector. This is only for DEFTYPEs and DEFINE-PSEUDO-ENUMs.
How do I contribute?
- Go to https://chiselapp.com/user/MistressRemilia/repository/CL-MeltySynth/ and clone the Fossil repository.
- Create a new branch for your feature.
- Push locally to the new branch.
- Create a bundle with Fossil that contains your changes.
- Get in contact with me.
- Remilia Scarlet - creator and maintainer
Links and Licenses
- MeltySynth by Sinshu (MIT License)
- TimGM6mb.sf2 by Tim Brechbill (GPLv2 License)
- Zita-Rev1 by Fons Adriaensen (GPLv3 License)