0

在编程方面我是个菜鸟,但我想制作一个语言请求处理程序,在其中我得到一个数组(语法:说语言文本),将其拆分,将设备语言设置为给我的语言和让设备说出给出的文本。我真的找不到任何关于在设备上设置语言的信息。

我正在做一个 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();

    }
4

2 回答 2

0

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

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

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

于 2019-03-11T13:19:48.093 回答
0

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

在此处输入图像描述

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

在此处输入图像描述

于 2019-03-06T07:44:29.590 回答