我试图在我的应用中播放音频文件,我想显示播放文件的进度。
文件完全播放但我无法获得正确的文件持续时间。返回值远低于实际持续时间。例如,对于4秒的音频文件,它返回1秒,对于41秒的音频文件,则返回9秒。
请不要说它只在播放时返回正确的值,因为我也尝试了它并且它没有。对于使用AVAudioPlayer
持续时间方法的任何文件,我总是得到1秒,我通过AVURLAssets
尝试了解here我得到了奇怪的9秒而不是41!
AVAudioPlayer
还有另一个问题。它播放文件但同时其isPlaying
方法返回NO
我不知道它是否有任何区别,但我的音频文件是AMR文件。
非常感谢任何帮助。感谢。
****更新:我和其他文件一起尝试,它的工作很精细,现在,我需要获得AMR音频文件的持续时间****
答案 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;
}