私はレコーディングアプリケーションのためのエミュレートされたアナログVUメーターを作り、すべてが正しく接続され、1つの面を除いて私が期待したように動作しています。 VUメーターのwatch this 13-second videoが動作していると、針が場所全体に跳ね返ることがわかります。実際のVUメーターではどうなるでしょうか。私が探しているものの例については、Appleの "Voice Memos"アプリを試してみてください。もっと現実的なアナログVUメーターのオーディオレベルメーターを滑らかにすることはできますか?
私のロジックは、これまでは簡単です:基本的に
#define VU_METER_FREQUENCY 1.0/5.0
- (void)someMethod {
_updateTimer = [NSTimer
scheduledTimerWithTimeInterval:VU_METER_FREQUENCY
target:self
selector:@selector(_refresh)
userInfo:nil
repeats:YES];
}
- (void)_refresh {
// if we have no queue, but still have levels, gradually bring them down
if (_delegate == nil) {
CFAbsoluteTime thisFire = CFAbsoluteTimeGetCurrent();
// calculate how much time passed since the last draw
CFAbsoluteTime timePassed = thisFire - _peakFalloffLastFire;
needleValue = needleValue - timePassed * VU_METER_LEVEL_FALL_OFF_PER_SECOND;
if (needleValue < VU_METER_MIN_DB) {
needleValue = VU_METER_MIN_DB;
TT_INVALIDATE_TIMER(_updateTimer);
}
_peakFalloffLastFire = thisFire;
} else {
prevNeedleValue = needleValue;
needleValue = [_delegate currentDB];
}
[self updateNeedle];
}
- (void)updateNeedle {
[UIView beginAnimations:nil context:NULL]; // arguments are optional
[UIView setAnimationDuration:VU_METER_FREQUENCY];
[UIView setAnimationCurve:(needleValue > prevNeedleValue ? UIViewAnimationCurveEaseOut : UIViewAnimationCurveEaseIn)];
CGFloat radAngle = [self radianAngleForValue:needleValue];
self.needle.transform = CGAffineTransformMakeRotation(radAngle);
[UIView commitAnimations];
}
、私はセットアップがVU_METER_FREQUENCY
で実行され、それは針が高く保つことが優先である緩和でUIViewのアニメーションを使用して、針の回転を更新するタイマー。私はベンチマークを可能な限りAppleのアナログVUメーターに近づけて、これをどうにかしてより滑らかな針を提供するように調整する方法を探しています。 needleValue
を取得するには、私はAudioQueue
のmAveragePower
を使用しており、currentDB
が呼び出されるたびにそれを照会しています。どうすればこれを平滑化できますか?
radianAngleForValue:needleValue:メソッドを私と共有してもらいたいと思います。私はVUメーターを稼働させようとしていますが、それはうまく動作しません。 –
角度はあなた自身の実装に非常に特有です。ニードルの長さとスケールに依存しますが、これは値を表示するために作成した画像によって決まります。私は、必要な複数の方程式を解き、セットアップでこの関数に必要な値を取得するために、紙でそれを試してみるまでにある程度時間がかかりました。このリンクは、自分で設定する方法を決定する際に役立ちました:http://neolit123.blogspot.com/2009/03/designing-analog-vu-meter-in-dsp.html#hcon – coneybeare
ありがとうございます私はそれを把握するのに役立ちます。眠れない週末、ここに来る!現時点では、私は横に動く針を備えたVUメーターを馬鹿にして実装していますが、ちょっとしたことですが、実際のVUメーターが必要です。 –