Я хотел бы иметь возможность проверить, какие голоса из текста в речь доступны для моего приложения iOS для использования с AVSpeechSynthesis. Создать список установленных голосов легко, но Apple делает некоторые из них запрещенными для использования приложениями, и я хотел бы знать, какие именно.
Например, рассмотрим следующий тестовый код ( swift 5.1):
import AVFoundation
...
func voiceTest() {
let speechSynthesizer = AVSpeechSynthesizer()
let voices = AVSpeechSynthesisVoice.speechVoices()
for voice in voices where voice.language == "en-US" {
print("\(voice.language) - \(voice.name) - \(voice.quality.rawValue) [\(voice.identifier)]")
let phrase = "The voice you're now listening to is the one called \(voice.name)."
let utterance = AVSpeechUtterance(string: phrase)
utterance.voice = voice
speechSynthesizer.speak(utterance)
}
}
Когда я звоню voiceTest()
, вывод консоли таков:
en-US - Nicky (Enhanced) - 2 [com.apple.ttsbundle.siri_female_en-US_premium]
en-US - Aaron - 1 [com.apple.ttsbundle.siri_male_en-US_compact]
en-US - Fred - 1 [com.apple.speech.synthesis.voice.Fred]
en-US - Nicky - 1 [com.apple.ttsbundle.siri_female_en-US_compact]
en-US - Samantha - 1 [com.apple.ttsbundle.Samantha-compact]
en-US - Alex - 2 [com.apple.speech.voice.Alex]
Некоторые голоса говорят реальным голосом, тогда как некоторые говорят вместо этого в голосе по умолчанию. В моем случае и Nicky (com.apple.ttsbundle.siri_female_en-US_premium) и Alex (com.apple.speech.voice.Alex) указаны как высококачественные, но вместо этого звучат как низкое качество по умолчанию, Samantha, когда выбрано.
Я знаю, что Apple сказала, что голоса Siri недоступны для использования в сторонних приложениях. Когда я вручную загружаю Samantha (High Quality) на свой iPhone через Настройки, он появляется в списке, и я могу его использовать. Возможно, Алекс - это просто высококачественный мужской голос Сири, хотя Аарон может показаться некачественным голосом Сири, основанным на его идентификаторе (com.apple.ttsbundle.siri_male_en-US_compact)? И именно поэтому Алекс и Ники - единственные, кому недоступны? Так что, если у меня есть приложение, специально исключившее его, оно сгенерирует настоящий список доступных голосов? Было бы неплохо иметь некоторую ясность.