2013-03-11 6 views
5

Ich weiß, dass mehrere Fragen zum gleichen Thema existieren, aber nachdem ich this one's Vorschläge verfolgt habe, stoße ich auf ein paar Probleme.Wie loopiere ich die Warteschlange von Sounds in AVQueuePlayer?

Ich habe alles eingerichtet, aber ich bekomme jedesmal, wenn ich kMTTimeZero benutze, Fehler.

soundQueue = [AVQueuePlayer queuePlayerWithItems:soundEmotions]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(playerItemDidReachEnd:) 
               name:AVPlayerItemDidPlayToEndTimeNotification 
               object:[soundEmotions lastObject]]; 

Hier ist was ich getan habe.

- (void)playerItemDidReachEnd:(NSNotification *)notification { 
    // Do stuff here 
    NSLog(@"End has been reached."); 

    // Set it back to the beginning 
    [soundQueue seekToTime:kCMTimeZero]; 

    //Replay 
    [soundQueue play]; 

} 

ERROR: Undefined symbols for architecture armv7: "_kCMTimeZero", referenced from: -[ViewController playerItemDidReachEnd:] in ViewController.o ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

Antwort

17

kCMTimeZero ist ein Symbol in dem CoreMedia.framework, daher müssen Sie diesen Rahmen auf die "Link-Binary mit Bibliotheken" in dem "Build Phases" Ihr Ziel hinzuzufügen.

+0

Thank you! Ich habe das Framework hinzugefügt und es funktioniert gut, aber aus irgendeinem Grund wird der Sound nicht wiederholt. Mache ich es nicht richtig? Vielen Dank! – KingPolygon

+0

Ich habe es herausgefunden! Trotzdem danke! – KingPolygon

+0

@KingPolygon, was hast du getan, um die AVQueuePlayer-Schleife zu erstellen? – Raphael

0

ich diesen Ansatz bin mit letzten Punkt beobachten und dann seek to kCMTimeZero

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 

     if keyPath == "currentItem" { 

      print("Next Track...", currentTrackIndex) 

      if currentTrackIndex > 0 { 
       self.isPlaying = true 
      } 

      currentTrackIndex += 1 
      if currentTrackIndex > playerQueue.items().count { 
       currentTrackIndex = 0 
       playerQueue.seek(to: kCMTimeZero) 
      } 
     } 
    } 

Und dann

private func observeTrackChanged(of player : AVQueuePlayer) { 

     player.addObserver(self, forKeyPath: "currentItem", options: .new, context: nil) 
    } 
Verwandte Themen