2017-06-15 14 views
0

素早い初心者!私は音声認識を使用して音声をテキストに変換するアプリケーションを実装しようとしています。それはシミュレータで停止した理由iPhoneシミュレーター10.0 - 音声認識不可

問題
SFSpeechRecognizer().isAvailablefalse

private let request = SFSpeechAudioBufferRecognitionRequest() 
private var task: SFSpeechRecognitionTask? 
private let engine = AVAudioEngine() 

func recognize() { 
     guard let node = engine.inputNode else { 
      return 
     } 

     let recordingFormat = node.outputFormat(forBus: 0) 
     node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in 
      self.recognitionRequest.append(buffer); 
     } 

     engine.prepare() 
     do { 
      try engine.start() 
     } catch { 
      return print(error) 
     } 

     guard let systemRecognizer = SFSpeechRecognizer() else { 
      return 
     } 

     if !systemRecognizer.isAvailable { 
      self.log(.debug, msg: "Entered this condition and stopped!") 
      return 
     } 
} 

私はわからない質問
です。マイクはiPhoneシミュレータで動作しますか?

更新 私はそれはシミュレータがiOSの11 とマイクへのアクセスを獲得したことになりますError Domain=kAFAssistantErrorDomain Code=1101 "(null)"

+1

http://cleanswifter.com/sfspeechrecognizer-tips-for-ios-10/ –

+0

これは、私たちがシミュレータに入っているときだけ音声ファイルをテストできるということです。右? – moustacheman

+1

はい、.... –

答えて

0

、というエラーを取得し、コードの下での音声ファイルで

let audioFile = Bundle.main.url(forResource: "create_activity", withExtension: "m4a", subdirectory: "Sample Recordings") 
let recognitionRequest = SFSpeechURLRecognitionRequest(url: audioFile!) 

をテストしてみました残念ながら、私はそれを確認する文書を見つけることができませんでしたが、次のコードサンプルでこの機能を確認できます。 iOS 11シミュレータでは正常に動作しますが、iOS 10シミュレータ(またはそれ以前)では何もしません。

import UIKit 
import Speech 

class ViewController: UIViewController { 

    private var recognizer = SFSpeechRecognizer() 
    private var request = SFSpeechAudioBufferRecognitionRequest() 
    private let engine = AVAudioEngine() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     requestPermissions() 
    } 

    private func requestPermissions() { 
     // 
     // Do not forget to add `NSMicrophoneUsageDescription` and `NSSpeechRecognitionUsageDescription` to `Info.plist` 
     // 

     // Request recording permission 
     AVAudioSession.sharedInstance().requestRecordPermission { allowed in 
      if allowed { 
       // Request speech recognition authorization 
       SFSpeechRecognizer.requestAuthorization { status in 
        switch status { 
        case .authorized: self.prepareSpeechRecognition() 
        case .notDetermined, .denied, .restricted: print("SFSpeechRecognizer authorization status: \(status).") 
        } 
       } 

      } else { 
       print("AVAudioSession record permission: \(allowed).") 
      } 
     } 
    } 

    private func prepareSpeechRecognition() { 
     // Check if recognizer is available (has failable initializer) 
     guard let recognizer = recognizer else { 
      print("SFSpeechRecognizer not supported.") 
      return 
     } 

     // Prepare recognition task 
     recognizer.recognitionTask(with: request) { (result, error) in 
      if let result = result { 
       print("SFSpeechRecognizer result: \(result.bestTranscription.formattedString)") 
      } else { 
       print("SFSpeechRecognizer error: \(String(describing: error))") 
      } 
     } 

     // Install tap to audio engine input node 
     let inputNode = engine.inputNode 
     let busNumber = 0 
     let recordingFormat = inputNode.outputFormat(forBus: busNumber) 
     inputNode.installTap(onBus: busNumber, bufferSize: 1024, format: recordingFormat) { buffer, time in 
      self.request.append(buffer); 
     } 

     // Prepare and start audio engine 
     engine.prepare() 

     do { 
      try engine.start() 
     } catch { 
      return print(error) 
     } 
    } 

} 

Info.plistNSMicrophoneUsageDescriptionNSSpeechRecognitionUsageDescriptionを追加することを忘れないでください。