iOS - проблемы со скоростью - PullRequest
2 голосов
/ 24 ноября 2010

Привет всем, у меня есть метод записи, который записывает заметки, которые пользователь воспроизводит в массив в режиме реального времени.Единственная проблема в том, что есть небольшая задержка, и каждая последовательность заметно замедляется при воспроизведении.Я увеличил скорость воспроизведения примерно на 6 миллисекунд, и это звучит правильно, но мне было интересно, будет ли задержка меняться на других устройствах?

Я тестировал на Ipod Touch 2-го поколения, как бы эта преформана 3-м и 4-м как и на айфонах?мне нужно проверить все из них и найти оптимальное изменение задержки?

Любые идеи?

Подробнее : я использую два NSThreadsвместо таймеров, и заполните массив пустыми местами, где не должны играть ноты (я использую целые числа, -1 - пробел).Каждые 0,03 секунды он добавляет пробел при записи.Каждый раз, когда пользователь нажимает на заметку, самый последний пробел заменяется числом 0-7.При воспроизведении используется второй поток (2 потока, потому что второй имеет более короткий интервал времени), который имеет время 0,024.Разница в 6 миллисекунд компенсирует задержку между записью и воспроизведением.

Я предполагаю, что запись или воспроизведение нот занимает больше времени, чем другие, и, следовательно, создает задержку.

Что яЯ хочу знать, будет ли задержка отличаться на других устройствах и как я должен ее компенсировать.

Точное решение

МогуЯ не объяснил это полностью, поэтому это решение не было предоставлено, но для тех, кто сталкивался с подобной проблемой ...

Я проигрывал каждый удар, похожий на файл миди, например:

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.

Очевидное, чего мне не хватало, - это создать две даты ПЕРЕД игрой в такт ...

D'OH!

1 Ответ

4 голосов
/ 24 ноября 2010

Мне кажется более вероятным, что дополнительная задержка вызвана воспроизведением заметки или другими вычислительными издержками во втором потоке. Перед тем как сыграть каждую ноту, возьмите время настенного часа во втором потоке и проверьте разницу во времени с последней. Вам нужно будет уменьшить задержку на любое превышение (вероятно, на 0,006 секунды!).

Задержка будет разной на разных поколениях iphone, но, динамически адаптируясь к нему, вы будете в безопасности, пока затраты на обработку составляют менее 0,03 секунды.

Вы должны сделать то же самое и в первом потоке.


Получение меток времени с высоким разрешением - здесь есть обсуждение на яблочных форумах здесь , или этот вопрос stackoverflow.

...