::|CONTENTS
- Versions
- Usage
- Supported effects
- Macros
Make Gameboy Music in FamiTracker!
FTM2GBMC is a tool written by
Savestate that converts FTM text exports to GBMC MML. This allows fine tuning of the results post-conversion.
It uses GBMC (Gameboy Music Compiler) as the MML format it's converting to. Now given that this is a fairly new software, it's not fully featured, and has a few strange quirks which will be explained later on.
Versions
Current version -> 0.1.5 :
https://github.com/Savestate2A03/FTM2GBMC
Older versions:
sadly 1.3 and 1.4 were not archived
FTM2GBMC 0.1.2
FTM2GBMC 0.1.1
FTM2GBMC 0.1.0
Usage
To run @ command line: java -jar FTM2GBMC.jar [input [output]]
input :: FamiTracker text export file.
output :: GBMC compatible MML file.
If no input and/or output is provided at the command line, it'll ask you for them during runtime.
This will output an MML file that you should compile with GBMC which can be found here:
http://mydocuments.g2.xrea.com/html/gb/sounddriver.html
Download link for the older version of GBMC, if you don't feel like dealing with newer version for some reason.
http://web.archive.org/web/20181006125031/http://www.geocities.jp/submarine600/files/gb/gbmc/GBMC_20141021.zip
Note, songs made with FTM2GBMC are made for an older release of GBMC from 2014, so if you have any songs you made using FTM2GBMC, on line 28, remove the second tempo in the MML data in order for it to compile with the newest GBMC release from 2024 and adjust the first tempo to a value that is close to the corresponding speed.
Supported effects
Global: Wxx, Jxx, Hxx
Pulse 1 & 2: Axx, Vxx, Qxx, Rxx, Pxx
Triangle: Qxx, Rxx, Pxx
Noise: Axx
Special Effect Wxx:
Since DPCM isn't used in Gameboy music, Wxx is used as the loop point instead of Bxx (Dxx isn't supported at all currently...) but feel free to use Bxx along with Wxx since unsupported commands are skipped altogether. Also, you'll need to use Wxx on each channel at the point you want to loop it. (changing the xx in Wxx does nothing)
Axx:
The way Axx works in GBMC is it retriggers each note, even if you don't set a volume paramater on each note... so you need to keep that in mind when designing the song.
C-3 00 A A02
D#3 00 - ---
G-3 00 - ---
C-3 00 - ---
D#3 00 - ---
G-3 00 - ---
C-3 00 - ---
D#3 00 - ---
G-3 00 - ---
C-3 00 - ---
... is the same as ...
C-3 00 A A02
D#3 00 A ---
G-3 00 A ---
C-3 00 A ---
D#3 00 A ---
G-3 00 A ---
C-3 00 A ---
D#3 00 A ---
G-3 00 A ---
C-3 00 A ---
... so you'll probably want to do something like ...
C-3 00 A ---
D#3 00 - ---
G-3 00 9 ---
C-3 00 - ---
D#3 00 8 ---
G-3 00 - ---
C-3 00 7 ---
D#3 00 - ---
G-3 00 6 ---
C-3 00 - ---
Vxx:
Works as expected
Qxx / Rxx:
GBMC's pitch slide isn't based on a speed, it's based on a set note length, so pitch slide will take the entire length from when the slide was called to the next note. A way around this is to put down the note you're sliding to shortly after the slide that is called.
e.g.
B-3 00 F Q41
... .. . ...
... .. . ...
... .. . ...
D#4 00 . ...
... .. . ...
... .. . ...
... .. . ...
G-4 00 . ...
... .. . ...
--- .. . ...
... .. . ...
A-4 00 . Q41
... .. . ...
=== .. . ...
... .. . ...
would be changed to
B-3 00 F Q41
... .. . ...
C-3 00 . ...
... .. . ...
D#4 00 . ...
... .. . ...
... .. . ...
... .. . ...
G-4 00 . ...
... .. . ...
--- .. . ...
... .. . ...
A-4 00 . Q41
... .. . ...
A#4 00 . ...
=== .. . ...
Pxx:
Works as expected
Jxx:
The command usage is as follows: JLR
L is left channel enable.
R is right channel enable.
Examples
J01 right channel
J10 left channel
J11 both channels
J00 no channels (aka mute)
JB2 == J11
J60 == J10
J02 == J01
Hxx:
Hardware Channel Volume!
The command usage is as follows: HLR
L is the global left channel volume (0-F, divided to 0-7)
R is the global left channel volume (0-F, divided to 0-7)
When I say divided, GBMC's command parameters are 0-7, so...
0 = 0
1 = 0
2 = 1
3 = 1
4 = 2
5 = 2
etc etc
Examples
H2F very quiet left channel global volume, max volume right channel global volume
H11 silent because 1 divided by 2 == 0 (think integer division)
HFF both channels are at full volume
Reminder, as with all effects, using an Hxx command will reset the volume envelope for the channel it's in (due to having to code the timing factor for the volume change). It's supported in all channels however so use it in whichever one would be least affected by an envelope reset.
GBS Playback Support for Hxx
As this is a hardware feature not supported by most GBS players, I suggest using nezplug++! It seemed to play the file back correctly. foo_gep however, does not!!
Macros
Volume, pitch and duty macros work along with release points and loop points. While volume macros do work, it's probably best to not be using them unless you like the sound of hardware resets all up in your square waves. Lastly, arp macros do not work because GBMC does not support arp macros. It does however support inline arps (0xx), a goal to implement in the future.
Note off ( --- ) and note release ( === ) work!
Volume collum and Volume macros work on Triangle channel (has no effect in FamiTracker but does work in the exported GBS file or GBC rom)
Pitch macros in GBMC are absolute and are inverted on export
Loop points and Release points actually don't work, they get ignored on compiling (except for pitch macros)