Всем доброго времени суток, реализую ввод текста в textFeild через микрофон, прописываю функцию и столкнулся с ошибкой
Ошибка под комментарием 5:
Initializer for conditional binding must have Optional type, not 'AVAudioInputNode’
guard let inputNode = VC.audioEngene.inputNode else{ // 5
fatalError("Аудио движок не имеет входного узла")
}
Во ViewController указал константу:
let audioEngene = AVAudioEngine()
Полный код функции:
var VC = ViewController()
func startRecording() {
if VC.recognitionTask != nil { // 1
VC.recognitionTask?.cancel()
VC.recognitionTask = nil
}
let audioSession = AVAudioSession.sharedInstance() // 2
do { // 3
try audioSession.setCategory(AVAudioSession.Category.record)
try audioSession.setMode(AVAudioSession.Mode.measurement)
try audioSession.setActive(true, options: .notifyOthersOnDeactivation)
} catch {
print("Не удалось настроить аудиосессию")
}
VC.recognitionRequest = SFSpeechAudioBufferRecognitionRequest() // 4
guard let inputNode = VC.audioEngene.inputNode else { // 5
fatalError("Аудио движок не имеет входного узла")
}
guard let recognitionRequest = VC.recognitionRequest else { // 6
fatalError("Не могу создать экземпляр запроса")
}
recognitionRequest.shouldReportPartialResults = true // 7
VC.recognitionTask = VC.speechRecognizer?.recognitionTask(with: recognitionRequest) { // 8
result, error in
var isFinal = false // 9
if result != nil { // 10
VC.textField.text = result?.bestTranscription.formattedString
isFinal = (result?.isFinal)!
}
if error != nil || isFinal { // 11
VC.audioEngene.stop()
inputNode.removeTap(onBus: 0)
VC.recognitionRequest = nil
VC.recognitionTask = nil
VC.recordButton.isEnabled = true
}
}
let format = inputNode.outputFormat(forBus: 0) // 12
inputNode.installTap(onBus: 0, bufferSize: 1024, format: format) { // 13
buffer, _ in
VC.recognitionRequest?.append(buffer)
}
VC.audioEngene.prepare() //14
do { // 15
try VC.audioEngene.start()
} catch {
print("Не удается стартонуть движок")
}
VC.textField.text = "Помедленнее, запись не такая быстрая" // 16
}