FTM2GBMC - Make Gameboy Music in FamiTracker!
BotB Academy Bulletins
 
 
60835
Level 28 Chipist
FTM2GBMC

Make Gameboy Music in FamiTracker!

Hey there BotBrs! I finally got around to remaking my previous software that converted FamiTracker music from a text export to Gameboy music, this time much more functional than last time. Instead of using the somewhat flaky and complicated xpmck, I'm using GBMC (Gameboy Music Compiler) as the MML format I'm converting to. Now given that this is a fairly new software, (and my n00b programming skillz) it's not fully featured, and has a few strange quirks which I will try my best to explain.

Current version -> 0.1.5 : http://savestate.info/upload/FTM2GBMC-0.1.5.jar

Older versions:
0.1.4 -> http://savestate.info/upload/FTM2GBMC-0.1.4.jar
0.1.3 -> http://savestate.info/upload/FTM2GBMC-0.1.3.jar
0.1.2 -> http://savestate.info/upload/FTM2GBMC-0.1.2.jar
0.1.1 -> http://savestate.info/upload/FTM2GBMC-0.1.1.jar
0.1.0 -> http://savestate.info/upload/FTM2GBMC.jar

To run @ command line: java -jar FTM2GBMC.jar
(it asks for file names after you run it)
This will output an MML file that you should compile with GBMC which can be found here: http://www.geocities.jp/submarine600/html/sounddriver.html

Supported effects:

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:
Ok so 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:
Ok, so 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: (as of 0.1.3)
PSG Channel Enable!
Refer to the post above in this thread

Hxx: (as of 0.1.4)
Hardware Channel Volume!
Refer to the post above in this thread

----------------------------------

Macros

Listed macros work along with release points and loop points.

Volume macros work! ... but I highly suggest not using them unless you like the sound of hardware resets all up in your square waves.

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.

Pitch & Duty macros work fully and without flaw!

Note off ( --- ) and note release ( === ) work!

----------------------------------

Triangle wave? Why not Namco channel 1?

Yeah I'm dumb, expect this to be changed in a future release.
Feel free to modify the MML to your liking though in the meantime (sorry I suck)

----------------------------------

Please let me know if you run into trouble with this!
 
 
60836
Level 25 Chipist
post #60836 :: 2015.11.03 2:00pm
  
  keramon, Savestate, ap0c and Jangler liēkd this
You're a cool guy and you are doing cool guy work. I am well up for trying this out for the next winter chip. Keep it up :)
 
 
60837
Level 22 Chipist
post #60837 :: 2015.11.03 3:43pm
  
  Savestate liēkd this
Yes! This sounds awesome! I will definitely try this out.
 
 
60838
Level 28 Chipist
post #60838 :: 2015.11.03 4:01pm
  
  Razerek and Jangler liēkd this
Update: http://savestate.info/upload/FTM2GBMC-0.1.1.jar

Changes to 0.1.1
- BPM divided by 4 (songs were playing 4x too fast!)
 
 
60840
Level 10 Criticist
post #60840 :: 2015.11.03 11:09pm
  
  Savestate liēkd this
Wow, this sounds very interesting!
 
 
60983
Level 23 Chipist
post #60983 :: 2015.11.16 8:10am
  
  Savestate, goluigi, anewuser and Radnyx liēkd this
just because it is written in java does not mean you should not release the source code
 
 
60984
Level 28 Chipist
post #60984 :: 2015.11.16 8:14am
  
  HertzDevil, anewuser, Baron Knoxburry and YobaHere liēkd this
Oops! I forgot to put this in the original post.
https://github.com/Always8bit/FTM2GBMC
 
 
60985
Level 23 Chipist
post #60985 :: 2015.11.16 8:21am
  
  Savestate, DalekSam, pedipanol, Xemogasa, goluigi, Jangler, Baron Knoxburry, Dimeback, Radnyx, Pegmode, Modus Ponens, meanings and TMM12 liēkd this
this is a likable post now
 
 
62691
Level 28 Chipist
post #62691 :: 2016.01.27 9:57pm :: edit 2016.09.08 11:16pm
  
  Razerek liēkd this
0.1.2

