Сегодня мы будем переводить речь в текст и покажем это на экране. Сначалa убедитесь, что у вас стоит последняя версия iOS и Xcode. Для Speech Framework нужна минимум iOS 10. Я создал проект с поддержкой SwiftUI, для этого нужна iOS 13. Это не обязательно, можете использовать Storyboard.
Если вы не знаете что такое SwiftUI и хотите быстрый обзор, то вам сюда.
Создайте новый проект “File > New > Project…”, выберите “Single View App” и “User Interface: SwiftUI”. Проект будет выглядеть примерно так:
Выбираем файл ContentView.swift и меняем «struct ContentView...» на:
struct ContentView: View {
@ObservedObject var speechRec = SpeechRec()
var body: some View {
Text(speechRec.recognizedText)
.onAppear {
self.speechRec.start()
}
}
}
class SpeechRec: ObservableObject {
@Published private(set) var recognizedText = ""
func start() {
recognizedText = "Привет!"
}
}
import Speech
...
class SpeechRec: ObservableObject {
...
func start() {
SFSpeechRecognizer.requestAuthorization { status in
}
}
}
...
class SpeechRec: ObservableObject {
@Published private(set) var recognizedText = ""
let speechRecognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru-RU"))
var recognitionRequest: SFSpeechAudioBufferRecognitionRequest?
var recognitionTask: SFSpeechRecognitionTask?
let audioEngine = AVAudioEngine()
func start() {
self.recognizedText = "Слушаю..."
SFSpeechRecognizer.requestAuthorization { status in
self.startRecognition()
}
}
func startRecognition() {
do {
recognitionRequest = SFSpeechAudioBufferRecognitionRequest()
guard let recognitionRequest = recognitionRequest else { return }
recognitionTask = speechRecognizer?.recognitionTask(with: recognitionRequest) { result, error in
if let result = result {
self.recognizedText = result.bestTranscription.formattedString
}
}
let recordingFormat = audioEngine.inputNode.outputFormat(forBus: 0)
audioEngine.inputNode.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) { buffer, _ in
recognitionRequest.append(buffer)
}
audioEngine.prepare()
try audioEngine.start()
}
catch {
}
}
}
К сожалению, не доступен сервер mySQL