Подтвердить что ты не робот

С помощью SAPI есть способ ввода пиньинь для китайского произношения?

Цель состоит в том, чтобы произносить что-то вроде wo3. System.Speech может обрабатывать китайские символы, но есть ли способ ввода пиньинь напрямую? Кажется, из http://msdn.microsoft.com/en-us/library/ms720566(v=vs.85).aspx, чтобы я мог написать пиньинь так

<PRON SYM="ni 3"/>

Как использовать PRON SYM?

Update: Вот некоторые веб-страницы, которые обсуждают проблему, но без решения: - http://www.ms-news.net/f3012/problem-with-phonemes-and-chinese-tts-3031240.html

Update2 Я использую System.Speech.Synthesizer в .NET. Возможно, это и есть проблема. Я вижу, что ввод его в свойства речи отлично работает:

enter image description here

Если я делаю это с С#, он просто читает тег:

        var culture = CultureInfo.GetCultureInfo("zh-CN");
        var synth = new SpeechSynthesizer();
        var voices = synth.GetInstalledVoices(culture);

        if (voices.Count > 0)
        {
            synth.SelectVoice(voices[0].VoiceInfo.Name);
            synth.Speak("<pron sym=\"ni 3 hao 3 xiao 1\"/>");
        }
4b9b3361

Ответ 1

Ive сделал этот пример, и он отлично работает, я не говорю по-китайски, поэтому я использую автоматический переводчик, чтобы получить образец слова.

Вот дизайн формы:

enter image description here

И вот код, стоящий за ним; Я получаю фонему из таблицы китайских фонем.

using System;
using System.Windows.Forms;
using SpeechLib;

namespace SpeechDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            //get installed voices
            SpVoice voice = new SpVoice();
            foreach (var item in voice.GetVoices())
            {
                comboBox1.Items.Add(((ISpeechObjectToken)item).GetDescription());
            }
        }

        private void btnSpeakPhonems_Click(object sender, EventArgs e)
        {
            if (comboBox1.SelectedIndex > 0)
            {
                SpVoice voice = new SpVoice();
                voice.Voice = voice.GetVoices().Item(comboBox1.SelectedIndex);
                voice.Speak("<pron sym=\"ang 1 zang 1\">变脏</pron>", SpeechVoiceSpeakFlags.SVSFlagsAsync);

            }
        }
    }
}

Обязательно выберите (Microsoft Simplified Chinese) из ComboBox перед тестированием. Если у вас его нет, вы можете загрузить языковой пакет Microsoft Speech (SpeechSDK51LangPack.exe).

Edit:

в SpeechSynthesizer pron = > phoneme и sym = > ph. здесь код отлично работает с SpeechSynthesizer:

private void button1_Click(object sender, EventArgs e)
{
    var cu = CultureInfo.GetCultureInfo("zh-CN");
    SpeechSynthesizer sp = new SpeechSynthesizer();
    var voices = sp.GetInstalledVoices(cu);
    sp.SelectVoice(voices[0].VoiceInfo.Name);
    string s = "<?xml version=\"1.0\"?> <speak version=\"1.0\" xml:lang=\"zh-CN\"><phoneme ph=\"ang 1 zang 1\">变</phoneme></speak>";
    sp.SpeakSsml(s);
}

Ответ 2

Вы пробовали с:

<PRON SYM="ni 3"> sometext</PRON>

?

Также вы можете проверить здесь.

Ответ 3

Я думаю, что ваш пример просто нуждается в небольшой модификации....

if (voices.Count > 0)        
{
     synth.SelectVoice(voices[0].VoiceInfo.Name);
     PromptBuilder pb = new PromptBuilder();
     pb.AppendSsml("<pron sym=\"ni 3 hao 3 xiao 1\"/>");
     synth.Speak(pb);
}