【问题标题】:How to get a list of ALL voices on iOS 9?如何在 iOS 9 上获取所有声音的列表?
【发布时间】:2016-05-31 06:19:36
【问题描述】:

获取“所有”AVSpeechSynthesisVoice 对象列表的标准方法是请求它:

[AVSpeechSynthesisVoice speechVoices]

但是,这只会显示每个语言-地区对的唯一默认语音。例如对于美国:

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

如果我在“设置”应用中查看 通用 → 辅助功能 → 语音 → 语音 → 英语 我看到我选择了“Siri 女性(增强)”,但无法从代码中选择该声音。 完整列表是

所以最大的问题是:我如何选择例如?来自代码的声音是 Alex 还是 Siri 女性?

【问题讨论】:

    标签: ios cocoa text-to-speech speech


    【解决方案1】:

    背景

    • AVSpeechSynthesisVoicedocumentation页面。

    • 语音的语言应以 BCP-47 格式指定。请参阅下面的可用语音(以及它们对应的BCP-47 语言代码的含义)。

    支持的声音

    截至 2020 年 5 月 7 日,print(AVSpeechSynthesisVoice.speechVoices()) 报告了以下受支持的声音(iOS 13.3.1;iPhone 而非模拟器):

    [AVSpeechSynthesisVoice 0x28266f9c0] Language: ar-SA, Name: Maged, Quality: Default [com.apple.ttsbundle.Maged-compact]
    [AVSpeechSynthesisVoice 0x28266dd10] Language: cs-CZ, Name: Zuzana, Quality: Default [com.apple.ttsbundle.Zuzana-compact]
    [AVSpeechSynthesisVoice 0x28266f050] Language: da-DK, Name: Sara, Quality: Default [com.apple.ttsbundle.Sara-compact]
    [AVSpeechSynthesisVoice 0x28266ef90] Language: de-DE, Name: Anna, Quality: Default [com.apple.ttsbundle.Anna-compact]
    [AVSpeechSynthesisVoice 0x28266f710] Language: de-DE, Name: Helena, Quality: Default [com.apple.ttsbundle.siri_female_de-DE_compact]
    [AVSpeechSynthesisVoice 0x28266d8f0] Language: de-DE, Name: Martin, Quality: Default [com.apple.ttsbundle.siri_male_de-DE_compact]
    [AVSpeechSynthesisVoice 0x28266fbf0] Language: el-GR, Name: Melina, Quality: Default [com.apple.ttsbundle.Melina-compact]
    [AVSpeechSynthesisVoice 0x28266f9b0] Language: en-AU, Name: Catherine, Quality: Default [com.apple.ttsbundle.siri_female_en-AU_compact]
    [AVSpeechSynthesisVoice 0x28266ea00] Language: en-AU, Name: Gordon, Quality: Default [com.apple.ttsbundle.siri_male_en-AU_compact]
    [AVSpeechSynthesisVoice 0x28266f5e0] Language: en-AU, Name: Karen, Quality: Default [com.apple.ttsbundle.Karen-compact]
    [AVSpeechSynthesisVoice 0x28266e9a0] Language: en-GB, Name: Arthur, Quality: Default [com.apple.ttsbundle.siri_male_en-GB_compact]
    [AVSpeechSynthesisVoice 0x28266fba0] Language: en-GB, Name: Daniel, Quality: Default [com.apple.ttsbundle.Daniel-compact]
    [AVSpeechSynthesisVoice 0x28266f880] Language: en-GB, Name: Martha, Quality: Default [com.apple.ttsbundle.siri_female_en-GB_compact]
    [AVSpeechSynthesisVoice 0x28266d0e0] Language: en-IE, Name: Moira, Quality: Default [com.apple.ttsbundle.Moira-compact]
    [AVSpeechSynthesisVoice 0x28266efe0] Language: en-IN, Name: Rishi, Quality: Default [com.apple.ttsbundle.Rishi-compact]
    [AVSpeechSynthesisVoice 0x2826327e0] Language: en-US, Name: Aaron, Quality: Default [com.apple.ttsbundle.siri_male_en-US_compact]
    [AVSpeechSynthesisVoice 0x28266fb40] Language: en-US, Name: Fred, Quality: Default [com.apple.speech.synthesis.voice.Fred]
    [AVSpeechSynthesisVoice 0x28266ce30] Language: en-US, Name: Nicky, Quality: Default [com.apple.ttsbundle.siri_female_en-US_compact]
    [AVSpeechSynthesisVoice 0x28266ed60] Language: en-US, Name: Samantha, Quality: Default [com.apple.ttsbundle.Samantha-compact]
    [AVSpeechSynthesisVoice 0x28266f170] Language: en-ZA, Name: Tessa, Quality: Default [com.apple.ttsbundle.Tessa-compact]
    [AVSpeechSynthesisVoice 0x28266ef60] Language: es-ES, Name: Mónica, Quality: Default [com.apple.ttsbundle.Monica-compact]
    [AVSpeechSynthesisVoice 0x28266ed30] Language: es-MX, Name: Paulina, Quality: Default [com.apple.ttsbundle.Paulina-compact]
    [AVSpeechSynthesisVoice 0x28266d2d0] Language: fi-FI, Name: Satu, Quality: Default [com.apple.ttsbundle.Satu-compact]
    [AVSpeechSynthesisVoice 0x28266fe40] Language: fr-CA, Name: Amélie, Quality: Default [com.apple.ttsbundle.Amelie-compact]
    [AVSpeechSynthesisVoice 0x28266f620] Language: fr-FR, Name: Daniel, Quality: Default [com.apple.ttsbundle.siri_male_fr-FR_compact]
    [AVSpeechSynthesisVoice 0x28266fbc0] Language: fr-FR, Name: Marie, Quality: Default [com.apple.ttsbundle.siri_female_fr-FR_compact]
    [AVSpeechSynthesisVoice 0x28266fb20] Language: fr-FR, Name: Thomas, Quality: Default [com.apple.ttsbundle.Thomas-compact]
    [AVSpeechSynthesisVoice 0x28266fd30] Language: he-IL, Name: Carmit, Quality: Default [com.apple.ttsbundle.Carmit-compact]
    [AVSpeechSynthesisVoice 0x28266d820] Language: hi-IN, Name: Lekha, Quality: Default [com.apple.ttsbundle.Lekha-compact]
    [AVSpeechSynthesisVoice 0x28266f070] Language: hu-HU, Name: Mariska, Quality: Default [com.apple.ttsbundle.Mariska-compact]
    [AVSpeechSynthesisVoice 0x28266ed70] Language: id-ID, Name: Damayanti, Quality: Default [com.apple.ttsbundle.Damayanti-compact]
    [AVSpeechSynthesisVoice 0x282631210] Language: it-IT, Name: Alice, Quality: Default [com.apple.ttsbundle.Alice-compact]
    [AVSpeechSynthesisVoice 0x28266ef30] Language: ja-JP, Name: Hattori, Quality: Default [com.apple.ttsbundle.siri_male_ja-JP_compact]
    [AVSpeechSynthesisVoice 0x28266d510] Language: ja-JP, Name: Kyoko, Quality: Default [com.apple.ttsbundle.Kyoko-compact]
    [AVSpeechSynthesisVoice 0x28266e840] Language: ja-JP, Name: O-ren, Quality: Default [com.apple.ttsbundle.siri_female_ja-JP_compact]
    [AVSpeechSynthesisVoice 0x28266ea90] Language: ko-KR, Name: Yuna, Quality: Default [com.apple.ttsbundle.Yuna-compact]
    [AVSpeechSynthesisVoice 0x28266f6e0] Language: nl-BE, Name: Ellen, Quality: Default [com.apple.ttsbundle.Ellen-compact]
    [AVSpeechSynthesisVoice 0x28266f6a0] Language: nl-NL, Name: Xander, Quality: Default [com.apple.ttsbundle.Xander-compact]
    [AVSpeechSynthesisVoice 0x28266dc80] Language: no-NO, Name: Nora, Quality: Default [com.apple.ttsbundle.Nora-compact]
    [AVSpeechSynthesisVoice 0x28266d020] Language: pl-PL, Name: Zosia, Quality: Default [com.apple.ttsbundle.Zosia-compact]
    [AVSpeechSynthesisVoice 0x28266e930] Language: pt-BR, Name: Luciana, Quality: Default [com.apple.ttsbundle.Luciana-compact]
    [AVSpeechSynthesisVoice 0x28266e1b0] Language: pt-PT, Name: Joana, Quality: Default [com.apple.ttsbundle.Joana-compact]
    [AVSpeechSynthesisVoice 0x28266cfb0] Language: ro-RO, Name: Ioana, Quality: Default [com.apple.ttsbundle.Ioana-compact]
    [AVSpeechSynthesisVoice 0x28266ee50] Language: ru-RU, Name: Milena, Quality: Default [com.apple.ttsbundle.Milena-compact]
    [AVSpeechSynthesisVoice 0x28266eee0] Language: sk-SK, Name: Laura, Quality: Default [com.apple.ttsbundle.Laura-compact]
    [AVSpeechSynthesisVoice 0x28266e070] Language: sv-SE, Name: Alva, Quality: Default [com.apple.ttsbundle.Alva-compact]
    [AVSpeechSynthesisVoice 0x28266d470] Language: th-TH, Name: Kanya, Quality: Default [com.apple.ttsbundle.Kanya-compact]
    [AVSpeechSynthesisVoice 0x28266f1d0] Language: tr-TR, Name: Yelda, Quality: Default [com.apple.ttsbundle.Yelda-compact]
    [AVSpeechSynthesisVoice 0x28266db10] Language: zh-CN, Name: Tian-Tian (Enhanced), Quality: Enhanced [com.apple.ttsbundle.Ting-Ting-premium]
    [AVSpeechSynthesisVoice 0x28266d890] Language: zh-CN, Name: Li-mu, Quality: Default [com.apple.ttsbundle.siri_male_zh-CN_compact]
    [AVSpeechSynthesisVoice 0x28266d4c0] Language: zh-CN, Name: Tian-Tian, Quality: Default [com.apple.ttsbundle.Ting-Ting-compact]
    [AVSpeechSynthesisVoice 0x28266ea60] Language: zh-CN, Name: Yu-shu, Quality: Default [com.apple.ttsbundle.siri_female_zh-CN_compact]
    [AVSpeechSynthesisVoice 0x28266f140] Language: zh-HK, Name: Sin-Ji, Quality: Default [com.apple.ttsbundle.Sin-Ji-compact]
    [AVSpeechSynthesisVoice 0x28266ef10] Language: zh-TW, Name: Mei-Jia, Quality: Default [com.apple.ttsbundle.Mei-Jia-compact]
    [AVAlexSpeechSynthesisVoice 0x282630950] Language: en-US, Name: Alex, Quality: Enhanced [com.apple.speech.voice.Alex]
    

    正如下面的 Axello cmets,这显然不包括 iPhone 偏好设置中可用的 en-AU 男声“Lee”。看来他目前无法通过此 API 获得。也许他会及时添加,但鉴于可用的声音看起来不像他们已经改变了since 30th December 2015,我不会为此屏住呼吸。

    设置

    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.
    

    回答

    我们可以直接选择亚历克斯的声音,使用AVSpeechSynthesisVoice(identifier: AVSpeechSynthesisVoiceIdentifierAlex),但奇怪的是,Apple 迄今为止提供的唯一标识符是亚历克斯。 ?

    对于任何其他声音(声音名称再次参见上面的列表),使用以下代码:

    // 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
            }
        } 
    }
    

    (这可以使用filter() 比循环更优雅地完成,但我不熟悉 Swift 中的语法,所以如果有兴趣,请参考here,或者如果你知道如何,请留下评论写出来)。

    至于标有“Siri”的声音,我不知道。也许它们与AVSpeechSynthesisVoice 无关?如果您知道它们背后的交易,欢迎发表评论。

    【讨论】:

    • 我想我也尝试过类似的方法,但是 AVSpeechSynthesisVoice.speechVoices 根本没有给你任何指示这是什么 Karen,或者它是否被增强等等。也许它现在可以在 iOS 10 中使用,但我不抱太大希望。
    • @axello 我只在speechVoices 和 iPhone 偏好设置中看到了一个 Karen——en-AU 的那个。而且据我所知(普通话的声音很明显),如果已下载增强的声音,将自动使用增强的声音而不是正常的声音。
    • 有趣。在 iPhone 偏好设置中,我还看到了英语(澳大利亚)的“Lee”(404MB)下载。我不知道它会自动采用增强型语音,因为您可以在“设置”应用中进行选择。
    • @axello 我已经通过对 Lee 的调查更新了我的答案。是的,看起来你只是不能使用他? 我想再次检查我是否正确地记住了自动选择增强声音并稍后在帖子中确认 - 显然我不能只是快速检查不过现在是 Swift Playground。
    • 我想我应该为此提交一份雷达报告。
    【解决方案2】:

    跟进 Jamie 的回答(我相信现在的 iOS 11.3 也适用于早期版本):

    对于其他声音,标识符的结构为“com.apple.ttsbundle.Kanya-compact”

    您可以通过以下方式获得那些可用的:

    let voices = AVSpeechSynthesisVoice.speechVoices()
    for voice in voices {
        print (voice.identifier + " " + s.language + " " + s.name)
    }
    

    并通过标识符或语言设置声音。

    //set utterance first!
    speechUtter = AVSpeechUtterance(string:"أتمنى لك نهارا سعيد")
    
    speechUtter.voice = AVSpeechSynthesisVoice(identifier: "com.apple.ttsbundle.Maged-compact") 
    

    speechUtter.voice = AVSpeechSynthesisVoice(language: "ar-SA")
    

    【讨论】:

      【解决方案3】:

      你可以使用这个简单的命令 print(AVSpeechSynthesisVoice.speechVoices())

      【讨论】:

        【解决方案4】:

        虽然这是一个老问题,但在我的观察中,AVSpeechSynthesisVoice.speechVoices() 列出了所有设备上可用的声音

        如果您进入 iPhone 上的语音偏好设置

        (至少从 iOS 14.5 开始)

        Settings -> Accessibility -> Spoken Content -> Voices

        您可以在屏幕上选择一种语言,然后可以下载其他声音。我亲自下载了英国英语Daniel (Enhanced) 语音,它与iOS 默认包含的语音非常相似,但嗯……增强了。顺便说一句,它在语音列表中列为Daniel (Enhanced),标识符为com.apple.ttsbundle.Daniel-premium

        如果我错了,欢迎任何人纠正我,但据我所知,没有办法列出任何未下载的声音,也没有办法提供要下载的声音列表。

        我希望这对将来有关 iOS 语音的一些人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-14
          • 1970-01-01
          • 2014-01-04
          相关资源
          最近更新 更多