How to get a list of ALL votes on iOS 9?

The standard way to get a list of AVSpeechSynthesisVoice "all" objects is to request it:

[AVSpeechSynthesisVoice speechVoices] 

However, this only shows a unique default voice for a pair of language areas. for example for en-US:

 "Language: en-US, Name: Samantha, Quality: Default", 

If I look in the Settings app General โ†’ Accessibility โ†’ Speech โ†’ Votes โ†’ English I see that I selected โ€œSiri Female (Enhanced)โ€, but this voice is not selected from the code. Full list

one

So the big question is: how can I choose, for example? Alex or Siri Female as voice from code?

+7
ios cocoa speech text-to-speech
source share
1 answer

Background

  • AVSpeechSynthesisVoice documentation .

  • Languages โ€‹โ€‹for votes must be specified in BCP-47 format. The following are the available voices (and what their respective BCP-47 vocabulary codes mean).

Supported voices

As of April 28, 2017, print(AVSpeechSynthesisVoice.speechVoices()) reports the following supported voices:

 [AVSpeechSynthesisVoice 0x6080000097d0] Language: ar-SA, Name: Maged, Quality: Default [com.apple.ttsbundle.Maged-compact] [AVSpeechSynthesisVoice 0x608000009780] Language: cs-CZ, Name: Zuzana, Quality: Default [com.apple.ttsbundle.Zuzana-compact] [AVSpeechSynthesisVoice 0x608000009440] Language: da-DK, Name: Sara, Quality: Default [com.apple.ttsbundle.Sara-compact] [AVSpeechSynthesisVoice 0x608000009670] Language: de-DE, Name: Anna, Quality: Default [com.apple.ttsbundle.Anna-compact] [AVSpeechSynthesisVoice 0x6080000092e0] Language: el-GR, Name: Melina, Quality: Default [com.apple.ttsbundle.Melina-compact] [AVSpeechSynthesisVoice 0x608000009310] Language: en-AU, Name: Karen, Quality: Default [com.apple.ttsbundle.Karen-compact] [AVSpeechSynthesisVoice 0x6080000098d0] Language: en-GB, Name: Daniel, Quality: Default [com.apple.ttsbundle.Daniel-compact] [AVSpeechSynthesisVoice 0x6080000094e0] Language: en-IE, Name: Moira, Quality: Default [com.apple.ttsbundle.Moira-compact] [AVSpeechSynthesisVoice 0x6080000096b0] Language: en-US, Name: Samantha, Quality: Default [com.apple.ttsbundle.Samantha-compact] [AVSpeechSynthesisVoice 0x608000009480] Language: en-ZA, Name: Tessa, Quality: Default [com.apple.ttsbundle.Tessa-compact] [AVSpeechSynthesisVoice 0x6080000093d0] Language: es-ES, Name: Monica, Quality: Default [com.apple.ttsbundle.Monica-compact] [AVSpeechSynthesisVoice 0x6080000096c0] Language: es-MX, Name: Paulina, Quality: Default [com.apple.ttsbundle.Paulina-compact] [AVSpeechSynthesisVoice 0x608000009550] Language: fi-FI, Name: Satu, Quality: Default [com.apple.ttsbundle.Satu-compact] [AVSpeechSynthesisVoice 0x6080000094f0] Language: fr-CA, Name: Amelie, Quality: Default [com.apple.ttsbundle.Amelie-compact] [AVSpeechSynthesisVoice 0x608000009880] Language: fr-FR, Name: Thomas, Quality: Default [com.apple.ttsbundle.Thomas-compact] [AVSpeechSynthesisVoice 0x608000009290] Language: he-IL, Name: Carmit, Quality: Default [com.apple.ttsbundle.Carmit-compact] [AVSpeechSynthesisVoice 0x608000009570] Language: hi-IN, Name: Lekha, Quality: Default [com.apple.ttsbundle.Lekha-compact] [AVSpeechSynthesisVoice 0x608000009510] Language: hu-HU, Name: Mariska, Quality: Default [com.apple.ttsbundle.Mariska-compact] [AVSpeechSynthesisVoice 0x608000009040] Language: id-ID, Name: Damayanti, Quality: Default [com.apple.ttsbundle.Damayanti-compact] [AVSpeechSynthesisVoice 0x6080000096a0] Language: it-IT, Name: Alice, Quality: Default [com.apple.ttsbundle.Alice-compact] [AVSpeechSynthesisVoice 0x6080000092b0] Language: ja-JP, Name: Kyoko, Quality: Default [com.apple.ttsbundle.Kyoko-compact] [AVSpeechSynthesisVoice 0x608000009540] Language: ko-KR, Name: Yuna, Quality: Default [com.apple.ttsbundle.Yuna-compact] [AVSpeechSynthesisVoice 0x6080000090e0] Language: nl-BE, Name: Ellen, Quality: Default [com.apple.ttsbundle.Ellen-compact] [AVSpeechSynthesisVoice 0x608000009380] Language: nl-NL, Name: Xander, Quality: Default [com.apple.ttsbundle.Xander-compact] [AVSpeechSynthesisVoice 0x608000009240] Language: no-NO, Name: Nora, Quality: Default [com.apple.ttsbundle.Nora-compact] [AVSpeechSynthesisVoice 0x6080000090f0] Language: pl-PL, Name: Zosia, Quality: Default [com.apple.ttsbundle.Zosia-compact] [AVSpeechSynthesisVoice 0x608000009250] Language: pt-BR, Name: Luciana, Quality: Default [com.apple.ttsbundle.Luciana-compact] [AVSpeechSynthesisVoice 0x6080000094d0] Language: pt-PT, Name: Joana, Quality: Default [com.apple.ttsbundle.Joana-compact] [AVSpeechSynthesisVoice 0x608000009210] Language: ro-RO, Name: Ioana, Quality: Default [com.apple.ttsbundle.Ioana-compact] [AVSpeechSynthesisVoice 0x608000009130] Language: ru-RU, Name: Milena, Quality: Default [com.apple.ttsbundle.Milena-compact] [AVSpeechSynthesisVoice 0x608000009620] Language: sk-SK, Name: Laura, Quality: Default [com.apple.ttsbundle.Laura-compact] [AVSpeechSynthesisVoice 0x608000009730] Language: sv-SE, Name: Alva, Quality: Default [com.apple.ttsbundle.Alva-compact] [AVSpeechSynthesisVoice 0x608000009740] Language: th-TH, Name: Kanya, Quality: Default [com.apple.ttsbundle.Kanya-compact] [AVSpeechSynthesisVoice 0x6080000095e0] Language: tr-TR, Name: Yelda, Quality: Default [com.apple.ttsbundle.Yelda-compact] [AVSpeechSynthesisVoice 0x608000009010] Language: zh-CN, Name: Ting-Ting, Quality: Default [com.apple.ttsbundle.Ting-Ting-compact] [AVSpeechSynthesisVoice 0x608000009660] Language: zh-HK, Name: Sin-Ji, Quality: Default [com.apple.ttsbundle.Sin-Ji-compact] [AVSpeechSynthesisVoice 0x608000009860] Language: zh-TW, Name: Mei-Jia, Quality: Default [com.apple.ttsbundle.Mei-Jia-compact] 

