AVAudioPlayer返回音频文件的错误持续时间

时间:2014-06-29 09:54:48

标签: ios iphone audio duration amr

我试图在我的应用中播放音频文件,我想显示播放文件的进度。

文件完全播放但我无法获得正确的文件持续时间。返回值远低于实际持续时间。例如,对于4秒的音频文件,它返回1秒,对于41秒的音频文件,则返回9秒。

请不要说它只在播放时返回正确的值,因为我也尝试了它并且它没有。对于使用AVAudioPlayer持续时间方法的任何文件,我总是得到1秒,我通过AVURLAssets尝试了解here我得到了奇怪的9秒而不是41!

AVAudioPlayer还有另一个问题。它播放文件但同时其isPlaying方法返回NO

我不知道它是否有任何区别,但我的音频文件是AMR文件。

非常感谢任何帮助。感谢。

****更新:我和其他文件一起尝试,它的工作很精细,现在,我需要获得AMR音频文件的持续时间****

1 个答案:

答案 0 :(得分:0)

以下代码可帮助您在滑块

上获得正确的进度
NSURL *soundFileURL = [NSURL fileURLWithPath:path];
NSError *error;
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:&error];
_sliderSong.maximumValue = _audioPlayer.duration; //_sliderSong is a UISlider property
_sliderSong.value = 0.0; //_audioPlayer is a AVAudioPlayer property
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];

if (error)
{
    NSLog(@"Error in audioPlayer: %@",
          [error localizedDescription]);
} else {
    _audioPlayer.delegate = self;
    [_audioPlayer prepareToPlay];
    [_audioPlayer play];
}
}
- (IBAction)slide { //called when we drag the slider explicitly (we have to bind it with slider) 
    _audioPlayer.currentTime = _sliderSong.value;
}
- (void)updateTime:(NSTimer *)timer { //slider updation
    _sliderSong.value = _audioPlayer.currentTime;
}