
Playing Fasttracker2 .XM files in JavaScript - JoachimS
http://www.a1k0n.net/2015/11/09/javascript-ft2-player.html
======
themodelplumber
Oh man. Huge flashback to downloading FastTracker 2 back in '93, excitedly
hitting "play" on e.g. Chillzone.xm by Norfair (edit, actually that tune
wasn't released yet in '93, but there were so many great tunes) and seeing 32
waveforms going at the same time, sending amazing sounds through the Pro Audio
Spectrum 16 I had gently installed in my ZEOS 486 DX/2 66 MHz.

Amazing to see it all there in JS today...wow. Thanks for sharing the article.

(Wait...where is Nibbles?)

~~~
onyxraven
Makes me wonder if ScreamTracker3 is doable too.

~~~
a1k0n
Of course it is. It's actually a lot easier, as there are no envelopes and
just one sample per instrument. Firehawk/TDA wrote this excellent player a
while back:
[http://mod.haxor.fi/Purple_Motion/2nd_pm.s3m](http://mod.haxor.fi/Purple_Motion/2nd_pm.s3m)

~~~
camperman
Damn, that playback is as good as I used to get on the old GUS.

------
rzzzt
Works great in Chrome without underruns.

(Is ScriptProcessorNode here to stay, though? Mozilla's documentation marked
the feature as deprecated for quite some time now [1], suggesting the use of
Audio Workers instead; in turn, the same documentation states that these are
not yet implemented in any browser. At some point I got very confused about
the one true way of generating audio using Javascript.)

[1] [https://developer.mozilla.org/en-
US/docs/Web/API/ScriptProce...](https://developer.mozilla.org/en-
US/docs/Web/API/ScriptProcessorNode)

~~~
a1k0n
It got renamed from JavaScriptNode to ScriptProcessor when it switched from
webkitAudioContext to AudioContext, and it seems to be the best-supported way
to do it. I don't see why not. But of course IE doesn't support it at all and
I don't think iOS Safari does either (it's a big question mark on mozilla.org
anyway)

~~~
greggman
iOS safari supports it just fine and has since it first came out.

[http://games.greggman.com/game/html5-bytebeat/](http://games.greggman.com/game/html5-bytebeat/)

The issue on mobile is you can only start playback of sounds in a user gesture
event and I think on iOS the first sound can't be a ScriptProcessorNode (maybe
that bug was fixed). I just play an oscillator for a moment to get things
started. Once the first note is played it just all works.

I'd be surprised if they removed it at this point. Many many pages use it.
Many many native->emscripten apps use it. I think just no one has updated MDN
in a while. Unity->HTML5 uses it. Unreal->HTML5 uses it. Pico8->HTML5 uses it.
Voxatron->HTML5 uses it.

~~~
a1k0n
edit: THANK YOU! That was the issue; I had to make a dummy oscillator. And,
separately, there was a CSS issue which made the buttons black on black. Now
it works on iOS.

------
sjs382
This is awesome. I'm going to incorporate this into
[http://Artpacks.org](http://Artpacks.org) soon, if you don't mind!

Now, only if there was a reliable JavaScript RIPScript interpreter. :)

~~~
a1k0n
Haha, sure, let me push some fixes to the github repo.

RIP script, OMG. I remember that. With HTML canvas, shouldn't be too hard,
though it would be weirdly high-resolution.

~~~
carl8
I tried writing a RIPscript generator in javascript a few years ago. I thought
it would be easy, but it's surprisingly not.

It's unfinished, but here it is if you'd like to try it out:
[http://carl.gorringe.org/pub/code/javascript/RIPview/ripview...](http://carl.gorringe.org/pub/code/javascript/RIPview/ripview.html)

------
0x4a42
Fasttracker was the program that made me understand I have not talent at all
to compose music. :)

------
fapjacks
Oh wow I spent so many nights playing and making MODs and chatting with my
other nerd friends on BBSes of the day trying to share knowledge. This is
truly a much-appreciated work of art! On another note, I think the people
commenting in this thread would be really great together in a room somewhere
with beer and computers. It's a very specific cross-section of both a skillset
and a point in time.

------
dogprez
Awesome, fasttracker 2 and qbasic were the most formative programs of my
youth. I'll upvote anything to do with fasttracker 2 all day.

------
errozero
Great work. Nice smooth visuals too. Could you implement a html5 file reader
to load any .xm file?

~~~
a1k0n
Yep. Just added drag-and-drop to the player window; drag a local .xm file onto
it to load it. Only tested in Chrome.

------
ryanmarsh
OMG spent so many hours late at night in my teens on FastTracker 2. This is
incredible. Now I'll have to dust off those floppies.

------
abrkn
So... Nibbles?

~~~
a1k0n
Sorry, haven't worked that in yet...

