# 9 ways to NRT, part 5: Generating Milkytracker files with NRT
2015-01-02
Welcome to Part 5 of 9 Ways to NRT
Today, NRT will be used to generate XM files, which are the native file format for the fasttracker 2 inspired music tracker Milkytracker.
The main program used in generating the XM files is
libXMT, a Lua library I wrote a few months ago. Using XMT,
I wrote a lua script that could parse the output of NRT and write the note information to
an XM file.
The cool thing about the XM file format is that it is a self-contained piece of music with a very small footprint. XM can embed samples and wavetable synthesizers inside of itself. Conceptually, it is a lot like a MIDI file with sounds. The script I made programatically creates a squarewave synthesizer that plays the NRT notes.
Using the nrt2xm
program, one could use it with NRT in the following
way with this bash script:
#!/bin/bash
nrt_string="d4. r8 m s | t4 s m | r2 t4 | (D2. m s)"
BPM=120
offset=70
echo $nrt_string | nrt -F' ' | sort -n | ./nrt2xm out.xm $BPM $offset
The NRT program uses the '-F' flag to change the separator from the default comma
to a space. This is done so the notes can be sorted chronologically with the Unix
command sort
before being fed into the lua script nrt2xm
Running this script generates a file called "out.xm", opening it up in Milkytracker gives you a pattern that looks like this:
All code can be found on the 9 ways to NRT github
The nrt2xm program, while absolutely functional for basic NRT notation, is definitely proof-of-concept and should be modified for any serious needs.