Swift 4 中的文本到语音转换

Text to speech conversion in Swift 4

我正在尝试在我的 iOS 应用程序中集成文本到语音功能。

为此,我使用 AVFoundation 框架的 AVSpeechUtteranceAVSpeechSynthesisVoice 类。

extension String {
    func speech(with pronunciation: String) {
        let utterance = AVSpeechUtterance(attributedString: NSAttributedString(string: self, attributes: [.accessibilitySpeechIPANotation : pronunciation]))
        utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
        let synth = AVSpeechSynthesizer()
        DispatchQueue.main.async {
            synth.speak(utterance)
        }
    }
}

我面临的问题是 wind 单词作为动词和名词的发音,即

  1. wind 作为 动词 的发音是:waɪnd
  2. and wind 作为 名词 的发音是:wɪnd

以上发音字符串遵循国际音标(IPA)

但是,我没有得到预期的结果。

如果您想要特定拼写的 IPA 翻译,我建议使用位于 iOS 的功能:

  • Settings > General > Accessibility > Speech > Pronunciations (iOS 12).
  • Settings > Accessibility > Spoken Content > Pronunciations (iOS 13)

一旦您选择了想要的结果,您就可以use it in your code由语音合成器发声。

编辑

this solution also doesn't work for me.

我对您的评论感到非常惊讶,因为当我按照所提供的 link 执行每个步骤时,我得到以下代码片段:

override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

        let pronunciationKey = NSAttributedString.Key(rawValue: AVSpeechSynthesisIPANotationAttribute)

//        let attrStr = NSMutableAttributedString(string: "blablablaNOUN",
//                                                attributes: [pronunciationKey: "ˈwɪnd"])
    let attrStr = NSMutableAttributedString(string: "blablablaVERB",
                                            attributes: [pronunciationKey: "ˈwa͡ɪnd"])
        let utterance = AVSpeechUtterance(attributedString: attrStr)

        let synthesizer = AVSpeechSynthesizer()
        synthesizer.speak(utterance)
}

...当我在 Settings - General - Language & Region 菜单中更改 iPhone Language 后启动这个空白应用 时,我得到了动词的正确发音和名词。

Copy-paste上面的代码片段,自己测试一下。