2013-12-09 6 views
0

У меня есть функция, которая вычисляет BPM для дорожки из входящих пакетов данных из CDJ. Допустим, что BPM составлял 124.45 ударов в минуту, как бы я мог вызвать функцию каждые 0,482 секунды (т. Е. Один раз за такт)? Можно ли настроить другой поток и установить таймер?Вызов функции C периодически в OSX

+0

Является ли приложение вообще какао? Насколько точны сроки ** необходимо **? – BergQuester

+0

Я использую CoreMidi в программе, если это что-то значит. Если нет, то это всего лишь C. Как можно точнее, поскольку функция отправляет MIDI-маркер в DAW для синхронизации часов. В настоящее время у меня есть отправка MIDI-сообщений, когда пакет входит, что работает довольно хорошо, за исключением того, что часы отстают на несколько мс из-за задержки. Я хотел отправить midi несколько мс, прежде чем пытаться синхронизировать часы. –

ответ

0

Возможно, посмотрите на высокоточные таймеры, here, для которых Apple требует 500 микросекунд точности, которая составляет 0,1% от вашего 500 (иш) миллисекундного требования. Вы можете свести к минимуму перекос, прочитав время в начале вашей обработки и вычислив смещение следующего бита. Кроме того, если вы обнаружите, что часто получаете запланированное опоздание и пропущенные удары, вы можете спать, скажем, в 95% случаев до следующего такта, чтобы процессор мог запланировать что-то еще, а затем занят, ожидая последних нескольких процентов, вы не запускаете процессор.

Смежные вопросы