2017-09-03 4 views
0

J'ai un problème avec le lecteur de musique, quand j'ai mis en file d'attente avec les ID de magasin et appeler la méthode play() sa première piste de lecture, comment je peux le faire jouer X index de la file d'attente?MPMusicPlayerController setQueueWithStoreIDs jouant l'index?

var ids:[String] = [] 
    for song in self.queue 
    { 
     ids.append(String(song.epf_song_id)) 
    } 
    print("ids \(ids.count)") 
    applicationMusicPlayer.setQueueWithStoreIDs(ids) 
applicationMusicPlayer.play() 

Répondre

0

je l'ai trouvé peut-être la solution pour aider quelqu'un d'autre, je devrais utiliser MPMusicPlayerStoreQueueDescriptor

func playByStoreID(storeIds:[String]) 
{ 

    DispatchQueue.main.async { 
     //Prepare before play ios 10.1 and above 
     if #available(iOS 10.1, *) 
     { 

      var ids:[String] = [] 

      for i in self.queue 
      { 
       ids.append(String(i.epf_song_id)) 
      } 

      let descriptor:MPMusicPlayerStoreQueueDescriptor = MPMusicPlayerStoreQueueDescriptor(storeIDs: ids) 
       descriptor.startItemID = storeIds[0] 

      self.applicationMusicPlayer.setQueue(with: descriptor) 
      self.applicationMusicPlayer.prepareToPlay { (error) in 

       //Wait 5 seconds 
       if (error != nil) 
       { 
        let errorCode:Int = (error! as NSError).code 

        print("[MUSIC PLAYER] Error \(String(describing: error))") 

        if errorCode == 4 && self.currectPlaying.failed == 0 
        { 
         print("[MUSIC PLAYER] Error Load track will play again after 5 seconds") 
         self.applicationMusicPlayer.stop() 
         self.currectPlaying.failed += 1 

         DispatchQueue.main.asyncAfter(deadline: .now() + 5 , execute: { 
          self.play_from_apple(false) 
         }) 

        }else 
        { 
         //Inform player to play with another streamer 
         self.fullFailure() 
         print("[MUSIC PLAYER] Error preparing : \(String(describing: error))") 
        } 

        return 
       }else 
       { 
        self.applicationMusicPlayer.play() 
        self.playedBy = .apple 
       } 
      } 

     }else 
     //Play directly ios below version 10.1 
     { 
      self.applicationMusicPlayer.setQueue(with: storeIds) 
      self.applicationMusicPlayer.play() 

     } 

    } 
} 
0

Voilà comment je résolu ce problème .. MPMusicPlayerController.systemMusicPlayer.prepareToPlay n'a jamais été de retour de la toute valeur. .. Donc j'ai fait un truc pour jouer au joueur et après cela cette fonction a commencé à retourner la valeur ... b/c en cas d'erreur je dois naviguer vers un autre écran et s'il n'y a pas d'erreur je dois naviguer vers Player Voir

  if #available(iOS 10.1, *) 
      { 
       let floatVersion = (UIDevice.current.systemVersion as NSString).floatValue 
       MPMusicPlayerController.systemMusicPlayer.setQueue(with: "YourSongID"); 
       if #available(iOS 11.1, *) 
       { 
        MPMusicPlayerController.systemMusicPlayer.play() 
       } 

       MPMusicPlayerController.systemMusicPlayer.prepareToPlay(completionHandler: { 
        (Eroror) in 
        if(Eroror == nil) 
        { 
         if(floatVersion < 11.1) 
         { 
          MPMusicPlayerController.systemMusicPlayer.pause() 
         } 

        } 
        else 
        { 

        } 
       }) 



      } 
+0

Pourriez-vous expliquer le code et ajouter plus de détails pour le rendre plus utile aux futurs lecteurs? – LW001