2016-03-29 1 views
-1

Как сэкономить время, когда звук был остановлен в сеансе и продолжить воспроизведение с точки останова в следующем сеансе?Как сохранить положение аудиофайла? object -C

Мой код:

- (void)initPlayer:(NSString*) audioFile fileExtension:(NSString*)fileExtension 
{ 

NSURL *audioFileLocationURL = [[NSBundle mainBundle] URLForResource:audioFile withExtension:fileExtension]; 
NSError *error; 
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileLocationURL error:&error]; 

if ([audioFile isEqualToString:@"2"]) { 
    _index = 1; 
} 
else if ([audioFile isEqualToString:@"3"]) { 
    _index = 2; 
} 

[self song]; 

} 
- (void)playAudio { 
[self.audioPlayer play]; 


} 

- (void)pauseAudio { 
[self.audioPlayer pause]; 

} 
- (BOOL)isPlaying { 
return [self.audioPlayer isPlaying]; 
} 
-(NSString*)timeFormat:(float)value{ 

float minutes = floor(lroundf(value)/60); 
float seconds = lroundf(value) - (minutes * 60); 

int roundedSeconds = lroundf(seconds); 
int roundedMinutes = lroundf(minutes); 

NSString *time = [[NSString alloc] 
        initWithFormat:@"%d:%02d", 
        roundedMinutes, roundedSeconds]; 
return time; 
} 
- (void)setCurrentAudioTime:(float)value { 
[self.audioPlayer setCurrentTime:value]; 
} 
- (NSTimeInterval)getCurrentAudioTime { 
return [self.audioPlayer currentTime]; 
} 
- (float)getAudioDuration { 
return [self.audioPlayer duration]; 
} 

ответ

0

Вы можете использовать свойство CURRENTTIME AVPlayer в. Он возвращает время воспроизведения текущего AVPlayerItem.

Чтобы восстановить время воспроизведения на следующей сессии, вы можете передать сохраненное время seekToTime AVPlayer в:

[self.player seekToTime:storedPlaybackTime]; 

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVPlayer_Class/index.html#//apple_ref/doc/uid/TP40009530-CH1-SW2

https://developer.apple.com/library/mac/documentation/AVFoundation/Reference/AVPlayer_Class/index.html#//apple_ref/occ/instm/AVPlayer/seekToTime%3a

Чтобы сохраняться CMTime возвращенных CURRENTTIME, вам могут использовать удобные методы AVFoundation, предоставляемые NSValue.

Завернуть CMTime в NSValue, используйте valueWithCMTime:

[NSValue valueWithCMTime:player.currentTime]; 

Чтобы получить CMTime-структуру из сохраняемого значения, используйте:

CMTime persistedTime = [storeValue CMTimeValue]; 

После завернула-структуру CMTime в экземпляре NSValue , вы можете использовать ключ-архиватор & NSData для записи времени на диск.

NSHipster имеет хорошую статью об этой теме: http://nshipster.com/nscoding/

+0

Я использую 'CMTime Time = _audioPlayer.currentTime // запоминает текущую time' ' [self.player seekToTime: время]; // transient' Но это не работает. Зачем? – user

0

Самый простой способ будет держать локальную БД с названием песни, и когда он остановлен добавить, что данные в БД. Затем, когда воспроизведение возобновляется позже, сначала проверьте локальный db, если у него есть записи в прошлом. Если не продолжить с начала.

Также убедитесь, что запись не выполнена, если песня заканчивается.

Надежда эта идея поможет вам ...

 Смежные вопросы

  • Нет связанных вопросов^_^