MML (Music Macro Language) to MIDI converter with C++ and Rust implementations.
YKSConverter converts Mabinogi MML (PSG Basic) to MIDI format. This project provides two complete implementations with 100% binary compatibility.
Implementation based on PSGConverter. logue's PSGConverter
YKSConverter/
├── README.md # This file
├── cpp/ # C++ implementation
│ ├── YKSConverter/ # C++ source code
│ ├── build/ # Compiled binaries
│ ├── test_baseline.cpp # Baseline testing tool
│ └── README.md # C++ specific documentation
├── rust/ # Rust implementation
│ ├── Cargo.toml # Rust project configuration
│ ├── src/ # Rust source code
│ └── README.md # Rust specific documentation
├── docs/ # Common documentation
│ ├── CLAUDE.md # Development guidelines
│ ├── MML_SPEC.md # MML specification
│ └── PORTING_NOTES.md # Porting process documentation
└── scripts/ # Testing and comparison tools
├── *.hex # Binary comparison files
├── *.midi # Sample MIDI outputs
└── compare_outputs.sh # Output comparison script
- Complete MML Support: Tempo, length tokens, octave changes, dotted notes
- Multi-track MIDI: Support for complex multi-track compositions
- Binary Compatibility: C++ and Rust versions produce identical output
- Comprehensive Testing: Full test suite with baseline comparisons
- Cross-platform: Works on macOS, Linux, and Windows
cd cpp
mkdir build && cd build
cmake ..
make
cd rust
cargo build --release
cargo run --bin yks_converter -- "MML@t120l4cdefgab>c4.,,;"
See cpp/README.md for detailed usage examples including:
- Single track conversion
- Multi-track ensemble
- CMake build instructions
- Command line usage
See rust/README.md for detailed usage examples including:
- Library usage (add as dependency)
- Command line tool
- Single and multi-track examples
- ✅ C++ to Rust port completed with 100% compatibility
- ✅ All tests passing (9/9)
- ✅ Binary compatibility verified
- ✅ Multi-track support implemented
- ⏳ MIDI file validation with external tools (pending)
Both implementations are thoroughly tested:
# Test Rust version
cd rust && cargo test
# Test C++ version
cd cpp && make test
# Compare outputs
./scripts/compare_outputs.sh
See docs/CLAUDE.md for development guidelines and TDD practices.
Copyright (c) 2018 rajephon [email protected]
Licensed under BSD 2-Clause "Simplified" License
See /LICENSE for license information.