2010-11-24 51 views
2

Salut à tous, j'ai une méthode d'enregistrement qui écrit les notes qu'un utilisateur joue sur un tableau en temps réel. Le seul problème est qu'il y a un léger retard et que chaque séquence est sensiblement ralentie lors de la lecture. J'ai augmenté la vitesse de lecture d'environ 6 millisecondes, et ça sonne bien, mais je me demandais si le délai pourrait varier sur d'autres appareils?iOS - Problèmes de vitesse

J'ai testé sur un ipod touch 2ème génération, comment serait-ce préforme sur les 3ème et 4ème ainsi que les iphones? ai-je besoin de tester sur chacun d'eux et trouver la variation de délai optimale?

Des idées?

Plus d'infos: J'utilise deux NSThreads au lieu de minuteries et remplir un tableau avec des points blancs où aucune note doit jouer (j'utilise des entiers, -1 est un blanc). Toutes les 0,03 secondes, il ajoute un blanc lors de l'enregistrement. Chaque fois que l'utilisateur frappe une note, le blanc le plus récent est remplacé par un nombre 0-7. Lors de la lecture, le deuxième thread est utilisé (2 threads parce que le second a un intervalle de temps plus court) qui a un temps de 0.024. La différence de 6 millisecondes compense le retard entre l'enregistrement et la lecture.

Je suppose que l'enregistrement ou la lecture de notes prend plus de temps que l'autre et crée ainsi le retard.

Ce que je veux savoir, c'est si le délai sera différent sur d'autres appareils, et comment je devrais le compenser.

Exact Solution

je ne l'ai expliqué tout à fait, c'est pourquoi cette solution n'a pas été fournie, mais pour ceux qui ont un problème similaire ...

J'ai joué chaque temps similaire dans un fichier MIDI comme ceci:

while playing: 

do stuff to play beat 

new date xyz seconds from now 
new date now 

while now is not > date xyz seconds from now wait. 

la chose évidente que je manquais était de créer les deux dates avant de jouer le rythme ...

D'OH!

+0

« Salut à tous, j'ai une méthode d'enregistrement qui écrit les notes qu'un utilisateur joue à un tableau en temps réél." Vous allez devoir expliquer cela un peu plus clairement. –

+0

Désolé, le point principal était que je veux savoir si le délai sera différent sur plusieurs appareils. Je vais coller un peu plus d'infos maintenant. –

+0

Quel mécanisme utilisez-vous pour générer votre "Toutes les 0,03 secondes"? Vous dites que ce n'est pas une minuterie, alors comment déterminez-vous que le temps approprié est écoulé (rotation en boucle vérifiant l'horloge?) –

Répondre

4

Il me semble plus probable que le retard supplémentaire est causé par la lecture de la note, ou d'autres frais généraux de calcul dans le deuxième fil. Saisissez l'heure de l'horloge dans le deuxième fil avant de jouer chaque note et vérifiez le décalage horaire par rapport au dernier. Vous devrez réduire votre retard suivant par tout excès (probablement 0.006 secondes!).

Le délai sera différent sur les différentes générations de l'iPhone, mais en s'y adaptant dynamiquement, vous serez sûr tant que le temps de traitement est inférieur à 0,03 secondes.

Vous devriez faire la même chose dans le premier thread.


Obtenir horodatages haute résolution - il y a aa discussion sur les forums de pommes here, ou ce stackoverflow question.

+0

Oui. Vérifiez et corrigez, plutôt que de coder en dur une valeur qui est presque garantie d'être incorrecte sur la prochaine génération de matériel/système d'exploitation. –

+0

Vérification de l'horloge murale en faisant quoi? NSDate? –