Преобразование текста в речь в Swift 4 - PullRequest
1 голос
/ 05 марта 2019

Я пытаюсь интегрировать функции преобразования текста в речь в моем приложении для iOS.

Для этого я использую AVSpeechUtterance и AVSpeechSynthesisVoice классы AVFoundation framework.

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. ветер как глагол произносится: waɪnd
  2. и ветер как существительное произносится: wɪnd

Вышеуказанные строки произношения следуют Международному фонетическому алфавиту (IPA) .

Но я не получаю ожидаемых результатов.

1 Ответ

1 голос
/ 07 мая 2019

Если вы хотите IPA-перевод определенного написания, я предлагаю использовать функцию iOS, расположенную по адресу Settings > General > Accessibility > Speech > Pronunciations (iOS 12) .

Как только вы выберете желаемый результат, вы можете использовать его в своем коде для озвучивания синтезатором речи.

EDIT

это решение также не работает для меня.

Я очень удивлен вашим комментарием, потому что, когда я следую всем шагам указанной ссылки, я получаю фрагмент кода ниже:

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)
}

... и когда я запускаю это пустое приложение после изменения iPhone Language в меню Settings - General - Language & Region, я получаю правильное произношение для глагола и существительного.

Скопируйте и вставьте фрагмент кода выше и протестируйте его самостоятельно.

...