By @BN_LOS
WAV ↔ OGG Vorbis converter built from scratch in pure Rust. Custom binary-level handlers for WAV, OGG, and Vorbis — zero dependencies, zero FFI, std only.
This tool was first created to convert WAV voice files to OGG for Ready or Not's update which changed in-game voice usage from WAV to OGG format. It has since been completely rewritten in Rust with a custom Vorbis codec, supporting conversion in both directions with zero quality loss.
| Feature | Detail |
|---|---|
| Pure Rust | No crates, no FFI, no C — std only |
| Custom codec | Full Vorbis I encoder + decoder |
| Bidirectional | WAV → OGG and OGG → WAV |
| Multi-channel | Supports 1–8 channels |
| Lossless path | Sum/difference coupling, no point-stereo degradation |
| Verify mode | Internal round-trip verification (encode → decode → RMS comparison) |
| Single binary | ~500 KB .exe with embedded icon |
ittool.exe Encode wavs/ -> oggs/
ittool.exe --decode Decode oggs/ -> wavs_out/
ittool.exe --verify Round-trip verify all files
ittool.exe --file "path.wav" Single file encode
ittool.exe -i inputdir -o outputdir Custom directories
| Library | Description |
|---|---|
wavlib |
RIFF WAV parser + writer (PCM, IEEE float, WAVEFORMATEXTENSIBLE, 8/16/24/32-bit) |
ogg_reader |
OGG page decoder — sync buffer, CRC32 verify, packet reassembly across pages |
ogg_writer |
OGG page encoder — segment lacing, BOS/EOS flags, one-page lookahead |
vorbislib |
Vorbis I codec — MDCT, floor1, residue VQ, Huffman coding, channel coupling |
Encode: PCM → window → MDCT → floor1 analysis → residue VQ → couple → bitpack
Decode: bitpack → floor → residue → decouple → IMDCT → overlap-add → PCM
100/100 test files pass round-trip verification with 0.1%–1.8% RMS difference.
This project was implemented against the official specifications and reference implementations:
| Source | URL |
|---|---|
| Xiph.org Vorbis I Specification | https://xiph.org/vorbis/doc/Vorbis_I_spec.html |
| xiph/ogg (official reference) | https://github.com/xiph/ogg |
| ruuda/hound (WAV patterns) | https://github.com/ruuda/hound |
| OxideAV/oxideav-vorbis (codec design) | https://github.com/OxideAV/oxideav-vorbis |
| RustAudio/ogg (OGG patterns) | https://github.com/RustAudio/ogg |
| OxideAV/oxideav-ogg (muxer patterns) | https://github.com/OxideAV/oxideav-ogg |
| emoose/re4-research (WAV handling) | https://github.com/emoose/re4-research |
| coreynguyen/RE4_Utility (WAV handling) | https://github.com/coreynguyen/RE4_Utility |
Python wave module |
https://docs.python.org/3/library/wave.html |
| WAV file format spec | https://docs.fileformat.com/audio/wav/ |
| Version | Path | Language | Description |
|---|---|---|---|
| V2.1 | old/main.py |
Python | Original WAV→OGG converter using soundfile + numpy |
| V2 | old/OLD.FILES/ |
Python | First release archive |
| V3 | this repo | Rust | Full rewrite — zero dependencies, custom codec |
MIT — free to use, modify, and distribute.