Я бросил вместе класс AVSpeechSynthesizer для обработки листать с одного языка на другой. Вот AVSpeechSynthesizer tutorial on NSHipster, что является хорошей отправной точкой для изучения этого. Я не искал перевода, но вы можете понять эту часть ... Я также создал базовый класс переводчиков, который переведет «привет» на «مرحبا». Вы можете увидеть проект здесь:
TranslateDemo
Чтобы использовать переводчик, вы, вероятно, хотите, чтобы связать действие к кнопке следующим образом:
@IBAction func translateToArabicAction(_ sender: UIButton) {
// check that there are characters entered in the textField
if (textToTranslateTextField.text?.characters.count)! > 0 {
let translatedText = translator.translate(word: (textToTranslateTextField.text?.lowercased())!)
speechSynthesizer.speak(translatedText, in: Language.arabic.rawValue)
}
}
@IBAction func translateToEnglishAction(_ sender: UIButton) {
// check that there are characters entered in the textField
if (textToTranslateTextField.text?.characters.count)! > 0 {
let translatedText = translator.translate(word: (textToTranslateTextField.text?.lowercased())!)
speechSynthesizer.speak(translatedText, in: Language.english.rawValue)
}
}
Речевой синтезатор выглядит следующим образом:
import AVFoundation
// You can use an enum so you don't have to manually type out character strings. Look them up once and stick them in an enum. From there, you set the language with your enum rather than typing out the string.
enum Language: String {
case english = "en-US"
case arabic = "ar-SA"
}
class Speaker: NSObject {
let synth = AVSpeechSynthesizer()
override init() {
super.init()
synth.delegate = self
}
func speak(_ announcement: String, in language: String) {
print("speak announcement in language \(language) called")
prepareAudioSession()
let utterance = AVSpeechUtterance(string: announcement.lowercased())
utterance.voice = AVSpeechSynthesisVoice(language: language)
synth.speak(utterance)
}
private func prepareAudioSession() {
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient, with: .mixWithOthers)
} catch {
print(error)
}
do {
try AVAudioSession.sharedInstance().setActive(true)
} catch {
print(error)
}
}
func stop() {
if synth.isSpeaking {
synth.stopSpeaking(at: .immediate)
}
}
}
extension Speaker: AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didStart utterance: AVSpeechUtterance) {
print("Speaker class started")
}
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, didFinish utterance: AVSpeechUtterance) {
print("Speaker class finished")
}
}
вам нужно будет перевести строку перед подачей его в 'AVSpeechSynthesizer' – Adrian
привет спасибо за ответ. какой API я могу использовать для перевода строки перед ее загрузкой в AVSpeechSynthesizer. У Apple есть свои API для поддержки этого. – Aneesa
Вы можете часто находить вещи, копаясь в GitHub. Я видел этот https://github.com/watson-developer-cloud/ios-sdk#language-translator, но я его не использовал. Google и Bing будут выполнять перевод. Вот фреймворк, который делает это -> https://github.com/gpolak/FGTranslator. Вы будете сильно влиять на CocoaPods при использовании фреймворков, поэтому здесь есть учебное пособие -> https://www.raywenderlich.com/97014/use-cocoapods-with-swift – Adrian