update: fixed major bug that prevented the use of Axx effect properly.
 
 
72242
Level 28 Chipist
post #72242 :: 2016.09.08 10:31pm :: edit 2016.09.08 11:16pm
  
  b00daw and Dimeback liēkd this
0.1.3

update! added panning support. use effect 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)

1 or greater will be considered as 'enabled'
JB2 == J11
J60 == J10
J02 == J01

heads up, using a JXX command WILL reset the volume envelope, so doing this ...

C-3 00 A A03 J11
--- -- - --- ---
--- -- - --- ---
--- -- - --- J01
--- -- - --- ---
--- -- - --- J10
--- -- - --- ---
D-3 00 A J11 ---
--- -- - --- ---
--- -- - --- ---
--- -- - --- ---

would sound like

C-3 00 A A03 J11
--- -- - --- ---
--- -- - --- ---
C-3 00 A --- J01
--- -- - --- ---
C-3 00 A --- J10
--- -- - --- ---
D-3 00 A J11 ---
--- -- - --- ---
--- -- - --- ---
--- -- - --- ---

if you encounter any bugs with this, let me know!!
 
 
72243
Level 28 Chipist
post #72243 :: 2016.09.08 11:16pm :: edit 2016.09.08 11:19pm
  
  b00daw and Dimeback liēkd this
0.1.4

update again! added global hardware channel volume support! use Hxx

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

also, 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. (often the wave channel)

As this is not a hardware feature supported by most GBS players, I suggest using nezplug++! It seemed to play the file back correctly. foo_gep however does not!!
 
 
72244
Level 25 Chipist
post #72244 :: 2016.09.08 11:23pm
  
  Savestate, Xyz, FamicomForever, Dimeback, pedipanol and Apsarah liēkd this
This is the kind of thing I was hoping people would do when I wrote the text exporter for Famitracker. :)
 
 
72245
Level 13 Chipist
post #72245 :: 2016.09.08 11:25pm
  
  Savestate and Apsarah liēkd this
Cool, will check this out later for sure.
 
 
73158
Level 28 Chipist
post #73158 :: 2016.10.08 8:12am
  
  b00daw and Apsarah liēkd this
Heads up, I just merged a pull request from williamd1k0 that added cli support, which should make scripting w/ ftm2gbmc a thing now!

I don't have the resources to install netbeans and build it as of now, so if you'd like cli then you'll have to dl the project from github and build it yrself. otherwise, i'll make another update post in about a week or so when i get around to updating the build here.
 
 
78151
Level 28 Chipist
post #78151 :: 2017.02.05 11:35am
oops ! thanks for electronoob reminding me about this lol
updated to 0.1.5 !! binary incl'd
 
 
78180
Level 25 Chipist
post #78180 :: 2017.02.05 4:59pm
What's new? :O
 
 
78183
Level 28 Chipist
post #78183 :: 2017.02.05 5:56pm
  
  b00daw and Xyz liēkd this
The CLI, I never built it or updated the version here
 
 
78187
Level 25 Chipist
post #78187 :: 2017.02.05 7:36pm
  
  Savestate liēkd this
ooh nice the CLI :D
 
 
82789
Level 28 Chipist
post #82789 :: 2017.04.18 5:56pm :: edit 2017.04.18 6:13pm
  
  shinichi liēkd this
lots of cool build stuff added on the github

- idea and gradle support
- add travis ci support
many thanks to rogersachan (LucasOne on the Puke7 Discord)
edit: and now on BotB!
 
 
82956
Level 21 Mixist
post #82956 :: 2017.04.22 1:36pm
  
  pedipanol and MovieMovies1 hæitd this
  
  Jimmyoshi, Razerek, Quirby64, RazerBlue6 and MiDoRi liēkd this
it2gbs when :))))))))))
 
 
82962
Level 26 Chipist
post #82962 :: 2017.04.22 4:44pm
  
  Quirby64, Modus Ponens, Savestate, gotoandplay, pedipanol, TMM12, goluigi and HertzDevil liēkd this
  
  RazerBlue6 hæitd this
shinichi just use it2nsf2ftm2gbmc u noob!
 
 

LOGIN or REGISTER to add your own comments!