我正在使用AVAudioplayer播放一些音频文件。我有一些控制,如前进和后退。
倒带工作正常,但前进不是。
- (void)rewind
{
AVAudioPlayer *player = _rewTimer.userInfo;
player.currentTime-= SKIP_TIME;
[_rewTimer invalidate];
_rewTimer=nil;
[self updateCurrentTime];
}
- (void)ffwd
{
AVAudioPlayer *player = _ffwTimer.userInfo;
player.currentTime-= SKIP_TIME;
[player setCurrentTime:cTime];
[_ffwTimer invalidate];
_ffwTimer=nil;
[self updateCurrentTime];
}
只要我点击前进按钮,音频文件就会从头开始播放。
我已经关注Apple的示例应用程序avTouch。
答案 0 :(得分:2)
- (void)ffwd
{
NSTimeInterval *time = [player currentTime];
time+=SKIP_TIME;
[player setCurrentTime:time];
}
做同样的倒带+
OR
- (void)ffwd{
NSTimeInterval time = avPlayer.currentTime;
time+=SKIP_TIME;
if (time > avPLayer.duration)
{
//nothing to do
}
else
[player setCurrentTime:time];
}
这个似乎是更好的方式,也适用于倒带比较0而不是持续时间
答案 1 :(得分:0)
最简单的解释是cTime
最终要么大于音频文件的总时间,要么以某种方式结束为负。两者都会导致播放器实例将其currentTime
属性设置为零。
顺便说一句,我认为在计时器的userInfo字典中使用播放器是脆弱的。除非它绝对必须嵌入到计时器中,否则我会将其移动到类的属性中,以便所有方法都可以轻松访问它。计时器仍然可以调用方法,但是在从计时器切换到计时器时,您不会冒着玩家丢失的风险。