当前位置: 首页 > 知识库问答 >
问题:

iOS文本语音

暴德运
2023-03-14

我是快速和iOS应用程序开发的新手。我正在使用AVSpeechSynthesiser创建一个文本到语音应用程序。我想设置一个字符串说在英语,但我希望它把那个特定的字符串翻译成语音,但在不同的语言,如阿拉伯语。我是否能够使用AVSpeechSynthesizer做到这一点,或者我需要使用翻译API来做到这一点。

谢谢你

共有1个答案

仉昱
2023-03-14

我创建了一个AVSpeechSynthesizer类来处理从一种语言到另一种语言的转换。这里有一个关于Nhipster的AVSpeechSynthesizer教程,这是学习这方面的一个很好的起点。我没有做翻译,但你可以把那部分弄明白。。。我还创建了一个基本的translator类,将“hello”翻译成“محبا”。您可以在此处看到该项目:

翻译

要使用翻译器,您可能需要将动作绑定到如下按钮:

@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")
    }
}
 类似资料:
  • 我似乎在这上面找不到任何东西。iOS7中是否有任何Siri类或API允许您进行文本到语音转换?我所要做的就是如下所示: 然后让Siri从我的应用程序中说出来。 看来我们应该有能力做到这一点,不是吗?似乎是一件微不足道的事情。

  • 我正在iOS应用程序中使用进行文本到语音转换。 语音合成器在所有设备上都运行良好,除了运行iOS9.0.2的iPad 2(型号A1395)。我使用Xcode 7.0.1。 问题是,在播放文本时说"希望"字母"p"要么真的很安静,要么不播放,用户只能听到"ho"。如果文本是“希望”,那么它播放正确。 有没有办法解决这个问题?

  • 本文向大家介绍iOS对齐文本,包括了iOS对齐文本的使用技巧和注意事项,需要的朋友参考一下 示例 Swift Objective-C            

  • 我正在尝试用libgdx在iOS上开发一个应用程序。我想用文字来表达,但我找不到任何相关的东西。 我该怎么做? 谢啦

  • AVSpeechSynthesisVoice。iOS SDK 7.0中引入了voiceWithLanguage。当时,每种语言/地区只有一种语音。 自iOSSDK 9.0以来,已经为每种语言/区域设置添加了更多的声音。所以苹果公司引入了一个新的应用编程接口语音识别器,这样你就可以得到你想要的特定语音。 我的问题是,如果我们仍然在iOS 9或更高版本中使用voiceWithLanguage会怎么样。

  • 带有en-us语音的AVSpeechsynthesizer是“A”的发音,是“大写字母A”,但只想要“A”,怎么能做到呢?