2016-07-15 38 views
0

這似乎是一個很基本的問題,但我在努力尋找答案。據我所知,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似乎出現此消息。但我仍然無法看到在哪裏查看是否已授予此權限。如果我的guard let inputNode行後添加

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

    }else{ 
     print("No permission") 
    } 

直接它呈現的消息,但總是告訴我,之前的權限我連回應了警報不批。

什麼是去了解它的最好方法?我應該回到使用audioSession方法嗎?對於它的價值,很多都是從speechrecognizer周圍的WWDC代碼中解放出來的。我只是不明白,他們正在處理的麥克風許可

其實它並不總是似乎呈現警惕請求權限。缺少什麼我在這裏,因爲我已經找到了例子似乎跳過此許可步驟

回答

0

好了,所以找我發現這個文檔:

錄製音頻需要來自用戶的明確許可。您的應用程序的音頻會話嘗試同時使用一個類別,使記錄使用的音頻輸入 路線的第一次,系統自動 提示權限的用戶。您可以通過調用此方法明確地詢問 。在用戶授予您的應用程序記錄許可權之前,您的應用程序只能記錄沉默。

此方法總是立即返回,但如果用戶先前未授予或拒絕 要在您的應用中記錄的權限,則響應塊將等待 用戶輸入。

當用戶響應爲您的應用記錄的權限提示, 系統會記住的選擇。如果用戶拒絕錄製 權限,則可以在「設置」>「隱私」>「麥克風」中重新啓用它。

所以看起來它會自動做這件事時,首先嚐試使用麥克風,但理想的應該是我問這個權限前期