Как слушать микрофонный вход и анализировать в реальном времени?

Привет, к сожалению, мне не удалось выяснить звук на iPhone. Лучшее, что я приблизил, это классы AVAudioRecorder/Player, и я знаю, что они не подходят для обработки аудио.

Так что мне интересно, сможет ли кто-нибудь объяснить мне, как "слушать" входной микрофон iPhone в кусках, скажем, 1024 сэмплов, анализировать образцы и делать какие-то вещи. И продолжайте так, пока мое приложение не прекратится или не сообщит, чтобы он остановился. Я не хочу сохранять какие-либо данные, все, что я хочу, - это анализировать данные в реальном времени и делать с ними в реальном времени.

Я попытался попытаться понять пример яблок "aurioTouch", но это слишком сложно для понимания.

Так может кто-нибудь объяснить мне, как я должен это делать?

Ответ 1

Если вы хотите анализировать аудио вход в режиме реального времени, он не становится намного проще, чем Apple aurioTouch iOS пример приложения с исходным кодом (есть также зеркальный сайт). Вы можете google немного больше информации об использовании Audio Unit RemoteIO API для записи, но вам все равно придется вычислять часть DSP в режиме реального времени.

API очереди аудио немного проще для получения входных буферов необработанных аудиоданных PCM от микрофона, но не намного проще и имеет более высокую задержку.

Добавлено позже: там также версия aurioTouch, преобразованная в Swift: https://github.com/ooper-shlab/aurioTouch2.0-Swift

Ответ 2

Класс AVAudioPlayer/Recorder не приведет вас туда, если вы хотите обрабатывать аудио в реальном времени. Основы Audio Toolbox и Audio Unit - это путь. Проверьте здесь для руководства по программированию звука Apple, чтобы посмотреть, какая структура соответствует вашим потребностям. И поверьте мне, эти вещи низкого уровня непросты и плохо документированы. В CocoaDev есть несколько руководств, где вы можете найти примеры кодов. Кроме того, есть аудио-библиотека DSP DIRAC Недавно я обнаружил, что для темпа и манипуляции с тангажом. Я не задумывался над этим, но вы можете найти его полезным.

Ответ 3

Если все, что вам нужно, это сэмплы с минимальным объемом обработки ОС, вам, вероятно, понадобится API очереди аудио; см. Руководство по программированию служб очереди аудио.

AVAudioRecorder предназначен для записи в файл, а AudioUnit - больше для "подключаемой" обработки звука (и на стороне Mac, AU Lab на самом деле довольно крутой).