Skip to main content

Flash timing code is fail

Yesterday's test was a great success -- in that the test discovered a huge flaw in the program. Or rather, it found a huge flaw in the platform: the Timer object in Flash is horribly inaccurate.

I'm not a complete idiot -- I did some initial tests with flash before spending ten hours writing that public test. Specifically, I ensured that the clap-detection functionality was accurate enough. It wasn't perfect (my physical metronome varied by 5 ms... although to be fair to flash, it's possible that the metronome itself was varying), but it was good enough.

However, I didn't test that flash could make a light blink to within 5 ms. In retrospect, I should have. But it never occurred to me that it would be a problem.

(and yes, it took almost all my willpower to avoid using "flash" as a verb in the previous paragraph)

You can test it for yourself on your own computer: Metronome test

On my system, a modest dual-2.0 Ghz macbook running OSX 10.4.11, half the time I get a maximum delay of about 40ms, and half the time it spikes up to over 200ms. That's totally unacceptable for a metronome -- especially when I'm going to be grading students on their clapping ability. The whole point of this program, and my Master's thesis in general, is that computers can provide objective, accurate, and above all, trust-worth grading. If students can't trust that the computer grades are accurate (at least to 5%), the program will be a pathetic toy rather than an educational aid. And we have more than enough pathetic toys masquerading as educational tools (or "edutainment").

Note that the above test is only timing the Timer class. I'm not doing anything else here -- adding other stuff (like listening to claps + key presses, drawing flashing lights, etc) can only make it worse.

So what now? I can think of one last thing to try: display the metronome as an animated gif on the web page. Haxe can pass information ("remoting") to other programs. So the flash game will tell a javascript program to display an animated gif (or svg/mng, if Internet Exporer has finally caught up 1999/2001) on the HTML page.

Yeah, that's quite a bit of duct tape, even for me. But what's the alternative? Abandon 90% of potential MEAWS users by ignoring Windows? Spending a week setting up a development environment on windows so that I can compile it? Neither of those options are particularly appealing. :(

Anyway, thank you to everybody who tried the past version. I'll hopefully have this duct-tape flash+javascript+gif stuff ready for testing within 24 hours.