タイマーを使用することはこれには悪い考えです、そこで私はそれを言いました...
問題は、タイマーにドリフトがあり、数ミリ秒後に起動することです。500 ミリ秒ごとに実行されるタイマーがある簡単なテストを試してから、getTimer()
カウントを比較します。私が実験で見つけたのは、タイマーが継続的にオフになっていて、自動修正されていないように見えることです。前回の実行からの差に基づいて発射時間を変更する自己修正タイマーを使用してみましたが、getTimer()
それでも信頼できません。プロセッサの負荷が上がると、タイマーはとにかくオフになります。
これを処理する正しい方法は、サウンドのソースとして byteArray データを使用することです。サンプリング解像度の計算に基づいて、事前にストリームにデータを入力することができ、サウンドはほぼ確実に時間どおりに再生されます。私は自分でこれを行うものを作成するまでには行っていません。ただし、これに役立つライブラリがいくつかあります。
私の上位 2 つのデクリメント ライブラリは SiON と tonfall です
SiON のサンプルはhttp://wonderfl.net/c/qf4b
で、tonfall のサンプルはhttp://tonematrix.audiotool.com/で見ることができます。
私はAndroidでそれらを試していませんが、どちらもうまくいくと思います