Изменение языка синтезатора речи и его чтение - PullRequest
0 голосов
/ 06 июня 2018

У меня есть форма описания, которая содержит метки и 3 кнопки (btntts, btnstop и btnchinese), я также уже ссылался на System.Speech.dll.Как видно из приведенного ниже кода, при щелчке он будет извлекать данные, содержащие китайское описание, из базы данных для заполнения меток.

private void btnchinese_Click(object sender, EventArgs e)
        {
            if (btnchinese.Text == "Chinese")
            {
                using (SqlConnection sqlcon = new SqlConnection(connectionstring))
                {
                    sqlcon.Open();
                    using (SqlCommand sqlcom = new SqlCommand("Select * from DishRepresentation WHERE Dish_ID='" + lblid.Text + "' and DishLanguage='Chinese'", sqlcon))
                    {
                        SqlDataReader sqldr = sqlcom.ExecuteReader();
                        sqldr.Read();
                        lbldescription.Text = sqldr["DishDescription"].ToString();
                        lbldishname.Text = sqldr["DishName"].ToString();
                        lbldisheatbenefit.Text = sqldr["DishHealthBenefit"].ToString();
                        lblbenefit.Text = sqldr["DishBenefit"].ToString();
                        lblbenefit2.Text = sqldr["DishBenefit2"].ToString();
                        lblbenefit3.Text = sqldr["DishBenefit3"].ToString();
                        lblbenefit4.Text = sqldr["DishBenefit4"].ToString();
                        lblbenefit5.Text = sqldr["DishBenefit5"].ToString();
                    }
                }

                btnchinese.Text = "英语";
                btnstopspeech.Text = "停止阅读";

Что касается btntts, он будет читать заполненный текст. (Код ниже)

private void btnTTS_Click(object sender, EventArgs e)
        {
            pbuilder = new PromptBuilder();
            speaker2 = new SpeechSynthesizer();
            if (btnchinese.Text == "英语")
            {
                var culture = CultureInfo.GetCultureInfo("zh-CN");
                var voices = speaker2.GetInstalledVoices(culture);
                speaker.Rate = -2;
                pbuilder.AppendText(lbldishname.Text);
                SetTimer(2000);
                pbuilder.AppendText(lbldescription.Text);
                speaker2.SpeakAsync(pbuilder);
            }
            else if (btnchinese.Text == "Chinese")
            {
                var culture = CultureInfo.GetCultureInfo("en-US");
                var voices = speaker2.GetInstalledVoices(culture);
                speaker.Rate = -2;
                pbuilder.AppendText(lbldishname.Text);
                SetTimer(2000);
                pbuilder.AppendText(lbldescription.Text);
                speaker2.SpeakAsync(pbuilder);
            }
        }

ПРИМЕЧАНИЕ. Если метка заполнена на английском языке, btntts работает как требуется и читаетярлыки для пользователя.Однако он не будет читать, когда он заполнен китайским языком.Как я могу заставить его читать по-китайски?

1 Ответ

0 голосов
/ 06 июня 2018

Вы не установили голос.Поэтому он будет использовать голос по умолчанию (в данном случае, английский) для чтения текста.

Используйте SelectVoice , чтобы установить голос.

Использоватьметод GetInstalledVoices и класс VoiceInfo для получения имен выбранных голосов преобразования текста в речь (TTS), которые вы можете выбрать.Чтобы выбрать голос, передайте все содержимое свойства Name в качестве аргумента для метода SelectVoice.

var pbuilder = new PromptBuilder();
var speaker2 = new SpeechSynthesizer();
speaker2.Rate = -2;

var culture = CultureInfo.GetCultureInfo("zh-CN");
var voices = speaker2.GetInstalledVoices(culture);
if (voices.Count > 0) //Chinese voices found
{
    speaker2.SelectVoice(voices[0].VoiceInfo.Name); //you need to call this API
    pbuilder.AppendText("hello 你好");   
    speaker2.SpeakAsync(pbuilder);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...