2010-11-24 17 views
2

Hey alle, ich habe eine Methode der Aufzeichnung, die die Notizen schreibt, die ein Benutzer zu einem Array in Echtzeit spielt. Das einzige Problem ist, dass es eine leichte Verzögerung gibt und jede Sequenz bei der Wiedergabe merklich verlangsamt wird. Ich habe die Wiedergabegeschwindigkeit um etwa 6 Millisekunden erhöht, und es klingt richtig, aber ich habe mich gefragt, ob die Verzögerung auf anderen Geräten variieren könnte?iOS - Speed ​​Issues

Ich habe auf einem iPod Touch 2. Generation getestet, wie würde diese Preform auf 3. und 4. sowie iPhones? muss ich an allen testen und die optimale Verzögerungsvariation finden?

Irgendwelche Ideen?

Mehr Infos: ich zwei NSThreads statt Timer und füllen ein Array mit leeren Stellen, an denen keine Noten gespielt werden sollten (ich verwende ganze Zahlen, -1 ist ein freier Raum). Alle 0,03 Sekunden fügt es bei der Aufnahme ein Leerzeichen hinzu. Jedes Mal, wenn der Benutzer eine Notiz trifft, wird das letzte Leerzeichen durch eine Zahl zwischen 0 und 7 ersetzt. Bei der Wiedergabe wird der zweite Thread verwendet (2 Threads, da der zweite ein kürzeres Zeitintervall hat), der eine Zeit von 0,024 hat. Die Differenz von 6 Millisekunden kompensiert die Verzögerung zwischen Aufnahme und Wiedergabe.

Ich nehme an, dass entweder die Aufnahme oder das Abspielen von Noten länger dauert als die andere und somit die Verzögerung entsteht.

Was ich wissen möchte ist, wenn die Verzögerung auf anderen Geräten anders sein wird, und wie ich es kompensieren sollte.

exakte Lösung

ich nicht habe es vollständig erklärt, das ist, warum diese Lösung nicht zur Verfügung gestellt wurde, sondern für jedermann mit einem ähnlichen Problem ...

Ich spielte jeden schlagen ähnlich auf eine MIDI-Datei wie folgt:

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. 

die offensichtliche Sache, die ich war zu erstellen, um die zwei Tage, bevor die Wiedergabe des Beats fehlt ...

D'OH!

+0

„Hey all, habe ich ein Verfahren zum Aufzeichnen bekam, die die Noten schreibt, dass ein Benutzer auf ein Array spielt in Echtzeit." Du wirst das ein bisschen deutlicher erklären müssen. –

+0

Entschuldigung, der Hauptpunkt war, dass ich wissen möchte, ob die Verzögerung auf mehreren Geräten unterschiedlich sein wird. Ich werde jetzt ein paar Infos reinstecken. –

+0

Welchen Mechanismus verwenden Sie, um Ihre "Alle 0,03 Sekunden" zu generieren? Sie sagen, es ist kein Timer, also wie stellen Sie fest, dass die entsprechende Zeit verstrichen ist (Spin-Loop überprüft die Uhr?) –

Antwort

4

Es scheint mir eher, dass die zusätzliche Verzögerung durch die Wiedergabe der Note oder andere Rechenaufwand im zweiten Thread verursacht wird. Nimm die Uhrzeit im zweiten Thread, bevor du jede Note spielst, und überprüfe den Zeitunterschied zur letzten. Sie müssen Ihre folgende Verzögerung um jeden Überschuss reduzieren (wahrscheinlich 0,006 Sekunden!).

Die Verzögerung wird auf verschiedenen Generationen des iPhone unterschiedlich sein, aber durch dynamische Anpassung daran werden Sie sicher sein, solange der Verarbeitungsaufwand weniger als 0,03 Sekunden beträgt.

Sie sollten das gleiche auch im ersten Thread tun.


Erste hochauflösende Zeitstempel - es gibt aa Diskussion über Apple-Foren here oder dieses stackoverflow question.

+0

Ja. Prüfen und korrigieren, anstatt einen Wert hart zu codieren, der bei der nächsten Generation von Hardware/Betriebssystem fast garantiert nicht korrekt ist. –

+0

Überprüfung der Wanduhr durch was? NSDate? –