0

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

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

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

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

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

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

**** 更新:我尝试使用其他文件,它工作正常,所以现在,我需要获取 AMR 音频文件的持续时间 ****

4

1 回答 1

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;
}
于 2014-07-02T10:03:09.390 回答