13

目標は wo3 のような発音ができるようになることです。System.Speech は漢字を扱えますが、ピンインを直接入力する方法はありますか? http://msdn.microsoft.com/en-us/library/ms720566(v=vs.85).aspxから、ピンインをそのように書き出せるはずだと思われます

<PRON SYM="ni 3"/>

PRON SYM の使用方法を教えてください。

更新: この問題について説明しているが解決策がない Web ページをいくつか示します。

Update2 .NET で System.Speech.Synthesizer を使用しています。おそらくこれが問題です。Speech Properties への入力が正常に機能することがわかります。

ここに画像の説明を入力

C# からこれを行うと、タグを読み取るだけです。

        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\"/>");
        }
4

3 に答える 3

5

私はこの例を作成しましたが、問題なく動作します。中国語を話せないので、自動翻訳を使用してサンプルの単語を取得します。

フォームのデザインは次のとおりです。

ここに画像の説明を入力

そして、これがその背後にあるコードです。中国語の音素テーブルから音素を取得します。

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);

            }
        }
    }
}

テストする前に、必ず ComboBox から (Microsoft Simplified Chinese) を選択してください。お持ちでない場合は、Microsoft Speech の言語パッケージ (SpeechSDK51LangPack.exe) をダウンロードできます。

編集:

SpeechSynthesizer では、pron => 音素および 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\">变&lt;/phoneme></speak>";
    sp.SpeakSsml(s);
}
于 2011-06-22T17:06:34.413 に答える
0

あなたは試しましたか:

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

?

また、ここで確認することもできます。

于 2011-06-21T18:09:09.763 に答える
0

あなたの例は少し修正する必要があると思います....

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);
}
于 2011-06-22T18:03:58.627 に答える