XM2Live
Convert FastTracker 2 XM and Amiga ProTracker MOD files to Ableton Live projects.
Bring your 1990s tracker music into the modern DAW era while preserving the original compositions.
Features
- Supported formats: FastTracker 2 XM (.xm), ProTracker MOD (.mod)
- Accurate conversion:
- Byte-perfect sample extraction (16-bit WAV)
- Correct BPM calculation (
BPM × 6/speed) - Proper MOD pitch mapping (+24 semitones offset)
- Loop support (forward and ping-pong)
- Per-sample volume and panning
- Smart track organization:
- One MIDI track per channel/instrument combination
- Automatic track grouping by instrument
- Color-coded tracks
- Optional effects:
- Panning automation (effect 8xx)
- Sample offset (effect 9xx) via Simpler
- Volume envelope conversion (experimental)
- Merge mode for polyphonic playback
Installation
pip install xm2live
Or install from source:
git clone https://github.com/samkieffer/xm2live.git
cd xm2live
pip install -e .
Quick Start
Single File Conversion
# Basic conversion
xm2live mytrack.xm
xm2live oldschool.mod
# With panning automation (effect 8xx)
xm2live mytrack.xm --pan-automation
# With sample offset support (effect 9xx)
xm2live mytrack.xm --sample-offset
# Merge mode (one track per instrument instead of per channel)
xm2live mytrack.xm --merge-tracks
Batch Conversion
# Convert all files in a directory (recursive)
xm2live-batch /path/to/modules
# Non-recursive (current directory only)
xm2live-batch /path/to/modules --no-recursive
Output
Converted projects are created in:
[source directory]/xm2live_converted_tracks/[name]_Ableton_Project/
├── [name].als # Ableton Live project
└── Samples/ # Extracted WAV samples (16-bit)
Command Line Options
xm2live
| Option | Description |
|---|---|
--pan-automation |
Enable panning automations (effect 8xx) |
--sample-offset |
Enable Sample Offset (effect 9xx) via Simpler |
--envelope |
Enable FT2 envelope → ADSR conversion (experimental) |
--merge-tracks |
Create one "All notes" track per instrument |
xm2live-batch
| Option | Description |
|---|---|
--template PATH |
Use custom Ableton template |
--no-recursive |
Don't search subdirectories |
--pan-automation |
Enable panning automations |
--sample-offset |
Enable Sample Offset via Simpler |
--envelope |
Enable envelope conversion |
Technical Details
BPM Calculation
FastTracker 2 uses a dual tempo system:
- Speed: Ticks per row (default: 6)
- BPM: Base tempo (calibrated for Speed=6)
Real BPM formula: real_bpm = bpm × (6 / speed)
Example: Speed=3, BPM=125 → Real BPM = 250
MOD Pitch Mapping
ProTracker uses different octave conventions than MIDI. The converter applies a +24 semitone offset:
- C-1 (ProTracker) → C-3 (MIDI note 48)
- C-2 (ProTracker) → C-4 (MIDI note 60)
- C-3 (ProTracker) → C-5 (MIDI note 72)
Sample Offset (Effect 9xx)
When enabled with --sample-offset:
- Instruments using effect 9xx are loaded into Simpler (instead of Sampler)
- Sample Start automation is created for each note with 9xx
- Limitation: Ping-pong loops are converted to forward loops (Simpler limitation)
Known Limitations
- Effects: Most tracker effects (vibrato, arpeggio, etc.) are not converted
- Volume envelopes: Approximation only (FT2 multi-point → Ableton ADSR)
- Dynamic BPM: Only initial tempo is used
- Formats: Only XM and MOD supported (no S3M, IT)
Requirements
- Python 3.8+
- Ableton Live 10+ (to open converted projects)
License
MIT License - See LICENSE for details.
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Acknowledgments
This project was created to preserve and rework tracker music from the 1990s demoscene era. Special thanks to the FastTracker 2 and ProTracker communities.
Metadata
Release files for xm2live 3.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xm2live-3.0.0.tar.gz | 61.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xm2live-3.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 120.2 kB
Release files / xm2live-3.0.0.tar.gz
| Download URL | xm2live-3.0.0.tar.gz |
|---|---|
| Size | 61.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
05fe696e0807f43b78cfdc494d98987513317f46510482eae943d6c79054c187
|
|
BLAKE2b-256 checksum How to use checksums |
c5a8f923282acd5818310a23dd6e0b6342fe578cbaa7a24cd851bef2b8467f56
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / xm2live-3.0.0-py3-none-any.whl
| Download URL | xm2live-3.0.0-py3-none-any.whl |
|---|---|
| Size | 59.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a330c67c791fc6bfecc6f458c3ab538919a1bd6a2768451a64209b41f8f0f926
|
|
BLAKE2b-256 checksum How to use checksums |
525d7b3e4ecc1f5c50717efbae8d784ea04835f4bfdfbdd572721603ffa0b662
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|