Я постоянно использую 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`