AVSpeechSynthesizer язык

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

вот код

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

1 ответ

Может быть, это кому-нибудь пригодится, я нашел решение, но перед тем, как говорить, я выгляжу как обходной путь, я поменяю AppLanguage, вот код

    UserDefaults.standard.set(["ru"], forKey: "AppleLanguages")
    UserDefaults.standard.synchronize()
    utterance.voice = AVSpeechSynthesisVoice(identifier: "ru-RU")

после синхронизации AVSpeechSynthesisVoice.currentLanguageCode() стал "ru", игнорируя язык системы

Вот полный пример кода для турецкого

импорт UIKit

импорт AVFoundation

Класс ViewController: UIViewController {

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

}

Другие вопросы по тегам