2016-07-15 24 views
0

Dies mag wie eine wirklich grundlegende Frage scheinen, aber ich habe Mühe, die Antwort zu finden. Soweit mir bekannt ist, ist AVAudioInputNode seit iOS 8 verfügbar und es kann zum Beispiel vom Mikrofon auf einem iPhone aufgenommen werden.AVAudioInputNode Erlaubnis

Ich weiß vorher würde ich AVAudioRecorderSession verwenden, um die Berechtigung zum Aufzeichnen und zu prüfen, ob ich die Erlaubnis usw. hatte. Was ich damit zu kämpfen habe, ist zu sehen, wie Sie die Berechtigung anfordern und überprüfen, wenn Sie AVAudioEngine verwenden.

Also in etwas wie dem unten, wie würde ich darüber gehen?

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() 


    } 

} 

ich bemerkt habe, dass das Mikrofon Privatsphäre Meldung in der plist und audioEngine.inputNode scheint Aufruf gesetzt werden kann, diese Nachricht zu präsentieren. Aber ich kann immer noch nicht sehen, wo ich prüfen kann, ob diese Erlaubnis erteilt wurde. Wenn ich

if (audioSession.recordPermission() == AVAudioSessionRecordPermission.granted){ 

    }else{ 
     print("No permission") 
    } 

direkt nach der Zeile guard let inputNode hinzufügen präsentiert er die Nachricht aber immer sagt mir, dass die Genehmigung nicht erteilt wird, bevor ich habe sogar auf die Warnung reagiert.

Was ist der beste Weg, um darüber zu gehen? Sollte ich einfach auf die audioSession Methoden zurückgreifen? Für das, was es wert ist, wurde viel von dem WWDC-Code um readRecognizer aufgehoben. Ich kann nur nicht sehen, wo sie die mic Erlaubnis behandeln

Tatsächlich scheint es nicht immer die Warnung zu präsentieren, um Erlaubnis zu bitten. Was soll ich hier als Beispiele fehlt ich gefunden habe, scheinen diese Erlaubnis Schritt

Antwort

0

Ok, so suchen Sie die Dokumentation überspringen ich diese gefunden:

Aufnehmen von Audio explizite Erlaubnis des Benutzers erfordert. Wenn die Audiositzung Ihrer App zum ersten Mal versucht, eine Audioeingabe Route zu verwenden, während eine Kategorie verwendet wird, die Aufzeichnung ermöglicht, fordert das System automatisch den Benutzer zur Genehmigung auf. Sie können explizit früher fragen, indem Sie diese Methode aufrufen. Bis der Nutzer Ihrer App die Berechtigung zur Aufzeichnung erteilt, kann Ihre App nur Stille aufzeichnen.

Diese Methode kehrt immer sofort zurück, aber der Antwortblock wartet auf Benutzereingaben, wenn der Benutzer die Berechtigung in Ihrer App nicht zuvor gewährt oder verweigert hat.

Wenn ein Benutzer auf eine Aufnahmeerlaubnisaufforderung für Ihre App reagiert, merkt sich das System die Auswahl . Wenn der Benutzer die Aufnahme verweigert hat, kann er unter Einstellungen> Datenschutz> Mikrofon wieder aktiviert werden.

So sieht es aus wie sie es automatisch zu tun ist, wenn zuerst das Mikrofon zu verwenden versuchen, aber idealerweise sollte ich bitten, diese Erlaubnis im Voraus