2016-03-29 7 views
-1

Wie kann ich Zeit sparen, wenn Audio in der Sitzung gestoppt wurde und die Wiedergabe vom Haltepunkt in der nächsten Sitzung fortsetzen?Wie speichern Sie die Position der Audiodatei? -Objektiv -C

Mein Code:

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

Antwort

0

hilft können Sie AVPlayer die Eigenschaft current verwenden. Es gibt die Wiedergabezeit des aktuellen AVPlayerItems zurück.

die Wiedergabezeit in der nächsten Sitzung wiederherzustellen, können Sie die gespeicherte Zeit AVPlayer des seekToTime passieren:

[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

die cmtime von current zurück zu beharren, Sie kann die von NSValue bereitgestellten AVFoundation-Komfortmethoden verwenden.

Um cmtime in einer NSValue zu wickeln, verwenden valueWithCMTime:

[NSValue valueWithCMTime:player.currentTime]; 

Um eine cmtime Struktur vom beibehaltenen Wert, Nutzung zu erhalten:

CMTime persistedTime = [storeValue CMTimeValue]; 

Nachdem Sie die cmtime Struktur in einer NSValue Instanz eingewickelt Sie können den Schlüssel-Archiver & NSData verwenden, um die Zeit auf die Festplatte zu schreiben.

NSHipster hat einen guten Artikel zu diesem Thema: http://nshipster.com/nscoding/

+0

Ich benutze 'cmtime Time = _audioPlayer.currentTime // die aktuelle Time' Remember ' [self.player seekToTime: Zeit]; // transient' Aber es funktioniert nicht. Warum? – user

0

Die einfachste Art und Weise wird eine lokale db mit dem Song-Namen zu halten sein und wenn er gestoppt wird, dass die Daten an die DB hinzuzufügen. Wenn die Wiedergabe später fortgesetzt wird, überprüfen Sie zuerst die lokale Datenbank, wenn sie Einträge in der Vergangenheit enthält. Wenn nicht, fange weiter an.

Stellen Sie außerdem sicher, dass nach Abschluss des Songs kein Eintrag erfolgt.

Hoffnung diese Idee Sie ...