Является ли Objective C достаточно быстрым для программирования DSP / аудио
Рендеринг в реальном времени
Определенно нет . Среда выполнения Objective-C и ее библиотеки просто не предназначены для требований воспроизведения звука в реальном времени. Дело в том, что практически невозможно гарантировать, что использование среды выполнения ObjC или библиотек, таких как Foundation (или даже CoreFoundation), не приведет к тому, что ваш рендерер пропустит крайний срок.
Распространенным случаем является блокировка - даже простое выделение кучи (malloc
, new
/ new[]
, [[NSObject alloc] init]
), вероятно, потребует блокировки.
Использование ObjC означает использование библиотек и среды выполнения, которые предполагают, что блокировки допустимы в любой точке их выполнения. Блокировка может приостановить выполнение вашего потока рендеринга (например, во время обратного вызова рендеринга) в ожидании получения блокировки. Тогда вы можете пропустить крайний срок рендеринга, потому что ваш поток рендеринга задерживается, что в итоге приводит к выпадению / сбоям.
Спросите профессионального разработчика аудио-плагинов: они скажут вам, что блокировка внутри домена рендеринга в реальном времени запрещена. Вы не можете, например, запустите файловую систему или создайте выделение кучи, потому что у вас нет практической верхней границы относительно времени, которое потребуется для завершения.
Вот хорошее введение: http://www.rossbencina.com/code/real-time-audio-programming-101-time-waits-for-nothing
Оффлайн рендеринг
Да, это было бы приемлемо быстро в большинстве сценариев для высокоуровневого обмена сообщениями. На более низких уровнях я рекомендую не использовать ObjC, потому что это было бы расточительно - рендеринг мог бы занять много, много раз дольше, если обмен сообщениями ObjC используется на этом уровне (по сравнению с реализацией C или C ++).
См. Также: Примет ли мое приложение для iPhone снижение производительности, если я использую Objective-C для низкоуровневого кода?