Я написал код (вы можете найти его ниже), но он частично не работает. Я хочу создать приложение, в котором я могу нажать кнопку pushMicButton
, а когда кнопка нажата, просто скажите несколько слов, и SpeechKit или что-то подобное распознает его и добавит слово, распознанное системой, в распознаваемый текст Label.text. Я создал такой код, но у меня произошел сбой в строке 43.
Не могли бы вы помочь мне и исправить мой код?
Спасибо!
Пример кода:
import UIKit
import Speech
class VoiceController: UIViewController {
private let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "se-SE"))
@IBOutlet weak var recognizedLabel: UILabel!
@IBAction func pushMicButton(_ sender: Any) {
print("Voice recognition button")
voiceRecognition()
}
@IBAction func AddToListButton(_ sender: UIButton) {
print("Add something to list")
getAddedData()
}
override func viewDidLoad() {
super.viewDidLoad()
}
func voiceRecognition() {
SFSpeechRecognizer.requestAuthorization { _ in
DispatchQueue.main.async {
switch SFSpeechRecognizer.authorizationStatus() {
case .authorized:
let audioURL = Bundle.main.url(forResource: "test", withExtension: "wav")!
let recognizer = SFSpeechRecognizer()
let request = SFSpeechRecognitionRequest(url: audioURL)
recognizer?.recognitionTask(with: request) { result, error in
guard error == nil else { print("Error: \(error)"); return }
guard let result else {print ("No result!"); return}
self.recognizedLabel.text = result.bestTranscription.formattedString
}
break
default:
break
}
}
}
//ADD VOICE RECOGNITION HERE
}
func getAddedData() {
let originalString = recognizedLabel.text
let escapedString = originalString!.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed)
let dataLink = "http://yabahi.st/items/find?name="
let lookingURL = dataLink + escapedString!
guard let url = URL(string: lookingURL) else {return}
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
guard let dataResponse = data,
error == nil else {
print(error?.localizedDescription ?? "Response Error")
return }
do{
let jsonResponse = try JSONSerialization.jsonObject(with:
dataResponse, options: [])
print(jsonResponse)
//SEND "jsonResponse.name" TO MAIN UITABLEVIEW
} catch let parsingError {
print("Error", parsingError)
}
}
task.resume()
}
}