メトロノーム一段落

先日、d:id:imait:20090622のAcitonScriptで作るメトロノームは、結局スレッドは使わず、相変わらずsetInterval()に頼ることにしました。けれど今回は、1ミリ秒ごとに時刻を確認する関数を呼び出し、それでタイミングをはかってメトロノームのクリック音を鳴らすという方法をとりました。

多分、今の自分にはこれがベストかと思います。一応、trace()で期待されるクリック発音タイミングと、実際に鳴った時刻の差を出力させてみたところ、誤差は1/100秒以下におさえられてる、みたいです。

とりあえず、次になにかをするとしたら、メトロノームのクラスを作る、かな? わりとクラスで表現しやすいように思います。インスタンスを作って、start()メソッドで動かして、stop()メソッドで止める、ってところですかね? まあ難しくはないと思います。

でも、これは、パブリッシュしてしまったら変化がわからんよね。なんともはや。

function playUnTan() {
	if (i % time == 0) {
		seUn.play();
		i = 0;
	} else {
		seTan.play();
	}
	i++;
}

var current_time = getTimer();
var next_time = getTimer() + tempo;
function checkTime() {
	current_time = getTimer();
	if (current_time > next_time) {
		playUnTan();
		next_time = next_time + tempo;
	}
}

intId = setInterval(checkTime, 1);

一部抜粋すると、こんな感じです。