... меняется ли возвращаемый голос между версиями iOS и даже между различными устройствами?
Я обнаружил синтез речи только в iOS 12, поэтому не могу дать вам никакой информации опредыдущие версии, но я понял, что голос по умолчанию - это встроенный голос поддерживаемого устройства языка.
Поскольку при создании экземпляра класса AVSpeechSynthesisVoice
используется только код BCP 47, указывающий язык и локаль для голоса., ваш код принимает голос по умолчанию устройства , который может быть установлен для многих пользователей.
... например, английский США, если вы установите голос "Fred", то voiceWithLanguage будетвернуть "Фред", что круто.Но если вы установите для голоса значение «Nicky», voiceWithLanguage возвращает что-то еще, кроме «Nicky».
Я сделал много тестов (iOS 12.3.1, Swift 5.0, iPhone X, iPhone 7Плюс) включая тот, который вы упомянули, и он всегда возвращает встроенный голос моего устройства, поддерживаемый язык, когда я меняю его.
Я не смог воспроизвести вашу проблему.
... конечно, я могу начать использовать voiceWithIdentifier
вместо.
Это именно то, что я рекомендую, и еслиуказанный голос с идентификатором не установлен, возьмите голос по умолчанию: он уменьшит количество возможных разных голосов, которые слышат многие пользователи.
В заключение, используя код BCP 47 ("en-US", "fr-FR" ...) вызывает встроенный голос устройства, которое необходимо учитывать, что может привести к разным слышимым голосам в соответствии с обычными настройками: , который определяет голос по умолчаниювозвращено [AVSpeechSynthesisVoice voiceWithLanguage] (ObjC) .
Ознакомление с выбором правильного голоса доступно на в этом подробном резюме WWDC , если необходимо.