I wrote a basic FTM to MIDI converter script in Lua, which uses my own partial port of the CFamiTrackerDoc class and a Lua port of MIDI-Perl. Its purpose is to allow one to quickly access the underlying notes in FTM files within a wide class of sequencers; it does not aim at producing listenable General MIDI files from arbitrary FTMs. It is a much faster method of producing usable sequence files compared to recording the MIDI output from FamiTracker with external software. An installation of Lua 5.2 or above is required.

Current features

Note-by-note export with proper handling of Gxx and Sxx effects;

Multi-chip FTMs are supported with volume mixing, and MIDI channels can be remapped;

Percussion mapping for noise channel per instrument, and DPCM per sample;

Loop detection and tempo changes, including 0CC-FamiTracker grooves;

Notes using the 0xy arpeggio effect or looped absolute arpeggio sequences are expanded into individual notes;

Support for 0.5.0 FTMs (this must not be done before the updated CFamiTrackerDoc source code is released) and 0.2.x FTMs.

Feel free to modify the script and/or port it to other languages, or report bugs in this thread. The archive attached below contains everything required to run the script, as well as some FTMs and a batch file that give you an idea of what the current converter is capable of.

Not viable in the sense that these events alter the channel volume directly and there is no "volume detection" that works in all circumstances, but adding the most recent note (or 0CC-FT's ^0) to every row containing a 9 in the volume column will always work. In practice encoding volumes as note velocity makes the exported MIDI more amenable to manipulation than encoding them as channel volume, because otherwise all notes would be at maximum velocity, and almost all DAWs treat notes and track automations independently of each other. Nonetheless this is possible as an option (incidentally, Axy effects can be handled this way).

Not viable in the sense that these events alter the channel volume directly and there is no "volume detection" that works in all circumstances, but adding the most recent note (or 0CC-FT's ^0) to every row containing a 9 in the volume column will always work. In practice encoding volumes as note velocity makes the exported MIDI more amenable to manipulation than encoding them as channel volume, because otherwise all notes would be at maximum velocity, and almost all DAWs treat notes and track automations independently of each other. Nonetheless this is possible as an option (incidentally, Axy effects can be handled this way).