首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVSpeechSynthesizer语言

AVSpeechSynthesizer语言
EN

Stack Overflow用户
提问于 2017-02-23 15:54:28
回答 1查看 1.6K关注 0票数 0

在我的应用程序中,我使用的是AVSpeechSynthesizer,文本语音是俄语,问题是当我将系统语言更改为英语时,文本发音带有英语口音,听起来像俄语的转录。我该如何处理这个问题?

下面是一些代码

代码语言:javascript
复制
    utterance.voice = AVSpeechSynthesisVoice(language: "ru-Ru")
    synthesizer.pauseSpeaking(at: .word)
    utterance = AVSpeechUtterance(string: "Какой-то текст который нужно произнести")
    synthesizer.speak(utterance)
EN

回答 1

Stack Overflow用户

发布于 2017-02-23 16:32:05

也许它会对某些人有帮助,我找到了解决方案,但它看起来像是在说话之前我改变了AppLanguage的变通办法,这是代码

代码语言:javascript
复制
    UserDefaults.standard.set(["ru"], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
    utterance.voice = AVSpeechSynthesisVoice(identifier: "ru-RU")

同步之后,AVSpeechSynthesisVoice.currentLanguageCode()变成了"ru“,忽略了系统语言

以下是土耳其语的完整代码示例

导入UIKit

导入AVFoundation

类ViewController: UIViewController {

代码语言:javascript
复制
let synthesizer : AVSpeechSynthesizer = AVSpeechSynthesizer()
var utterance : AVSpeechUtterance = AVSpeechUtterance(string: "")

override func viewDidLoad() {
    super.viewDidLoad()
    UserDefaults.standard.set(["tr"], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .interruptSpokenAudioAndMixWithOthers)
    utterance.voice = AVSpeechSynthesisVoice(identifier: "tr-TR")
    synthesizer.pauseSpeaking(at: .word)
    testSpeech()
}

private func testSpeech() {
    utterance = AVSpeechUtterance(string: "Çeviri için deney metni")
    speak()
}

private func speak() {
    if synthesizer.isSpeaking {
        synthesizer.pauseSpeaking(at: .immediate)
        return
    }
    synthesizer.speak(utterance)
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42409968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档