无法在AVAudioplayer中实现前向操作

时间:2010-01-05 14:52:59

标签: iphone avaudioplayer

我正在使用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。

2 个答案:

答案 0 :(得分:2)

你可能已经完成了属性声明了 AVAudioPlayer *播放器; 在h文件中也合成了它。 现在为了前进,就这样做,

- (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字典中使用播放器是脆弱的。除非它绝对必须嵌入到计时器中,否则我会将其移动到类的属性中,以便所有方法都可以轻松访问它。计时器仍然可以调用方法,但是在从计时器切换到计时器时,您不会冒着玩家丢失的风险。