首页 > 解决方案 > 在 Swift 中强制自定义 AVSpeech 和 AVSpeechUtterance 中的单词发音

问题描述

对于使用 AVSpeechUtterance 说出数字,我希望 Siri 以尊重数字类型约定的方式说出数字。

对于日期,我希望将 1492 发音为 1492,而不是 1000、400、92。

对于电话号码 650-412-3456,我想说六五哦,四一二三四五六,而不是六百五十破四百十二破三,一千四百五十六。

有没有使用 AVSpeech 和 AVUtterance 指定发音?文档中似乎没有任何明显的内容。

标签: iosswiftavspeechsynthesizeravspeechutterance

解决方案


有没有使用 AVSpeech 和 AVUtterance 指定发音?文档中似乎没有任何明显的内容。

达到目的的最好方法是为要读出的文本提供适当的格式。

下面的代码片段通过几个例子突出了这个断言:

    class ViewController: UIViewController {

        let synthesizer = AVSpeechSynthesizer()

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

            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "dd/MM/yyyy HH:mm"

            let date = dateFormatter.date(from: "01/04/2015 05:30")

            let dateStr = DateFormatter.localizedString(from: date!,
                                                        dateStyle: .medium,
                                                        timeStyle: .short)
            let dateUtterance = AVSpeechUtterance(string: dateStr)
            dateUtterance.voice = AVSpeechSynthesisVoice(language: "en-GB")

            let hourComponents = Calendar.current.dateComponents([.hour, .minute],
                                                                 from: date!)
            let hourStr = DateComponentsFormatter.localizedString(from: hourComponents,
                                                                  unitsStyle: .spellOut)
            let hourUtterance = AVSpeechUtterance(string: hourStr!)
            hourUtterance.voice = AVSpeechSynthesisVoice(language: "en-GB")

            let numberValue = NSNumber(value: 54038921.7)
            let nbStr = NumberFormatter.localizedString(from: numberValue,
                                                        number: .decimal)
            let nbUtterance = AVSpeechUtterance(string: nbStr)
            nbUtterance.voice = AVSpeechSynthesisVoice(language: "en-GB")

            synthesizer.speak(hourUtterance) //Only time
            synthesizer.speak(dateUtterance) //The complete date and hour
            synthesizer.speak(nbUtterance) //Just for numbers
        }
    }

如果此示例还不够,可以使用代码片段 (Objc 和 Swift)的更多信息。


推荐阅读