Я делаю простой комплект комплектов спрайтов, которым нужен аудиовход от микрофона для голосовых команд. Я уже создал простую игру, и я уже создал отдельное приложение, которое, если вы говорите слово, которое оно обнаруживает, и оно отображается на экране с помощью cmu-sphinx/pocketsphinx (http://cmusphinx.sourceforge.net/).Позволяет ли SpriteKit и SceneKit получать доступ к микрофонному входу iOS во время игры?
Я использовал Novocaine (https://github.com/alexbw/novocaine), потому что я использовал эту библиотеку много раз и имел большой успех с ней в других проектах в прошлом, но всякий раз, когда я запускаю объект Novocaine в игре, мое приложение падает с исключением.
Итак, я понял, что, поскольку я использовал библиотеку обертки, это были некоторые устаревшие функции, которые больше не поддерживались, поэтому я сделал еще несколько исследований. Я наткнулся на демонстрационное приложение Apple AurioTouch (https://developer.apple.com/library/ios/samplecode/aurioTouch/Introduction/Intro.html). После игры с этим образцовым приложением я смог сузить классы, которые мне нужны, чтобы получить исходные входные значения, которые были в основном классом AudioController. Поэтому я импортировал класс AudioController и его необходимые компоненты и смог его построить. К счастью, на примере была правильная обработка исключений, поэтому я смог увидеть, где она была неудачной. Исключение было вызвано этой линии:
AudioUnitInitialize(_rioUnit)
Я начал подозревать, что пытается получить доступ к микрофону в среде SpriteKit/SceneKit была причиной проблемы. Я также пробовал те же шаги, о которых говорилось выше, в новых проектах SpriteKit и SceneKit и не разрешил проблему. Поэтому мне интересно, если вы в любом случае можете предоставить вход микрофона в режиме реального времени в проекте SpriteKit/SceneKit.
Я не думаю, что они взаимосвязаны. Трудно ответить на ваш вопрос без знания того, что такое исключение. – nielsbot
Мои мысли точно. Я знаю, что они имеют некоторую форму доступа к звуковому движку, но, глядя на эти документы, похоже, что между CoreAudio и двумя разными наборами не было никакой связи. Полная строка - это «XThrowIfError (AudioUnitInitialize (_rioUnit)», «невозможно инициализировать экземпляр AURemoteIO»); ' –
Вы можете переместить свой проблемный код в собственное тестовое приложение, чтобы убедиться, что он работает изолированно. В противном случае вам придется использовать отладчик. Что такое _rioUnit? Что-нибудь в вашей консоли? (Вы также можете проверить свой syslog) – nielsbot