我想在一个基于AVAudioPlayer的peakPowerForChannel的UIImageView中动画一个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,我需要处理此输入,以便它输出适合alpha通道的浮点数(0.0到1.0)。
对如何做到这一点有什么建议吗?它可以包含在上面的updateMouthMeter方法中吗?
发布于 2013-07-06 18:54:10
这已经演变成了NSTimer和更新UIAnimations的问题。我的ViewController中有两个NSTimers :其中一个sliderTimer以1.0 (1秒)的间隔更新进度滑块。另一个是meterTimer,用于更新UIView中alpha通道的UIAnimation。sliderTimer似乎正在干扰meterTimer。
在模拟器中,它在我的动画中创建了一个闪烁的效果,在日志中,每秒在顶部的浮点数中都有一个重复的峰值。以下是我的代码的相关部分:
.h file@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文件中放入两个NSTimers是完全不可取的吗?要摆脱sliderTimer的这种脉冲效应,我有哪些选择
此外,我还注意到sliderTimer也会影响正在播放的音频。每一秒都会有一个短暂的停顿。怎么回事?
https://stackoverflow.com/questions/17495216
复制相似问题