2012-05-05 18 views
4

短期間: 私は44,100回/秒で呼び出されるメソッドを持っています。私は、13781.25番目のメソッドコール(192 Beats Per Minute)で音を鳴らす必要がある状況で何をすべきかを知りたいと思います。私は、その番号を四捨五入して、13781stメソッドコールでサウンドティックを作るという選択肢があります。これは、サウンドティックを0.25thに早くしていることを意味します。このことは、0.00000566893424秒が早すぎることに相当する。メトロノーム精度アルゴリズム数学

100ティック後、確実に遅延が加算されます。何らかのスマートな回避策があります。そのような種類の遅延は、遅延が特定のポイントを超えたときに追跡されます。いくつかの数字は、トラックに再びビートを維持するには?ここで

は、これまでに以下の私のコード..です

int counter; // used to track down the amount of times the method has been called 

signalMethod(){ 
    if(counter % ceil(2,646,000/10) == 0){ //the ceil function turns the decimal point into a whole number so it can be used for analysis. but this will cut off delay.. and over time im sure it will add up.. which will cause the beats to fluctuate... 
     playSound(); 
    } 
    counter++; 
} 
+3

オーディオアプリケーションでこれを行うための標準的な方法は、最初はゼロ、ダブルTを設定することです。各サンプルを1.0/44100.0ずつ増分し、t>(60.0/192.0)かどうかを確認します。その場合は、メトロノーム機能を呼び出して、tを60.0/192.0だけ減らしてください。減少した後に残った金額は、2番目の段落で説明されている方法で正確に作用し、時間の経過とともにエラーが増加するのを防ぎます。 –

答えて

6

あなたの問題は、単に問題のもう一つの変化は、「ブレゼンハムのアルゴリズム」を取り上げ、代わりにYをインクリメント一定の傾きで描かれた線の座標れます(スロープはビート周波数になります)、ダニを放ちます。

Wikipedia on Bresenham's Algorithm

+0

ああ私は、例えば、ラインを表現するためにピクセルをスクリーンにプロットすることに関して、このアルゴリズムに精通しています。私は両方の状況でエラー累積値に対処しなければならないことを理解しています。しかし、累積誤差が刻々と変化するパターンを正確に調整するためには、累積誤差が大きい場合には時間の経過とともに刻みの精度をどのように調整すればよいかわかりません再び。 – Pavan

+0

@Pavan:提案された方法はエラー蓄積を回避します(Bresenhamsのアルゴリズムのように整数で行われる場合)。ちょっとしたジッターがありますが、あなたのビートは完璧なタイミングではありませんが、約1ミリ秒以内であれば誰も気付かないでしょう。ここでもエラー蓄積はありません。 –

関連する問題