SDMAudio
SDMAudio is a collection of high-performance audio format I/O routines, codecs, processors/effects, and other audio-related code written entirely in Object Pascal. It is very similar in design and goals to Remilia's other audio library, CL-RemiAudio.
Wanna support Remilia? Buy me a coffee on Ko-Fi, or support me through Liberapay.
Documentation
In general, the interface section of all sdmaudio*.pas files in the src/
directory describe the API for that particular unit. The documentation comments
for these is usually maintained fairly well, though there are still bits and
pieces missing. You can use this in conjunction with the programs in the
tests directory as a way to learn how to use this library. Proper
documentation will come at a later date.
Version Control
SDMAudio sources are managed using Fossil, a distributed version control system. The Fossil repository contains the urtext, tickets, and wiki. If you are reading this at https://fossil.cyberia9.org/sdmaudio/, then you are looking at the repository itself.
Usage
Compiling the Test/Example Programs
You will need Reika to build the test programs. Run Reika like this in the root of the repository to build all of the tests:
$ reika build
You can get a list of all the build targets like this (the default target gets marked with an asterisk):
$ reika build -T
Additional options can be listed using the --help command. Some of these are
not applicable to SDMAudio's test programs, e.g. the --asdf and
--no-userinit options.
$ reika build --help
Optional Compile-Time Defines
sdmAudioDebug: Enable some extra checks at runtime.
Stuff Included
SDMAudio is still very early in development. Things marked with [x] are completed, things marked with [/] are partially completed, and things marked with [ ] are planned.
- WAV and Au format support
- [x] Input and output of WAV and Au files.
- [x] Au: support for linear PCM (8, 16, 24, and 32-bit) IEEE floating point (32-bit and 64-bit).
- [x] WAV: support for linear PCM (8, 16, 24, 32, and 64-bit), IEEE floating point (32-bit and 64-bit), "extensible" WAV files, and IMA ADPCM WAV files.
- [x] Raw (headerless) PCM reading and writing.
- [ ] Min/Max sample calculations and RMS calculations for input files
- Encoders/Decoders
- [ ] MPEG-1 layers I, II, and III (e.g. mp3, via libmpg123)
- [x] FLAC (decoding only)
- [x] QOA codec
- [x] Extended QOA Format codec
- [x] WavPack (via libwavpack, decoding only at the moment, requires libwavpack 5.0 or higher)
- [ ] Vorbis (decoding only)
- [ ] YM2610 ADPCM-A codec
- [ ] IMA ADPCM codec
- [ ] High quality μ-law and A-law codec
- Processing
- [x] Bit-depth conversion with optional TPDF dithering
- [x] Integer -> Floating Point sample conversions
- [ ] High quality resampler (a native port based on libsamplerate)
- Effects
- [ ] Parametric EQ with low/high shelves and unlimited bands.
- [ ] Soft clipping
- [ ] Stereo enhancement
- [ ] Zita-Rev1 reverb effect (native port)
- [ ] MVerb reverb effect (native port)
- [ ] Chorus effect inspired by an 80s synth with model number ending in "-60"
- [ ] DC filter
- [ ] Generic lowpass filter
- [ ] CEM-style filter
- [ ] Wasp-style filter
- [ ] MS-20-style filter
- [ ] SSM-style filter
- Other
- [x] CUE sheet reading and writing
- [x] XSPF and JSPF reading and writing
- [x] Raw Vorbis Comments reading and writing
- [ ] Raw APEv1 and APEv2 tag reading and writing
- [ ] ReplayGain calculation support.
- [ ] MusicBrainz API support.
- [ ] ListenBrainz API support.
- [x] RIFF parsing.
- Output
- [x] Abstract "TAudioDriver" protocol to smooth-over the differences in various output backends
- [ ] ALSA backend
- [x] libao backend
- [ ] out123 backend
- [ ] TCP backend - send audio over a TCP connection
- [ ] ZeroMQ backend - send audio over a ZeroMQ socket
How do I contribute?
- Go to https://fossil.cyberia9.org/sdmaudio/ 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.
Contact me to set up a merge.
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
SDMAudio is under the GNU Affero General Public License version 3.