C# 调用TTS 并输出WAV

.net4.0
using System.Speech;
using System.Speech.Synthesis;
using System.Windows.Forms;
1、输出语音
            Type type = Type.GetTypeFromProgID("SAPI.SpVoice");
            dynamic spVoice = Activator.CreateInstance(type);
            spVoice.Speak("孙悟空,白骨精,唐僧!哈哈哈哈");
2、输出WAV 文件
    SaveFileDialog  file = new SaveFileDialog();
            file.Title = "保存音频文件";
            file.InitialDirectory = ".\\";//对话框的初始目录
            file.Filter = "音频文件|*.wav";// 要在对话框中显示的文件筛选器
            file.RestoreDirectory = true;//控制对话框在关闭之前是否恢复当前目录
            file.FilterIndex = 1;//在对话框中选择的文件筛选器的索引,如果选第一项就设为1
            file.AddExtension = true;
            if (file.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                int cnVoice, enVoice;
                Type type = Type.GetTypeFromProgID("SAPI.SpVoice");
                dynamic spVoice = Activator.CreateInstance(type);
                dynamic colVoice = spVoice.GetVoices();//‘获得语音引擎集合
                spVoice.Volume = 100;// ‘设置音量,0到100,数字越大音量越大
                spVoice.Rate = 0;//
                string langCN = "MSSimplifiedChineseVoice";// ‘简体中文
                string langEN = "MSSam";// ‘如果安装了TTS Engines 5.1,还可以选择MSMike,MSMary
                for (int i = 0; i < colVoice.Count; i++)
                {
                    if (colVoice[i].Id == langCN)
                        cnVoice = i;
                    if (colVoice[i].Id == langEN)
                        enVoice = i;
                }
                int SSFMCreateForWrite = 3;
                int SAFT22kHz16BitMono = 22;
                int SVSFlagsAsync = 1;
                string strText = "测试TTS";
                Type type2 = Type.GetTypeFromProgID("SAPI.SpFileStream");
                dynamic objFileStream = Activator.CreateInstance(type2);
                objFileStream.Format.Type = SAFT22kHz16BitMono;
                objFileStream.Open(file.FileName, SSFMCreateForWrite, false);
                spVoice.AudioOutputStream = objFileStream;
                spVoice.Speak(strText, SVSFlagsAsync);
                spVoice.WaitUntilDone(-1);
                objFileStream.Close();
可参考:
http://blog.sina.com.cn/s/blog_54be98b80102v5yw.html
http://msdn.microsoft.com/en-us/library/ms723602(VS.85).aspx
 

猜你喜欢

转载自blog.csdn.net/qq_38173650/article/details/84780992