АудиоКит AKMetronome время ожидания кажется неточным или квантованным - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в AudioKit и цифровом аудио в целом, так что я уверен, что должно быть что-то, что мне не хватает.

Я пытаюсь получить точное время от AKMetronome, получая метку времени каждый обратный звонок. Время кажется каким-то образом квантованным, и я не знаю, что это такое.

Пример: если для моего метронома установлено значение 120, каждый обратный вызов должен находиться на расстоянии точно 0,5 секунды. Но если я вычислю разницу от одного тика к другому, я получу это:

0.49145491666786256

0.49166241666534916

0.5104563333334227

0.4917322500004957

1014 *1013* 1014 * 0.5104953749978449

0.49178879166720435

0.5103940000008151

0.4916401666669117

Это всегда одно из 2 значений с очень малой погрешностью. Я хочу, чтобы можно было рассчитать, когда наступит следующий тик, чтобы я мог запустить анимацию на несколько кадров вперед, но это затрудняет. Я что-то пропускаю?

edit: Я придумала решение, так как изначально разместила этот вопрос, но я не уверена, единственное или лучшее решение.

Я установил для буфера наименьший размер, используя AKSettings.BufferLength.veryShort

Для самого маленького буфера отметка времени всегда включена в течение одной или двух миллисекунд. Хотя я до сих пор не уверен, правильно ли я это делаю или это предполагаемое поведение AKCallback. Кажется, что обратный вызов должен быть вовремя, даже с более длинным буфером.

1 Ответ

0 голосов
/ 04 мая 2020

Используете ли вы Timer для расчета разницы во времени? С моей точки зрения и на основании моих выводов, проблема связана с Timer, который не должен быть точным в ios см. Тему ( Точность NSTimer ).

Кроме того, вы можете посмотреть в AVAudioTime (https://audiokit.io/docs/Extensions/AVAudioTime.html)

...