Ejemplo n.º 1
0
        public void CloseXunFei()
        {
            int ret = TTSDll.MSPLogout();

            if (ret != 0)
            {
                throw new Exception("逆初始化TTS引擎错误,错误代码:" + ret);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 语音识别
        /// </summary>
        /// <param name="text"></param>文本内容
        public void SpeechTest(String text, string ent, string vcn)
        {
            try
            {
                ///APPID请勿随意改动
                string login_configs = "appid =59c4ae84 ";//登录参数,自己注册后获取的appid
                if (string.IsNullOrEmpty(text.Trim()))
                {
                    text = "请输入合成语音的内容";
                }

                //string filename = "Call.wav"; //合成的语音文件
                uint audio_len = 0;

                SynthStatus synth_status = SynthStatus.MSP_TTS_FLAG_STILL_HAVE_DATA;
                ret = TTSDll.MSPLogin(string.Empty, string.Empty, login_configs);//第一个参数为用户名,第二个参数为密码,第三个参数是登录参数,用户名和密码需要在http://open.voicecloud.cn
                //MSPLogin方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return;
                }
                string _params = "ssm=1,ent=" + ent + ",vcn=" + vcn + ",spd=medium,aue=speex-wb;7,vol=x-loud,auf=audio/L16;rate=16000";
                session_ID = TTSDll.QTTSSessionBegin(_params, ref ret);
                //QTTSSessionBegin方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return;
                }
                ret = TTSDll.QTTSTextPut(Ptr2Str(session_ID), text, (uint)Encoding.Default.GetByteCount(text), string.Empty);
                //QTTSTextPut方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return;
                }

                MemoryStream memoryStream = new MemoryStream();
                memoryStream.Write(new byte[44], 0, 44);
                while (true)
                {
                    IntPtr source = TTSDll.QTTSAudioGet(Ptr2Str(session_ID), ref audio_len, ref synth_status, ref ret);
                    byte[] array  = new byte[(int)audio_len];
                    if (audio_len > 0)
                    {
                        Marshal.Copy(source, array, 0, (int)audio_len);
                    }
                    memoryStream.Write(array, 0, array.Length);
                    Thread.Sleep(1000);
                    if (synth_status == SynthStatus.MSP_TTS_FLAG_DATA_END || ret != 0)
                    {
                        break;
                    }
                }
                WAVE_Header wave_Header = getWave_Header((int)memoryStream.Length - 44);
                byte[]      array2      = this.StructToBytes(wave_Header);
                memoryStream.Position = 0L;
                memoryStream.Write(array2, 0, array2.Length);
                memoryStream.Position = 0L;
                SoundPlayer soundPlayer = new SoundPlayer(memoryStream);
                soundPlayer.Stop();
                soundPlayer.Play();
                //if (filename != null)
                //{
                //    FileStream fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write);
                //    memoryStream.WriteTo(fileStream);
                //    memoryStream.Close();
                //    fileStream.Close();
                //}
            }
            catch (Exception)
            {
            }
            finally
            {
                ret = TTSDll.QTTSSessionEnd(Ptr2Str(session_ID), "");
                ret = TTSDll.MSPLogout();//退出登录
            }
        }
