如何使用Speechsynthezier在设备上设置和发送语言? (Windows.Media.Speechsynthesis)

时间:2019-03-05 09:02:25

标签: c# uwp speechsynthesizer

在编程方面,我是一个菜鸟,但是我想创建一个Language Request-Handler,在其中获得一个数组(语法:说语言文本),将其拆分,然后在该语言上设置设备语言给我,让设备说出给定的文字。我真的找不到有关在设备上设置语言的任何信息。

我正在做一个UWP项目,所以我只能使用Windows.Media.Speechsynthezier。

这是我目前的代码(未完成!):

///公共类LanguageRequestHandler

    string _request;
    SpeechSynthesizer synth;
    private SpeechSynthesizer _synth;



    public LanguageRequestHandler( string request)
    {
        _request = request;
        _synth = new SpeechSynthesizer();
        var voice = SpeechSynthesizer.AllVoices.SingleOrDefault(i => i.Gender == VoiceGender.Female) ?? SpeechSynthesizer.DefaultVoice;
        _synth.Voice = voice;

    }

///这只是对发送给我的命令是否具有正确调用的检查

    public string GetResponse()
    {

        string response = "invalid command";
        string[] args = _request.Split(' ');
        if (args[0] == "say")
        {
            response = CheckLanguage(args[1]);
        }

        return response;
    }

///在这里,我想检查要求的语言,而我实际上是想设置设备应该说的语言(但据您所知,它尚未完成)

    public string CheckLanguage(string language)
    {
        string response = "No language selected";

        string[] args = _request.Split(' ');


        if (language == "spanish")
        {

        }
        else if(language == "english")
        {

        }
        else if (language == "german")
        {

        }
        else if (language == "french")
        {

        }

        return language;
    }

//在这里,我将文本提供给我,然后将其放到一个句子中,稍后再翻译

    public string Text(string text)
    {
        string response = "No text given to translate";
        string[] args = _request.Split(' ');

        for (int i = 2; i < args.Length; i++)
        {
            response += args[i] + " ";

        }

        return text;
    }

//最后,我正在尝试设置设备的音量以及从文本到语音的合成,然后将其传输到设备并让其讲话

    public async void Talk(string message)
    {
        MediaPlayer mp = new MediaPlayer { Volume = 100 };

        var stream = await _synth.SynthesizeTextToStreamAsync(message);
        mp.Source = MediaSource.CreateFromStream(stream, stream.ContentType);
        mp.Play();

    }

2 个答案:

答案 0 :(得分:0)

您可以打开“ Windows设置->时间和语言->语言->添加语言->选择一种语言,然后单击选项按钮->单击语音下方的下载按钮”

enter image description here

然后,转到左侧菜单上的语音并设置语音语言。

enter image description here

答案 1 :(得分:0)

我发现我需要添加Language.Contains()函数来设置或更改语言。请注意,您需要为所需的语言插入BCP47代码(示例: i.Language.Contains(“ fr-FR”)(法语)

“ var voice = SpeechSynthesizer.AllVoices.SingleOrDefault(i => i.Gender == VoiceGender.Female && i.Language.Contains(_request))?? SpeechSynthesizer.DefaultVoice;”

由于我找到了解决此问题的方法,因此我需要以某种方式拆分给我的_request(因为语法为“ say”),然后在其中提供BCP47代码(这就是为什么我将方法设为Checklanguage,应该将其从数组中取出并将代码放入其中)