Article History
 
 
 

29 views
99% kleeder

FTM2GBMC
 

::|CONTENTS

  1. Versions
  2. Usage
  3. Supported effects
  4. 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

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!