【问题标题】:How can I set and send a language on a device with Speechsynthezier? (Windows.Media.Speechsynthesis)如何使用语音合成器在设备上设置和发送语言? (Windows.Media.Speechsynthesis)
【发布时间】:2019-03-05 09:02:25
【问题描述】:

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

我正在做一个 UWP-Project,所以我只能使用 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();

    }

【问题讨论】:

    标签: c# uwp speechsynthesizer


    【解决方案1】:

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

    之后,进入左侧菜单的语音,设置语音语言。

    【讨论】:

    • 我已经这样做了,还是谢谢你。我想我的问题写得不好,但我想在设备上发送一个请求,该设备可以更改已经安装的设备语言(从德语到英语,从英语到西班牙语等)
    • @CookieMax 没有 API 可让您直接更改设备语言。您只能Launch the Windows Settings app 让用户在 Windows 设置中更改它。
    【解决方案2】:

    我发现我需要添加 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 的原因,它应该将它从数组中取出并将代码放入其中)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多