このアプリケーションでは、オーディオを処理するために作業しています。サウンドカードに送信するすべてのデータを含むバッファがあります。これをVUメーターとしてプロットする最良の方法について誰かが何か提案しているのだろうかと思っていましたか?違いがあれば、私はJavaを使用しています。私が見た例のほとんどは、物理的なVUメーターのためのものでした。オーディオバッファからVUメーターを作成する
編集:私は、任意の点、私の答えは非常に大まかバッファの絶対値のリーキー積分を計算している何
このアプリケーションでは、オーディオを処理するために作業しています。サウンドカードに送信するすべてのデータを含むバッファがあります。これをVUメーターとしてプロットする最良の方法について誰かが何か提案しているのだろうかと思っていましたか?違いがあれば、私はJavaを使用しています。私が見た例のほとんどは、物理的なVUメーターのためのものでした。オーディオバッファからVUメーターを作成する
編集:私は、任意の点、私の答えは非常に大まかバッファの絶対値のリーキー積分を計算している何
でオーディオバッファの容量を取得する方法を見つけ出す必要があります。 一般に、50%の値は、デジタルオーディオがポスト音圧とネガティブ音圧の両方を再生する必要があるため、「オフ」です。あなたがこれを取得しない場合は、デジタルオーディオに関するウィキペディアの記事を参照してください。
リアルVUミーサーは、信号振幅の漏れ積分器です。 (ガルバノメータまたは電気的VUメータチップの入力抵抗が十分に高い場合は、単純なバッファとコンデンサで十分です)
したがって、16ビットのサンプルの場合、コードは次のようになります.... )
//set up
long total=0;
const long half = 32768; //2^(n-1)
const long decayInMilliseconds=30; // 30ms for the needle to fall back to zero.
// leak rate is enough to get the reported signal to decay to zero decayMilliseconds after
// the actual amplitude goes to zero.
int leakRate = (sample_rate*1000 /decayInMilliseconds) * half;
// goes in a loop to do the work
// can be executed on buffer-loads of data at less than the sampling rate, but the net number of calls to it persecond needs to equal the sampling rate.
int amplitude = buffer[i]-half;
total = total + abs(amplitude);
total = total - leakRate;
if(total > half) {
total = half;
}
//total is the current "vu level".
通常、合計値は対数目盛で表示されます。