2016-12-18 7 views
1

Я новичок в разработке приложений быстрой и iOS. Я создаю приложение для преобразования текста в речь с помощью AVSpeechSynthesiser. Я хочу установить строку на английском, но я хочу, чтобы она переводила эту конкретную строку в речь, но на другом языке, таком как арабский. Могу ли я сделать это с помощью AVSpeechSynthesizer, или мне нужно будет использовать API перевода для этого.AVspeechSynthesizer iOS text speech

ThankYou

+0

вам нужно будет перевести строку перед подачей его в 'AVSpeechSynthesizer' – Adrian

+0

привет спасибо за ответ. какой API я могу использовать для перевода строки перед ее загрузкой в ​​AVSpeechSynthesizer. У Apple есть свои API для поддержки этого. – Aneesa

+0

Вы можете часто находить вещи, копаясь в 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

ответ

1

Я бросил вместе класс 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") 
    } 
} 
+0

ThankYou для создания образцового кода. Это очень ценится. Я решил не использовать переводчика, так как есть только несколько строк, которые мне нужно перевести, и я могу использовать приведенный вами пример, чтобы перевести их самостоятельно. Я хотел спросить, могу ли я использовать аналогичную функцию для речи в тексте, возможно ли это ?. Еще раз спасибо за помощь. – Aneesa

+0

@ Aneesa https://developer.apple.com/videos/play/wwdc2016/509/ – Adrian