As Axello's comments below, this obviously does not include the en-AU male voice, which is available in the iPhoneโ€™s โ€œLeeโ€ settings. It would seem that at present it is not available through this API. Perhaps it will be added on time, but given that the available voices are not like what they changed since December 30, 2015 , I would not hold your breath.

Customization

 import AVFoundation let utterance : AVSpeechUtterance = AVSpeechUtterance(string: "String to be read out.") let voiceToUse: AVSpeechSynthesisVoice? = AVSpeechSynthesisVoice(language: "en-US") utterance.voice = voiceToUse! // Set voice by BCP-47 language code. AVSpeechSynthesizer().speak(utterance) // Note: Won't be heard in Swift Playground. 

Answer

We can directly select Alexโ€™s voice using AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex) , but, oddly enough, the only identifier Apple has provided to date is Alex. ๐Ÿคท

For any other voices (see above list again for voice names) use the following code:

 // From https://www.ikiapps.com/tips/2015/12/30/setting-voice-for-tts-in-ios var voiceToUse: AVSpeechSynthesisVoice? for voice in AVSpeechSynthesisVoice.speechVoices() { if #available(iOS 9.0, *) { if voice.name == "Karen" { voiceToUse = voice } } } 

(This can be done more elegantly using filter() than a loop, but I'm not familiar with the syntax in Swift, so see here if interested, or leave a comment if you know how to write it).

As for the voices designated "Siri", I have no idea. Maybe they are not related to AVSpeechSynthesisVoice ? Comments are welcome if you know the deal behind them.

+4
source share

All Articles