Beta FTM to GBS (Gameboy Sound)
BotB Academy Bulletins
Level 29 Chipist
post #48471 :: 2014.10.09 3:56am :: edit 2015.11.18 11:52pm
  AutisticApple, Apsarah, Razerek, raphaelgoulart, gotoandplay, 9999HP, b00daw, Potentialing, plrusek and cce liēkd this
EDIT: 11/19/2015

Hey everyone, since I never really got used to LSDJ, I wanted to see if I could make gameboy music with something I was more familiar with. Since famitracker has a text export, I thought that I could probably take that and do something that would allow me to convert it to the gameboy. So after a few days of programming, I have a beta program for a FTM (text export) to GBS MML for XPMCK.

If you guys don't mind testing it out for me that would be wonderful!
I've also only got about a year of java under my belt so this is good practice for me, fixing it and whatnot.

Here's how to set it up

Go ahead and make a directory called "ftm2mml_workspace" or something memorable.
Download and extract xpmck into there along with the .class files
(now it looks like this
Download and extract WLA DX (wla-gb.exe and wlalink.exe) into /demo/gbc/
direct link to the correct binaries:
(if you don't have windows, make sure to build version 9.4)

Ok so formatting your FTM properly

note: you must use 0.4.2 (hi plrusek)

Since MML is all about macros, you have to make your instruments solely based off of macros. No effects or volume column. Only instruments (it's gonna look bare but this was the only way I could do it) I do plan for certain effects in the future though, namely Fxx (tempo only) and Bxx / Dxx. I have some code written for it, but it's a work in progress.

Volume macros will not work on triangle, eg { 15 15 15 0 } is invalid, (it will be ignored) I'm currently working on something that will hopefully fix that.

When doing arpeggios, make sure you set the mode to relative and make sure if it doesn't loop, to put a 0 at the end or else it will keep repeating the last arp value.

Note cuts and Note off (envelope releases) /should/ work fully

No effects means no Vxx, you need to do that in the macro editor in famitracker.

To get the tempo correctly, make sure you're set to speed 3.

Since the noise range is much wider on the gameboy, what you hear in famitracker (for the noise channel) is not what's going to be in the output file. If you prefer the noise pitches more like the famicom, squeeze your range of notes towards the middle.

To build the mml file, make sure you have a command line open in the same directory as the class files and type in
"java FTM2MML ftmTextExportInputFile.txt outputFileName.mml"
(make sure you have java 8 installed!)

take this mml file and move it to /demo/mml/

cd to demo/gbc and run "mkgbs outputFileName" (notice the lack of .mml)

if all goes well, your gbs file should be called outputFileName.gbs

Here's an example FTM to try it on
and here's the GBS file that came from it

A little something to tak on the end here, while the program does an okay (?) job of optimizing, it's not perfect. After just a couple of frames/patterns it will run out of space in the bank. However, in the asm file that's generated by the batch file, I think there's a way to switch banks (or whatever it's called, never really looked into it) to make the file fit to size. If you know how to do this let me know please!

anyways, hope my programming endeavours are at least somewhat interesting.
Level 18 Chipist
post #48475 :: 2014.10.09 9:52am
Oh my go...

Can't test this atm but still... oh my...
Level 14 Chipist
post #48479 :: 2014.10.09 12:46pm :: edit 2014.10.09 12:47pm
  Savestate liēkd this
This sounds super radical! I'm really excited to hear this, and I'm probably going to use it for a bunch of my GB-esque tracks!

I have three questions, though. Can we get a mirror link? Your site seems to be down. I was also wondering if using a Namco channel would be better for conversion than using the triangle channel. Not only because it can use the volume column with a wide rande of volumes (just use 0, 3, 7[8?] and F) but also because it has the ability to use 32-block waveforms like gameboy, which I believe can be directly converted.

Finally, I was also curious why volume shouldn't be controlled with Axx and the volume column, as opposed to using instrument envelopes. The gameboy must use a single volume envelope (or direct volume write) whenever a note is triggered, and Axx is probably your best bet for achieving that kind of sound.

Regardless, thank you so much for the awesome program! I'm really glad that something like this exists now, and I've been wanting to use one for a while!
Level 29 Chipist
post #48480 :: 2014.10.09 12:55pm :: edit 2014.10.09 12:56pm
Hm, that does make more sense, using the namco over being forced to use a triangle. (and you could switch waveforms) As for using Axx, that would mean completely disregarding volume macros, since volume macros are actually an exploit in the gameboy's hardware that aren't compatible with the Axx type volume envlopes. If you think that would be more useful than volume macros I would be more than happy to get that working.
Level 27 Chipist
post #48481 :: 2014.10.09 1:37pm :: edit 2014.10.09 1:51pm
You should hook up with slimeball - he's done some lots of work on converting the other way round - gbs to ftm - and would probably have some good knowledge to share. I think he went down the route of mmc5 expansion for converting wave channel.

link to his gbs import;
Level 27 Renderist
post #48492 :: 2014.10.09 5:55pm :: edit 2014.10.09 5:55pm
@gotoandplay: N163 actually.
Level 29 Chipist
post #48494 :: 2014.10.09 6:16pm
  Potentialing liēkd this
I don't know if slimeball's program would be of a lot of help here. He went from .gbs (the compiled gameboy file) to .FTM which is kinda irrelevant to FTM Text Export to MML.

Anyways, I'm currently rewriting it to use Axx/Volume column cause I've found that I use that a lot more (and it's quicker to use) and instead of a triangle channel, it's gonna use the Namco 1 Channel for the wave.

Thanks for the feedback everyone!
Level 14 Chipist
post #48496 :: 2014.10.09 8:00pm
I'm really happy to hear that! I am wondering if it'll still be possible to use the arpeggios in the instrument table? That would be useful especially for noise snares.

Thanks a bunch for this! I'm super excited for this update. :D
Level 29 Chipist
post #48497 :: 2014.10.09 8:03pm
  Potentialing liēkd this
All the other macros will be available except for volume! that means duty, pitch, arps are all still good. (not hi-pitch because wtf is that even)
Level 24 Chipist
post #48547 :: 2014.10.11 4:57am :: edit 2014.10.11 4:07pm
  Savestate and plrusek liēkd this
hi-pitch is <<4 of pitch
Level 20 Criticist
post #48584 :: 2014.10.12 5:11pm
Which java 8 is needed? There seem to be many.

Also, I request that it be called ftm2xpmck as xpmck is not the only mml dialect nor the only mml dialect that supports gameboy. This would be confusing if one were to make a program/script that converts to, say mgsdrv mml for exporting to the SCC chip on an MSX or even just ftm to ppmck mml.
Level 14 Chipist
post #48585 :: 2014.10.12 5:42pm
  Apsarah and plrusek liēkd this
please make it convert ftm2ppmck

your name will be sung throughout the chiptuning universe alongside that of jsr
Level 20 Criticist
post #48586 :: 2014.10.12 5:58pm
  Apsarah liēkd this
Please get in contact with me if you wish to persue that since I've been creating/collecting documents to achieve that
Level 29 Chipist
post #48587 :: 2014.10.12 7:04pm
  kfaraday and Potentialing liēkd this
digitalpcock, I don't know if I would be able to do that, but when I finish this and release the source, someone can try to adapt my method of doing this to convert to ppmck.

xyz, you're right about the name, I'm changing that definitely.

Update on what's been going on

I've found another GBS MML compiler called GBMC

It's much more featured than XPMCK (even has PCM!) and I'm rewriting my program to use it instead. I'm also going over the documentation and translating it all to English for my (and anyone else who wants to use it) sanity.

The newest Java 8 Runtime from Sun's website will work

Also, the project will be renamed to ftm2gbmc for clarity's sake

It's a big project for my first real project so it's gonna take some time! x:
Level 17 Chipist
post #60993 :: 2015.11.17 6:11pm
Level 0 n00b
post #112684 :: 2019.07.15 5:31pm
  Quirby64 liēkd this
If you still have FTM2MML lying around could you please put that on github, too?
Your link is dead.
Level 29 Chipist
post #112711 :: 2019.07.16 5:09pm :: edit 2019.07.16 5:09pm
  raphaelgoulart liēkd this
Level 29 Chipist
post #112717 :: 2019.07.16 5:46pm
also, every gbs except for my 1st two were made with ftm2gbmc if you're looking for refs
Level 27 Chipist
post #112723 :: 2019.07.17 4:57am
  RazerBlue6, Savestate and Oli liēkd this
Oli, ever since shut down, a lot of stuff from that service has been moved to another server.

LOGIN or REGISTER to add your own comments!