我想基于UIImageView
的peakPowerForChannel为AVAudioPlayer
中的png图像的alpha设置动画。我没有任何错误或崩溃,但它没有工作。以下是(我相信)我的ViewController代码的相关部分:
·H
@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
@property(getter = isMeteringEnabled) BOOL meteringEnabled;
@property (weak, nonatomic) IBOutlet UIImageView *mouthMeter;
- (void)updateMouthMeter:(id) sender;
的.m
- (void)viewDidLoad{
...
self.meterTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(updateMouthMeter:) userInfo:NULL repeats:YES];
}
-(void)updateMouthMeter : (id)sender {
[self.audioPlayer updateMeters];
float level = [self.audioPlayer peakPowerForChannel:0];
[UIView beginAnimations:nil context:NULL];
self.mouthMeter.alpha = level;
[UIView commitAnimations];
}
我认为我的问题在于AVAudioPlayer
输出0.0dB的最大值和-160dB的MIN,我需要处理这个输入,以便它输出一个适合的浮点数(0.0到1.0) alpha通道。
关于我如何做到这一点的任何建议?它可以包含在上面的updateMouthMeter方法中吗?
答案 0 :(得分:0)
这已经演变为NSTimer的问题并更新了UIAnimations。我的ViewController中有2个NSTimers:其中一个 sliderTimer ,以1.0(1秒)的间隔更新进度滑块。另一个, meterTimer ,更新UIView中的alpha通道的UIAnimation。 sliderTimer 似乎干扰了 meterTimer 。
在模拟器中,它会在我的动画和日志中创建一个闪烁效果。每秒钟顶部浮点数的重复峰值。这是我的代码的相关部分:
.h文件
@property (weak, nonatomic) IBOutlet UIImageView *mouthMeter;
- (void)updateSlider:(id) sender;<br/>
- (void)updateMouthMeter:(id) sender;
.m文件
- (void)viewDidLoad{
....
self.sliderTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateSlider:) userInfo:NULL repeats:YES];
self.meterTimer = [NSTimer scheduledTimerWithTimeInterval:0.01 target:self selector:@selector(updateMouthMeter:) userInfo:NULL repeats:YES];
}
-(void)updateSlider : (id)sender {
//Update progressSlider about the music time
self.circularSliderPlayback.value = self.audioPlayer.currentTime;
}
-(void)updateMouthMeter : (id)sender {
[self.audioPlayer updateMeters];
float level = [self.audioPlayer peakPowerForChannel:0];
float alphaLevel = ((level * -1.0)/160);
NSLog(@"this is the alphaLevel %f",alphaLevel);
[UIView beginAnimations:nil context:NULL];
self.mouthMeter.alpha = alphaLevel;
[UIView commitAnimations];
}
我是iOS编程的新手,在同一个.m文件中有2个NSTimers是完全禁止的吗?我有什么选择摆脱 sliderTimer 的脉冲效果?
另外,我注意到 sliderTimer 也影响正在播放的音频..那里每秒钟都会快速停顿。什么在进行?