Ejemplo n.º 3
0
        private MemoryStream GetAudioData(string str)
        {
            int    ret = 0;
            IntPtr session_ID;
            //APPID请勿随意改动
            string      login_configs = "appid = 5ac9f8d1"; //登录参数,自己注册后获取的appid
            string      text          = str;                //text是待合成文本
            uint        audio_len     = 0;
            SynthStatus synth_status  = SynthStatus.MSP_TTS_FLAG_STILL_HAVE_DATA;

            ret = TTSDll.MSPLogin(string.Empty, string.Empty, login_configs); //第一个参数为用户名,第二个参数为密码,第三个参数是登录参数,用户名和密码需要在http://open.voicecloud.cn
                                                                              //MSPLogin方法返回失败
            if (ret != (int)ErrorCode.MSP_SUCCESS)
            {
                return(null);
            }
            //string parameter = "engine_type = local, voice_name=xiaoyan, tts_res_path =fo|res\\tts\\xiaoyan.jet;fo|res\\tts\\common.jet, sample_rate = 16000";
            string _params = "ssm=1,ent=sms16k,vcn=xiaoyan,spd=medium,aue=speex-wb;7,vol=x-loud,auf=audio/L16;rate=16000";

            //string @params = "engine_type = local,voice_name=xiaoyan,speed=50,volume=50,pitch=50,rcn=1, text_encoding = UTF8, background_sound=1,sample_rate = 16000";
            session_ID = TTSDll.QTTSSessionBegin(_params, ref ret);
            //QTTSSessionBegin方法返回失败
            if (ret != (int)ErrorCode.MSP_SUCCESS)
            {
                return(null);
            }
            ret = TTSDll.QTTSTextPut(Ptr2Str(session_ID), text, (uint)Encoding.Default.GetByteCount(text), string.Empty);
            //QTTSTextPut方法返回失败
            if (ret != (int)ErrorCode.MSP_SUCCESS)
            {
                return(null);
            }
            //内存流可直接在内存进行读写,不需要临时缓冲区或者临时文件
            MemoryStream memoryStream = new MemoryStream();

            memoryStream.Write(new byte[44], 0, 44);//为结构体开辟空间,后面用来存储音频文件结构体
            while (true)
            {
                IntPtr source = TTSDll.QTTSAudioGet(Ptr2Str(session_ID), ref audio_len, ref synth_status, ref ret);
                byte[] array  = new byte[(int)audio_len];
                if (audio_len > 0)
                {
                    Marshal.Copy(source, array, 0, (int)audio_len);
                }
                memoryStream.Write(array, 0, array.Length); //将合成的音频字节数据存放到内存流中
                Thread.Sleep(150);                          //防止CPU频繁占用
                if (synth_status == SynthStatus.MSP_TTS_FLAG_DATA_END || ret != 0)
                {
                    break;
                }
            }
            WAVE_Header wave_Header = getWave_Header((int)memoryStream.Length - 44);

            byte[] array2 = StructToBytes(wave_Header);
            memoryStream.Position = 0L;                           //将指针定位到开头
            memoryStream.Write(array2, 0, array2.Length);         //存储结构体的字节数组
            memoryStream.Position = 0L;                           //将指针定位到开头

            ret = TTSDll.QTTSSessionEnd(Ptr2Str(session_ID), ""); //结束会话
            ret = TTSDll.MSPLogout();                             //退出登录

            return(memoryStream);
        }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="text">要转换的文字</param>
        /// <param name="guisy">生成声音文件的标识</param>
        public string txt2ShengYin(string text, string guisy)
        {
            try
            {
                ///APPID请勿随意改动
                string login_configs = ZmConfig.XunFeiAppId;//登录参数,自己注册后获取的appid
                if (string.IsNullOrEmpty(text))
                {
                    return("请输入合成语音的内容");
                }

                string      filename     = guisy + ".wav"; //合成的语音文件
                uint        audio_len    = 0;
                SynthStatus synth_status = SynthStatus.MSP_TTS_FLAG_STILL_HAVE_DATA;

                //第一个参数为用户名,第二个参数为密码,第三个参数是登录参数,用户名和密码需要在http://open.voicecloud.cn
                //                usr[in] 此参数保留,传入NULL即可。
                //pwd[in] 此参数保留,传入NULL即可。
                //params[in] 参见下表:
                //格式说明:每个参数和参数值通过key=value的形式组成参数对;如果有多个参数对,再用逗号进行拼接,如:key_1=value_1,key_2=value_2
                //注意:每个参数(key)和参数值(value)均不得含有逗号(,)和等号(=),否则会被截断
                //在线/离线业务 参数  名称
                ret = TTSDll.MSPLogin(string.Empty, string.Empty, login_configs);
                //MSPLogin方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return("MSPLogin:"******"engine_type = local, voice_name=xiaoyan, tts_res_path =fo|res\\tts\\xiaoyan.jet;fo|res\\tts\\common.jet, sample_rate = 16000";
                string _params = "ssm=1,ent=sms16k,vcn=xiaoyan,spd=medium,aue=speex-wb;7,vol=x-loud,auf=audio/L16;rate=16000";
                //string @params = "engine_type = local,voice_name=xiaoyan,speed=50,volume=50,pitch=50,rcn=1, text_encoding = UTF8, background_sound=1,sample_rate = 16000";
                session_ID = TTSDll.QTTSSessionBegin(_params, ref ret);
                //QTTSSessionBegin方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return("QTTSSessionBegin:" + ret.ToString());
                }
                ret = TTSDll.QTTSTextPut(Ptr2Str(session_ID), text, (uint)Encoding.Default.GetByteCount(text), string.Empty);
                //QTTSTextPut方法返回失败
                if (ret != (int)ErrorCode.MSP_SUCCESS)
                {
                    return("QTTSTextPut:" + ret.ToString());
                }

                MemoryStream memoryStream = new MemoryStream();
                memoryStream.Write(new byte[44], 0, 44);
                while (true)
                {
                    IntPtr source = TTSDll.QTTSAudioGet(Ptr2Str(session_ID), ref audio_len, ref synth_status, ref ret);
                    byte[] array  = new byte[(int)audio_len];
                    if (audio_len > 0)
                    {
                        Marshal.Copy(source, array, 0, (int)audio_len);
                    }
                    memoryStream.Write(array, 0, array.Length);
                    Thread.Sleep(1000);
                    if (synth_status == SynthStatus.MSP_TTS_FLAG_DATA_END || ret != 0)
                    {
                        break;
                    }
                }
                WAVE_Header wave_Header = getWave_Header((int)memoryStream.Length - 44);
                byte[]      array2      = this.StructToBytes(wave_Header);
                memoryStream.Position = 0L;
                memoryStream.Write(array2, 0, array2.Length);
                memoryStream.Position = 0L;
                if (filename != null)
                {
                    FileStream fileStream = new FileStream(filename, FileMode.Create, FileAccess.Write);
                    memoryStream.WriteTo(fileStream);
                    memoryStream.Close();
                    fileStream.Close();
                }
            }
            catch (Exception)
            {
            }
            finally
            {
                ret = TTSDll.QTTSSessionEnd(Ptr2Str(session_ID), "");
                ret = TTSDll.MSPLogout();//退出登录
            }
            return("ok:" + guisy);
        }