En utilisant MPMusicPlayerController, la mise en musicPlayer.currentPlaybackTime à rechercher, mais prend la deuxième pour prendre effet

StackOverflow https://stackoverflow.com/questions/2379165

Question

J'ai un UISlider jouant le rôle épurateur. Comme le pouce est traîné, j'exécutez la commande suivante:

- (void) _seekTo:(double)playbackTime {
     mPlayer.currentPlaybackTime = playbackTime;
}

Cela fonctionne très bien, la musique cherche avant. En relâchant le pouce, je remets en marche le NSTimer pour envoyer des mises à jour de temps pour garder le UISlider en phase. Le problème est, lors de la libération du pouce, les premiers rappels contiennent la valeur temporelle précédente. Cela provoque le pouce pour revenir en arrière à sa position initiale avant de revenir à la nouvelle valeur. Très disgracieux.

Toute personne a une expérience avec ce comportement et un moyen de corriger? Je peux fournir un exemple de projet si vous souhaitez que démontre cette anomalie.

Était-ce utile?

La solution

Peut-être qu'il est parce qu'il ya déjà des données décodées dans la mémoire tampon lorsque vous commencez à chercher. Vous cherchez une minute avant, mais il y a quelques millisecondes de données audio dans la mémoire tampon, et lorsque ces seaux jouent, le joueur déclare sa position dans le fichier en cours. Alors seulement, viennent les nouveaux seaux de la position mise à jour et le marqueur commence à se comporter. (Juste une théorie.)

Vous ne pourriez pas filtrer simplement les données intermédiaires à la main? Vous savez combien vous avez sauté à l'aide du curseur, de sorte que vous pourriez peut-être stocker la nouvelle position dans une variable et d'ignorer les mises à jour de joueur jusqu'à ce qu'ils obtiennent confortablement près de la nouvelle position du curseur. (L'espoir qui fait sens.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top