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

Ios AVAudioPlayer返回音频文件的错误持续时间,ios,iphone,audio,duration,amr,Ios,Iphone,Audio,Duration,Amr,我正在尝试在我的应用程序中播放音频文件,我想显示播放文件的进度 文件完全播放,但我无法获得要显示的文件的正确持续时间。返回的值远低于实际持续时间。例如,4秒音频文件返回1秒,41秒音频文件返回9秒 请不要说它在播放时只返回正确的值,因为我也尝试过,但它没有。我总是用AVAudioPlayer duration方法为任何文件获得1秒的时间,我通过AVURLAssets尝试了这个解决方案,我得到的是奇怪的9秒,而不是41秒 AVAudioPlayer还有另一个问题。它播放文件,但同时其isplay方

我正在尝试在我的应用程序中播放音频文件,我想显示播放文件的进度

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

请不要说它在播放时只返回正确的值,因为我也尝试过,但它没有。我总是用AVAudioPlayer duration方法为任何文件获得1秒的时间,我通过AVURLAssets尝试了这个解决方案,我得到的是奇怪的9秒,而不是41秒

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

我不知道这是否有什么区别,但我的音频文件是AMR文件

非常感谢您的帮助。谢谢


****更新:我尝试了其他文件,效果很好,所以现在,我需要获得AMR音频文件的持续时间****

下面的代码可能会帮助您获得正确的进度

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;
}

谢谢分享。但是我需要一些可以处理.AMR文件的代码。