Звук голоса AVSpeechUtterance en-US искажен на iOS 12
У меня есть приложение, которое использует AVSpeechUtterance, которое работало до iOS 12. Он все еще работает, но голос в США звучит искаженно. Этого не происходит на симуляторе xcode или на новом iPhone XS Max. Кажется, это происходит только на iPhone X. Удаление и переустановка приложения не решает проблему. Единственным исправлением было изменение голоса на en-IE. Кто-нибудь еще испытал это или нашел обходной путь?
AVSpeechUtterance *utterance = [[AVSpeechUtterance alloc] initWithString:@"This is a test"];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
utterance.rate = AVSpeechUtteranceDefaultSpeechRate;
[self.synthesizer speakUtterance:utterance];
2 ответа
iOS12 заставил "en-US" использовать Фреда вместо Саманты,
Попробуйте заменить:
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:@"en-US"];
С:
utterance.voice = [AVSpeechSynthesisVoice voiceWithIdentifier:@"com.apple.ttsbundle.Samantha-compact"];
macOS 12.3 monterey с голосом FRED — у меня был похожий вопрос — только мне не удалось получить голос Fred. он продолжал бы переопределять голос Алекса (чего я не хотел). спасибо за приведенный выше совет, который позволил мне получить правильный синтаксис для получения идентификатора voice> и строки идентификатора для получения Fred:
mouseCount = Int.random(in: 1..<numPhrases)
let mouseCountStr : String = mousePhrases[mouseCount]
let utterance = AVSpeechUtterance(string: mouseCountStr)
utterance.voice = AVSpeechSynthesisVoice(identifier:"com.apple.speech.synthesis.voice.Fred")
utterance.volume = 0.75
synthesizer.delegate = self
synthesizer.speak(utterance)