Текст в речь iOS: что решает голос по умолчанию, возвращаемый [AVSpeechSynthesisVoice voiceWithLanguage]? - PullRequest
0 голосов
/ 09 октября 2018

AVSpeechSynthesisVoice.voiceWithLanguage был представлен в iOS SDK 7.0.В то время, есть только один голос на язык / язык.

Начиная с iOS SDK 9.0, добавлено больше голосов для каждого языка / локали.Поэтому Apple представляет новый API voiceWithIdentifier, чтобы вы могли получить нужный голос.

Мой вопрос здесь заключается в том, что если мы все еще будем использовать voiceWithLanguage в iOS 9 или выше.Что именно возвращает этот API?И что более важно, изменяется ли возвращаемый голос между версиями iOS и даже между различными устройствами?

Я заметил, что то, что возвращает voiceWithLanguage, это своего рода опора на настройки речи iOS "ettings -> General -> Accessibility-> Речь -> Голоса -> Английский ".Но не совсем точное совпадение.То есть, например, английский США, если вы установите голос "Fred", voiceWithLanguage вернет "Fred", что круто.Но если вы установите для voice значение «Nicky», voiceWithLanguage возвращает что-то еще, кроме «Nicky».

Я спрашиваю, потому что мое приложение использует voiceWithLanguage.И хотя пользователи обновили iOS до iOS 12, они сообщили, что услышали голос разницы.Я полагаю, что voiceWithLanguage возвращает другой голос после обновления до iOS 12. Хотя я не могу воспроизвести его на устройствах того же типа.

И, конечно, я могу начать использовать voiceWithIdentifier вместо этого.Но просто любопытно об этом голосе с языком.

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

... меняется ли возвращаемый голос между версиями iOS и даже между различными устройствами?

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

Поскольку при создании экземпляра класса AVSpeechSynthesisVoice используется только код BCP 47, указывающий язык и локаль для голоса., ваш код принимает голос по умолчанию устройства , который может быть установлен для многих пользователей.

... например, английский США, если вы установите голос "Fred", то voiceWithLanguage будетвернуть "Фред", что круто.Но если вы установите для голоса значение «Nicky», voiceWithLanguage возвращает что-то еще, кроме «Nicky».

Я сделал много тестов (iOS 12.3.1, Swift 5.0, iPhone X, iPhone 7Плюс) включая тот, который вы упомянули, и он всегда возвращает встроенный голос моего устройства, поддерживаемый язык, когда я меняю его.

enter image description here

Я не смог воспроизвести вашу проблему.

... конечно, я могу начать использовать voiceWithIdentifier вместо.

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

В заключение, используя код BCP 47 ("en-US", "fr-FR" ...) вызывает встроенный голос устройства, которое необходимо учитывать, что может привести к разным слышимым голосам в соответствии с обычными настройками: , который определяет голос по умолчаниювозвращено [AVSpeechSynthesisVoice voiceWithLanguage] (ObjC) .

Ознакомление с выбором правильного голоса доступно на в этом подробном резюме WWDC , если необходимо.

0 голосов
/ 16 октября 2018

[решения пока нет] Я тоже встречался с такой же проблемой.

Сначала установите другой голос с помощью

Accessibility -> Speech -> Voices
or 
Accessibility -> VoiceOver -> Speech -> Voices

Затем

AVSpeechSynthesisVoice(language: language)

Это не повлияет на AVSpeechSynthesizer в iOS 12.0.1 (этоработает на iOS 11.x и iOS 12.0.0)

Я также нашел две другие вещи на iOS 12.0.1

Во-первых, голос Siri больше не доступен при использовании

AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.siri_male_ja-JP_compact")

Во-вторых, если я не установлю голосовой идентификатор, Женский Сири в этой локали будет произносить текст.Это также не влияет на параметры речи в предпочтении.Кстати, я все еще не могу найти, чтобы сделать Мужской Сири Говорите что-нибудь, пока ... хаха

...