在语音框架iOS 10上继续转换时崩溃



我在继续与 speech.framework交谈并以下Avaudio Engine的崩溃时会崩溃。

***终止由于未知的例外'com.apple.coreaudio.avfaudio',原因:'所需条件是错误的: nullptr == tap()'

这是由于在某些情况下我的AudioEngine获得null

这是我的StarTrecording功能代码:

func startRecording(){
    if recognizationTask != nil{
        recognizationTask?.cancel()
        recognizationTask = nil
    }
    let audioSession = AVAudioSession.sharedInstance()
    do{
        try audioSession.setCategory(AVAudioSessionCategoryRecord)
        try audioSession.setMode(AVAudioSessionModeSpokenAudio)
        try audioSession.setActive(true, with: .notifyOthersOnDeactivation)
    } catch {
        print("Audion session properies weren't set because of an error.")
    }
    recognizationRequest = SFSpeechAudioBufferRecognitionRequest()
    guard let inputNode = audioEngine.inputNode as AVAudioInputNode? else {
        fatalError("Audio engine has no input node")
    }
    guard let recognizationRequest = recognizationRequest else {
        fatalError("Unable to create an SFSpeechAudioBufferRecognizationRequest object.")
    }
    recognizationRequest.shouldReportPartialResults = true
    recognizationTask = speechRecognizer?.recognitionTask(with: recognizationRequest, resultHandler: { (result, error) in
        var isFinal = false
        if result != nil{
            self.txtViewSiriDetecation.text = result?.bestTranscription.formattedString
            isFinal = (result?.isFinal)!
        }
        if error != nil || isFinal {
            self.audioEngine.stop()
            inputNode.removeTap(onBus:0)
            self.recognizationRequest = nil
            self.recognizationTask = nil
            self.btnSiri.isEnabled = true
        }

    })
    let recordingFormat = inputNode.outputFormat(forBus: 0)
    inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
        self.recognizationRequest?.append(buffer)
    }
    audioEngine.prepare()
    do {
        try audioEngine.start()
    } catch {
        print("audio engine couldn't start b'cus of an error.")
    }
    txtViewSiriDetecation.text = "Say something, I'm listening!"
}

如何克服这种情况的情况?

有人指导我吗?

预先感谢!

我也遇到了这个问题,添加audioengine.inputnode.removetap(onbus:0)为我修复了它。

  fileprivate func stopRecording() {
      recordingMic.isHidden = true
      audioEngine.stop()
      audioEngine.inputNode.removeTap(onBus: 0)
      recognitionRequest?.endAudio()
      recognitionTask?.cancel()
      self.detectSpeechButton.isEnabled = true
      self.detectSpeechButton.setTitle("Detect Speech", for: .normal)
      recordingMic.isHidden = true
      self.textView.isHidden = false
  }

正在传递installtap的非nil格式。仅当连接到未连接到另一个节点的输出总线上时,才能完成此操作;否则会导致错误。指定的总线上的TAP和连接格式(如果非nil)应相同。否则,后一个操作将覆盖任何先前设置的格式。

最新更新