# moont-render
Renders Standard MIDI Files (.mid) to WAV audio through the
[moont](https://crates.io/crates/moont) CM-32L synthesizer.
## Usage
$ cargo run -p moont-render -- -c CM32L_CONTROL.ROM -p CM32L_PCM.ROM input.mid output.wav
With the `bundle-rom` feature, ROM arguments are optional:
$ cargo run -p moont-render --features bundle-rom -- input.mid output.wav
## How it works
moont-render takes a single SMF file (format 0 or 1) and will:
1. Parse the MIDI file including SysEx messages and tempo changes.
2. Convert tick-based timing to 32kHz sample timestamps.
3. Feed all events into the CM-32L synthesizer.
4. Render the full duration, plus a 2-second tail to a 16-bit stereo WAV file.
## Supported MIDI features
- Format 0 (single track) and format 1 (multi-track)
- All channel messages (note on/off, control/program change, pitch bend...)
- SysEx messages (instrument uploads, reverb configuration, etc.)
- Tempo changes (defaults to 120 BPM)
- Running status
## Capturing MIDI from ScummVM
See [CAPTURE.md](CAPTURE.md) for instructions on recording .mid files from
ScummVM using a virtual MIDI port.
## Related Crates
| [moont](https://crates.io/crates/moont) | Core CM-32L synthesizer library |
| [moont-live](https://crates.io/crates/moont-live) | Real-time ALSA MIDI sink |
| [moont-web](https://crates.io/crates/moont-web) | WebAssembly wrapper with Web Audio API |
## License
moont-render is distributed under LGPL 2.1+.
> Copyright (C) 2021-2026 Geoff Hill <geoff@geoffhill.org>
This library is free software; you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License as published by the Free
Software Foundation; either [version 2.1 of the License](COPYING.LESSER.txt),
or (at your option) any later version.