j'ai jeté ensemble une classe AVSpeechSynthesizer pour gérer le retournement d'une langue à l'autre. Voici un AVSpeechSynthesizer tutorial on NSHipster qui est un bon point de départ pour apprendre à ce sujet. Je n'ai pas bidouillé avec la traduction, mais vous pouvez comprendre cette partie ... J'ai également créé une classe de traducteur de base qui traduira "bonjour" à "مرحبا". Vous pouvez voir le projet ici:
TranslateDemo
Pour utiliser le traducteur, vous voudrez probablement lier une action à un bouton comme ceci:
@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)
}
}
Le synthétiseur vocal ressemble à ceci:
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")
}
}
vous devrez traduire la chaîne avant l'alimentation à salut merci 'AVSpeechSynthesizer' – Adrian
pour votre réponse. Quelle API puis-je utiliser pour traduire la chaîne avant de l'introduire dans AVSpeechSynthesizer? Est-ce que Apple a ses propres API pour soutenir cela. – Aneesa
Vous pouvez souvent trouver des choses en creusant sur GitHub. J'ai vu ce https://github.com/watson-developer-cloud/ios-sdk#language-translator, mais je ne l'ai pas utilisé. Google et Bing feront la traduction. Voici un cadre qui le fait -> https://github.com/gpolak/FGTranslator. Vous allez souvent tomber sur CocoaPods lorsque vous utilisez des frameworks, alors voici un tutoriel sur eux -> https://www.raywenderlich.com/97014/use-cocoapods-with-swift – Adrian