作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为录音应用程序构建了一个模拟Analog VU Meter,除了一个方面之外,所有内容均已正确连接并按照我期望的方式工作。如果您正在使用VU仪表,请注意odt_a,您会看到指针在整个位置弹跳,而不是真正的VU仪表会发生的情况。有关我要寻找的示例,请尝试使用Apple“Voice Memos”应用程序并查看。
到目前为止,我的逻辑很简单:
#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动画更新了针的旋转,并有缓和的倾向,这优先于保持针的高度。我正在寻找一种以某种方式进行调整以提供更平滑的指针的方法,我的基准尽可能接近苹果的模拟VU表。为了获取
needleValue
,我使用
AudioQueue
的
mAveragePower
并在每次调用
currentDB
时对其进行查询。我该如何解决?
最佳答案
我建议的一件事就是改变这一点。
#define VU_METER_FREQUENCY 1.0/5.0
if newValue>currentMeterValue
currentMeterValue = Min(currentMeterValue + 0.1, newValue);
else
currentMeterValue = Max(currentMeterValue - 0.05, newValue);
currentMeterValue += (newValue - currentMeterValue)/4.0;
关于iphone - 如何为更逼真的模拟VU表平滑音频电平表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4252695/
我是一名优秀的程序员,十分优秀!