2016-07-15 42 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

好了,所以找我发现这个文档:

录制音频需要来自用户的明确许可。您的应用程序的音频会话尝试同时使用一个类别,使记录使用的音频输入 路线的第一次,系统自动 提示权限的用户。您可以通过调用此方法明确地询问 。在用户授予您的应用程序记录许可权之前,您的应用程序只能记录沉默。

此方法总是立即返回,但如果用户先前未授予或拒绝 要在您的应用中记录的权限,则响应块将等待 用户输入。

当用户响应为您的应用记录的权限提示, 系统会记住的选择。如果用户拒绝录制 权限,则可以在“设置”>“隐私”>“麦克风”中重新启用它。

所以看起来它会自动做这件事时,首先尝试使用麦克风,但理想的应该是我问这个权限前期