Как я могу установить и отправить язык на устройстве с Speechsynthezier?(Windows.Media.Speechsynthesis) - PullRequest
0 голосов
/ 05 марта 2019

Я новичок, когда дело доходит до программирования, но я хотел бы создать обработчик запросов языка, в котором я получаю массив (синтаксис: скажем, текст на языке), разделяю его, устанавливаю язык устройства на языке выдачии позвольте устройству произносить данный текст.Я ничего не мог найти о настройке языка на устройстве.

Я занимаюсь проектом 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 голосов
/ 11 марта 2019

Я обнаружил, что мне нужно добавить функцию 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, он должен вынуть его из массива и поместить код вона)

0 голосов
/ 06 марта 2019

Вы можете открыть 'Настройки Windows -> Время и язык -> Язык -> Добавить язык -> Выбрать один язык и нажать кнопку Параметры -> Нажмите кнопку Загрузить под речью' .

enter image description here

После этого перейдите к Речь в левом меню и установите язык речи.

enter image description here

...