Хотите использовать AVSpeechSynthesizer для произнесения текста сразу после получения ввода от пользователя с помощью SFSpeechRecogniser - PullRequest
0 голосов
/ 27 марта 2020

Я постоянно использую SFSpeechRecogniser в своем приложении, чтобы оно могло прослушивать пробуждение клавиш, а затем с помощью логики c Я принимаю определенные голосовые команды от пользователей. Это прослушивание никогда не прекращается, так как я всегда хочу, чтобы мое приложение продолжало слушать пользователя по ключевому слову wake.

В некоторых командах мне нужно мгновенно использовать AVSpeechSynthesizer, чтобы что-то сказать пользователю в качестве обратной связи, но это не работает.

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

let audioSession = AVAudioSession.sharedInstance() do { try audioSession.setCategory(AVAudioSession.Category.record, mode: .default, options: AVAudioSession.CategoryOptions.defaultToSpeaker) try audioSession.setActive(true, options: .notifyOthersOnDeactivation) } catch { print("audioSession properties weren't set because of an error.") }

Приведенный выше код отлично работает для ввода пользователя и когда Я установил AVAudioSession.Category на playback, он тоже может говорить правильно. Но когда я устанавливаю категорию на playAndRecord, мое приложение вылетает с этой ошибкой

'com.apple.coreaudio.avfaudio', reason: 'required condition is false: format.sampleRate == hwFormat.sampleRate'

Ниже приведен код, который я использую для прослушивания, который прекрасно работает, если я установил category в просто record

`self.recognitionRequest = SFSpeechAudioBufferRecognitionRequest ()

    let inputNode = audioEngine.inputNode

    let recordingFormat = inputNode.outputFormat(forBus: 0)
    inputNode.installTap(onBus: 0, bufferSize: 2048, format: recordingFormat) { (buffer, when) in
            self.recognitionRequest.append(buffer)
    }

   self.audioEngine.prepare()

   do {
       try self.audioEngine.start()
   } catch {
       print("audioEngine couldn't start because of an error.")
   }


    self.recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest, resultHandler: { (result, error) in`
...