1

200 ミリ秒ごとにサウンド (メトロノーム) が再生されるという単純で古典的なステートメントがあります。

Handlers を使用して記述し、次に別の方法で Threads を使用して記述しました。問題はどちらの方法でも同じです。ハードウェアのホーム ボタンを押すか、単純にボタンを押して ListView を開くと、メトロノームがしばらくの間ひどく遅くなります。

この問題 (それほど強力ではありませんが、存在します) は、何もせずにアプリケーションをフォアグラウンドのままにすることも示しています。

何か案は?

コードは次のとおりです。

public class Metronome は Runnable を実装します{

private Handler mHandler = new Handler();
public static long mStartTime;

Main mainContext; 

public Metronomo(Main context) {
    mainContext = context;
}


public void play() {
    mStartTime = System.currentTimeMillis();
    mHandler.postDelayed(this, 100);
}

public final void stop(){
    mHandler.removeCallbacks(this);
}

public void run(){
        //play the ogg file in position 1
        mSoundManager.playSound(1);

        //reschedule the next playing after 200ms
        mHandler.postAtTime(this, SystemClock.uptimeMillis() + 200);
   }

};

4

3 に答える 3

0

ある種の一時停止ステートメントを使用してビート間を待機していますか? 代わりに、システムクロック値の倍数に基づいてタイミングを試すことができます。こうすることで、遅く発生する (またはまったく発生しない) ビートを取得できますが、速度が低下することはありません。それが何らかの意味を成すことを願っています。

これはコメントのようなものですが、まだコメントを残すのに十分な担当者がいません。

于 2010-10-27T18:12:54.607 に答える
0

私の電話は、サウンドを表現するかなりコンパクトな方法である midi ファイルを再生できるようです。おそらく動的に作成してメトロノームに使用できますか? タイミングを良くするために、合成は通常アクセスできるレベルよりも低いレベルで処理されていると思いますが、実際にはわかりません。

于 2010-10-27T18:16:29.430 に答える