CL-RemiChips
CL-RemiChips is a high-performance sequenced music format library for Common Lisp, with a CLOS-based, format-agnostic frontend API. It currently supports a variety of module/tracker formats (via libxmp), Commodore 64 SID files (via libsidplayfp and libremicsid, and SoundFont-based MIDI synthesis and playback. The SoundFont/MIDI playback in particular is written entirely in native Common Lisp, and is originally based on MeltySynth.
Wanna support this project? Buy me a coffee on Ko-Fi, or support me through Liberapay.
Releases
Releases can be found on the wiki.
Features
- SoundFont synthesizer that can be used for MIDI playback, or as a standalone SoundFont engine.
- Loads SoundFonts using mmap()/MapViewOfFile() for faster load times and better memory usage.
- Supports 4GB SoundFonts.
- The MIDI code supports Standard MIDI Files, RMI files, and MUS files.
- All tracker/module formats that are supported by libxmp.
- Fast, accurate Commodore 64 SID playback.
Usage
This library only supports SBCL and ClozureCL. It is primarily developed with SBCL in mind.
Most of the Lisp dependencies can be installed using QuickLisp (though this hasn't been tested). The exception is the CL-SDM and CL-RemiAudio libraries, which must be obtained from here and here, respectively.
You'll of course also need libxmp if you want module/track file playback; and both libsidplayfp and libremicsid if you want SID file playback.
CL-RemiChips provides separate ASDF systems so that you can load just what you need:
:CL-REMICHIPS: Core API, used by all of the other systems.:CL-REMICHIPS-MIDI: SoundFont synthesizer and MIDI playback.:CL-REMICHIPS-TRACKERS: Module/tracker file playback via libxmp.:CL-REMICHIPS-SID: Commodore 64 SID file playback via libsidplayfp.
Development
Flags for *FEATURES*
CL-RemiChips supports a few flags that can be put into *FEATURES* prior to
compiling it.
:CL-REMICHIPS-SIMD: Enables SIMD code when using SBCL (does nothing when not using SBCL). SB-SIMD is required for this.:CL-REMICHIPS-DEBUG: Includes extra assertions and runtime checks.:CL-REMICHIPS-NEVER-INLINE: Performs no inlining for functions defined withDEFINE-TYPED-FN, except for ones that specify:ALWAYSfor their inlining.
Style info
I use a slightly unorthodox style for my code. Aside from these differences, please use normal Lisp formatting.
- Keep lines 118 characters or shorter. Obviously sometimes you can't, but please try. Use 115 characters for Markdown files, though.
- I mark types using the form
T/..... For example,T/SOME-NEAT-TYPE. For predicates on these, useSOME-NEAT-TYPE-P. - No tabs. Only spaces.
How do I contribute?
- Go to https://fossil.cyberia9.org/cl-remichips/ 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 via email, Fediverse, or open a ticket.
Contributors
- Remilia Scarlet - creator and maintainer
- Homepage: https://remilia.sdf.org/
- Fediverse: @remilia@social.cyberia9.org
- Email: zremiliaz@postzeoz.jpz My real address does not contain Z's
Links and Licenses
CL-RemiChips is licensed under the GNU Affero General Public License version 3.