Приложение для реализации Siri получает причину сбоя Завершение работы приложения из-за неперехваченного исключения

'com.apple.coreaudio.avfaudio', причина: 'необходимое условие ложно: _recordingTap == nil

сбой в коде

1.  
guard let inputNode = audioEngine.inputNode else {
        fatalError("Audio engine has no input node")
    }  
2.  
inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { (buffer, when) in
        self.recognitionRequest?.append(buffer)
}

При попытке повторной инициализации сири вылетает

У нас есть диктовка текста и после диктовки я хочу захватить текст из речи. В первый раз нормально, а во второй раз вылетает на 2-й строке.

Функция диктовки речи приведена ниже

func getSpeech(asSpeach:String)
{
    print("===================")

    let audioSession  = AVAudioSession.sharedInstance()
    do {
        try audioSession.overrideOutputAudioPort(.speaker)
    } catch {
        print(error.localizedDescription)
    }


    /// <#Description#>
    let synthesizer = AVSpeechSynthesizer()
    let utterance = AVSpeechUtterance(string: asSpeach)
    utterance.rate = AVSpeechUtteranceDefaultSpeechRate
    utterance.volume = 1.0
    utterance.pitchMultiplier = 1.0
    synthesizer.delegate=self
    synthesizer.speak(utterance)

    //        synthesizer.rSpeaking(at: .word)


}

person Abdur Rahim    schedule 16.05.2017    source источник


Ответы (1)


Ошибка говорит вам, что у вас уже есть ответвитель на этой шине и что вы не можете установить другой.

Когда вы сначала вызываете listen(), вы устанавливаете ответвитель на шину. Затем вы вызываете stopListening() и прекращаете распознавание, но ничего не делаете с касанием. Затем, когда вы снова вызываете listen(), вы пытаетесь снова установить кран - это приводит к ошибке.

Вы можете добавить что-то в removeTapOnBus при остановке прослушивания () — это должно означать, что вы можете снова добавить это, когда снова начнете слушать.

person KKRocks    schedule 16.05.2017