You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C#获取Windows 10中某语言的所有已安装语音?

获取同一语言下所有区域变体的已安装语音

好问题!我之前做语音合成相关功能时也碰到过这个痛点——直接传入特定区域的CultureInfo(比如es-ES)会过滤掉同语言下其他区域的语音包(比如es-MEX)。这里有个简单有效的解决思路:

核心思路

先获取系统中所有已安装的语音,再通过语音文化信息里的双字母语言代码来筛选同一语言的所有变体。因为同一语言的不同区域版本(比如西班牙语的es-ES、es-MEX、es-AR),它们的TwoLetterISOLanguageName都是相同的(都是"es")。

代码实现

using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Speech.Synthesis;

// 初始化语音合成器
var synthesizer = new SpeechSynthesizer();

// 获取所有已安装的语音
var allInstalledVoices = synthesizer.GetInstalledVoices();

// 筛选西班牙语的所有语音(忽略区域差异)
var spanishVoices = allInstalledVoices
    .Where(voice => 
        voice.VoiceInfo.Culture.TwoLetterISOLanguageName.Equals(
            "es", 
            StringComparison.OrdinalIgnoreCase
        )
    )
    .ToList();

// 遍历输出筛选结果
foreach (var voice in spanishVoices)
{
    Console.WriteLine($"语音名称: {voice.VoiceInfo.Name}, 区域: {voice.VoiceInfo.Culture.Name}");
}

补充说明

  • 如果你需要针对其他语言筛选,只需要把"es"换成对应语言的双字母代码即可(比如中文是"zh",英语是"en")。
  • 要是你想更精准匹配宏观语言(比如区分中文简体/繁体,但它们的双字母代码都是"zh"),也可以结合ThreeLetterISOLanguageName或者判断CultureInfo的Parent属性,但双字母代码的方式已经能覆盖绝大多数场景。

内容的提问来源于stack exchange,提问作者GordonBooker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:45