#iphone #objective-c #ios
#iPhone #objective-c #iOS
Вопрос:
Я проигрываю звуковой файл:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayback error:nil];
NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/recordTest.caf", [[NSBundle mainBundle] resourcePath]]];
NSError *error;
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:amp;error];
audioPlayer.numberOfLoops = 0;
[audioPlayer play];
sliderUpdater = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0
target:self
selector:@selector(sliderUpdateTimer)
userInfo:nil
repeats:YES];
Итак, звук воспроизводится, и я запускаю NSTimer, вызывающий мой метод sliderUpdateTimer.
Итак, метод заключается в
- (void) sliderUpdateTimer
{
NSLog(@"Dur: %f",audioPlayer.duration );
NSLog(@"Cur: %f",audioPlayer.currentTime );
[seekSlider setValue:100 * (audioPlayer.duration) / (audioPlayer.currentTime)];
}
Длительность и текущее время оба кажутся равными 0.
Какую часть этого я делаю неправильно?
AudioPlayer.duration и currentTime возвращают NSTimerInterval, который, как я полагаю, является двойным.
Большое спасибо, -Code
Комментарии:
1. Я тоже никогда не мог заставить работать этот дурацкий слайдер, я пытался использовать его в игре, но он никогда не обновлялся корректно. В итоге я использовал функцию рисования — (void), чтобы создать свой собственный индикатор выполнения.
Ответ №1:
Эти комбинации отлично сработали для меня,
-(IBAction)playAction
{
paused = NO;
[audioPlayer play];
audioSlider.maximumValue = [audioPlayer duration];
audioSlider.value = 0.0;
[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateTime:) userInfo:nil repeats:YES];
}
- (void)updateTime:(NSTimer *)timer
{
audioSlider.value = audioPlayer.currentTime;
audioTimer.text = [NSString stringWithFormat:@"%d", audioSlider.value];
}