2016-02-18 8 views
0

Я делаю простой комплект комплектов спрайтов, которым нужен аудиовход от микрофона для голосовых команд. Я уже создал простую игру, и я уже создал отдельное приложение, которое, если вы говорите слово, которое оно обнаруживает, и оно отображается на экране с помощью 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.

+0

Я не думаю, что они взаимосвязаны. Трудно ответить на ваш вопрос без знания того, что такое исключение. – nielsbot

+0

Мои мысли точно. Я знаю, что они имеют некоторую форму доступа к звуковому движку, но, глядя на эти документы, похоже, что между CoreAudio и двумя разными наборами не было никакой связи. Полная строка - это «XThrowIfError (AudioUnitInitialize (_rioUnit)», «невозможно инициализировать экземпляр AURemoteIO»); ' –

+0

Вы можете переместить свой проблемный код в собственное тестовое приложение, чтобы убедиться, что он работает изолированно. В противном случае вам придется использовать отладчик. Что такое _rioUnit? Что-нибудь в вашей консоли? (Вы также можете проверить свой syslog) – nielsbot

ответ

1

В приложении «Настройки конфиденциальности iOS» есть настройка в разделе «Конфиденциальность»: микрофон, в котором вам необходимо включить разрешение приложения на использование микрофона устройства. Запрос AVAudioSessionRecordPermission API может помочь проверить этот параметр разрешения.

Есть также некоторые категории AVAudioSession, которые должны быть установлены и активированы для использования микрофона. Использование SpriteKit и SceneKit не мешает этим настройкам.

+0

Мне интересно, если это в документации? – nielsbot

+0

[Я думаю, это может быть.] (Https://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html#//apple_ref/doc/uid/TP40008240-CH1-SW109) – rickster

+0

Посмотрите в документах от Apple AVAudioSession и на конференции WWDC. – hotpaw2

0

В iOS 10 Apple расширяет сферу контроля конфиденциальности. Вы должны объявить доступ к файлам Info.plist для любых личных данных.

Загрузите файл Info.Plist и добавьте секретный ключ в соответствии с вашими требованиями.

Микрофон: Ключ: Защита - Микрофон Использование Описание
Стоимость: $ (PRODUCT_NAME) позволяют использовать микрофон, чтобы дать аудиовход для голосовых команд.

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

  • Нет связанных вопросов^_^