none
SAPI TTS返回音素乱码 RRS feed

  • 问题

  • 我的电脑是win10系统,最近做一个项目,需要用到SAPI的TTS,通过其返回的音素以及时长去计算口型,从而达到3d虚拟人物口型与声音实时同步的目的。

    但是我在开发过程中,发现返回的音素视乱码的,完全不明白是什么意思,获取到的音素于官方提供的音素列表不一致,请教一下各位网友,这个现象是什么原因造成的?

    我的代码是根据官网的文档写的,地址如下 https://msdn.microsoft.com/zh-cn/library/system.speech.synthesis.phonemereachedeventargs.aspx(抱歉刚注册,正文不能包含图片和链接)


    代码:

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Speech.Synthesis;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace SAPI_TTS
    {
        class Program
        {
            private static List<string> listPhome = new List<string>()
                ;
            static void Main(string[] args)
            {
                // Initialize a new instance of the SpeechSynthesizer.
                SpeechSynthesizer synth = new SpeechSynthesizer();
                // Configure the audio output. 
                synth.SetOutputToDefaultAudioDevice();
                // Register for the PhonemeReached event.
                synth.PhonemeReached += new EventHandler<PhonemeReachedEventArgs>(synth_PhonemeReached);
                synth.SpeakCompleted += new EventHandler<SpeakCompletedEventArgs>(SpeakCompleted);
                // Speak the contents of a string.
                synth.SpeakAsync("你好,欢迎光临");
                Console.ReadKey();
            }
    
            // Write information about each phoneme as it is reached.
            private static void synth_PhonemeReached(object sender, PhonemeReachedEventArgs e)
            {
                Console.WriteLine(string.Format(
    
                   "  Phoneme reached summary:" + Environment.NewLine +
                   "    Phoneme:                 {0}" + Environment.NewLine +
                   "    Audio Position:         {1} mSec" + Environment.NewLine +
                   "    Duration:                  {2} mSec" + Environment.NewLine +
                   "    Emphasis:                {3}" + Environment.NewLine +
                   "    Next Phoneme:         {4}" + Environment.NewLine + Environment.NewLine,
                   e.Phoneme,
                   e.AudioPosition,
                   e.Duration,
                   e.Emphasis,
                   e.NextPhoneme));
                listPhome.Add(e.Phoneme);
            }
    
            private static void SpeakCompleted(object sender, SpeakCompletedEventArgs e)
            {
              
                 Console.WriteLine(listPhome);
            }
        }
    }

    通过端点调试,发现返回的音素如下:

    -        listPhome    Count = 15    System.Collections.Generic.List<string>
            [0]    "\a"    string
            [1]    "ç"    string
            [2]    "\v"    string
            [3]    ""    string
            [4]    "\f"    string
            [5]    "\a"    string
            [6]    "‹"    string
            [7]    "\n"    string
            [8]    "ź"    string
            [9]    "\v"    string
            [10]    "y"    string
            [11]    "\n"    string
            [12]    "¿"    string
            [13]    "\v"    string
            [14]    "\a"    string

    2017年8月23日 8:11

全部回复

  • Hi 丁甲辰,

    感谢你在MSDN发帖。

    根据你问题的描述,你的问题应该是涉及Text-to-Speech API的问题。

    我建议你去下面的论坛发帖,Bing > Speech Service for Developers 。 我会把当前的帖子移到一般讨论区。

    根据我搜索的结果,下面有使用speech的具体步骤, 希望对你有所帮助。

    https://msdn.microsoft.com/en-us/library/ee125082(v=vs.85).aspx

    Best  Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年8月24日 7:10