Это может показаться действительно основным вопросом, но я изо всех сил пытаюсь найти ответ. Насколько мне известно, AVAudioInputNode доступен с iOS 8, и его можно использовать для записи с микрофона на iPhone, например.AVAudioInputNode разрешение
Я знаю ранее, я хотел бы использовать AVAudioRecorderSession, чтобы запросить разрешение на запись и проверку, если у меня есть разрешение и т. Д. То, с чем я борюсь, - это увидеть, как запрашивать и проверять разрешение при использовании AVAudioEngine.
Так что-то вроде ниже, как бы я это сделал?
import AVFoundation
class ViewController: UIViewController {
let audioEngine = AVAudioEngine()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func recordPressed(sender:AnyObject) {
try! startRecording()
}
func startRecording() throws{
let audioSession = AVAudioSession.sharedInstance()
try audioSession.setCategory(AVAudioSessionCategoryRecord)
try audioSession.setMode(AVAudioSessionModeMeasurement)
try audioSession.setActive(true, withOptions: .NotifyOthersOnDeactivation)
guard let inputNode = audioEngine.inputNode else { fatalError("Audio engine has no input node") }
let recordingFormat = inputNode.outputFormatForBus(0)
inputNode.installTapOnBus(0, bufferSize: 1024, format: recordingFormat) { (buffer: AVAudioPCMBuffer, when: AVAudioTime) in
}
audioEngine.prepare()
try audioEngine.start()
}
}
Я заметил, что сообщение микрофона конфиденциальности может быть установлено в PLIST и вызов audioEngine.inputNode кажется представить это сообщение. Но я все еще не вижу, где проверить, предоставлено ли это разрешение. Если добавить
if (audioSession.recordPermission() == AVAudioSessionRecordPermission.granted){
}else{
print("No permission")
}
непосредственно после guard let inputNode
линии он представляет сообщение, но всегда говорит мне, что разрешение не предоставлено, прежде чем я даже ответил на чеку.
Каков наилучший способ сделать это? Должен ли я просто вернуться к использованию методов audioSession? Для чего это стоит многого, это было снято с кода WWDC вокруг speechRecognizer. Я просто не вижу, где они обрабатывают разрешение микрофона.
Фактически, это не всегда означает, что предупреждение запрашивает разрешения. Что я здесь отсутствует как примеры, которые я нашел, кажется, чтобы пропустить этот шаг разрешения