https://github.com/sevonj/soundfont-compiler
Make soundfonts
https://github.com/sevonj/soundfont-compiler
midi soundfont soundfont2
Last synced: 5 months ago
JSON representation
Make soundfonts
- Host: GitHub
- URL: https://github.com/sevonj/soundfont-compiler
- Owner: sevonj
- License: gpl-3.0
- Created: 2025-01-07T10:06:58.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2025-11-24T12:42:05.000Z (7 months ago)
- Last Synced: 2025-11-28T01:58:34.322Z (7 months ago)
- Topics: midi, soundfont, soundfont2
- Language: Rust
- Homepage:
- Size: 189 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: readme.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# SoundFont Compiler
## What?
SoundFont Compiler is a command-line tool for creating soundfonts. Unlike most other tools, it isn't designed around a workflow of editing soundfonts. Instead, the soundfont binary is generated from "source code" comprising text and audio files.
## Why?
Breaking the soundfont into separate files and defining parameters in a text-based format makes collaboration and version control much easier.
## Current state
The project in its current state is a barely working proof of concept. The output from compiling the example project is _good enough_ to be parsed by [RustySynth](https://github.com/sinshu/rustysynth/).
## More details
You should be somewhat familiar with the SoundFont 2 format.
The quickest explanation
Hierarchy:
`preset -> instrument -> sample`
- A soundfont contains one or more presets.
- A preset contains one or more instruments.
- An instrument contains one or more samples.
The naming can be confusing. The preset is the unit visible from outside. In this context, when you choose a "patch," or "sound," you're choosing a preset, not an instrument. Instruments are internal to the soundfont. A preset may layer multiple instruments over each other to create a specific sound, and instruments can do the same with samples.
### Example project structure:
```
.
├── instruments/
│ └── AcousticGuitar.toml
├── presets/
│ └── 025_AcousticGuitar.toml
├── samples/
│ ├── guitarpluck_l.wav
│ └── guitarpluck_r.wav
└── SoundFont.toml
```
Samples are loose WAVE files. Presets, instruments and parameters are defined in TOML-files. See the example project.