Beispiel #1
0
        public void 注销()
        {
            var __结果 = Dll离线合成.MSPLogout();

            if (__结果 != (int)ErrorCode.MSP_SUCCESS)
            {
                throw new ApplicationException("注销失败! 错误码: " + __结果);
            }
        }
Beispiel #2
0
        public void 登录(string appid)
        {
            var __登录参数 = string.Format("appid={0}, engine_start=tts, tts_res_path=fo|res\\tts\\xiaoyan.jet;fo|res\\tts\\common.jet", appid);
            var __结果   = Dll离线合成.MSPLogin(string.Empty, string.Empty, __登录参数);

            if (__结果 != (int)ErrorCode.MSP_SUCCESS)
            {
                throw new ApplicationException("登录失败! 错误码: " + __结果);
            }
        }
Beispiel #3
0
        public MemoryStream 合成(string __文本)
        {
            if (string.IsNullOrEmpty(__文本.Trim()))
            {
                throw new ApplicationException("请输入合成语音的内容!");
            }
            IntPtr __session = IntPtr.Zero;

            try
            {
                var __结果   = 0;
                var __合成参数 = string.Format("engine_type = local,voice_name = xiaoyan,text_encoding = GB2312,sample_rate = {0}", 音频采样率);
                __session = Dll离线合成.QTTSSessionBegin(__合成参数, ref __结果);
                if (__结果 != (int)ErrorCode.MSP_SUCCESS)
                {
                    throw new ApplicationException("启动合成失败! 错误码: " + __结果);
                }
                __结果 = Dll离线合成.QTTSTextPut(__session, __文本, (uint)Encoding.Default.GetByteCount(__文本), string.Empty);
                if (__结果 != (int)ErrorCode.MSP_SUCCESS)
                {
                    throw new ApplicationException("合成失败! 错误码: " + __结果);
                }

                var __数据流 = new MemoryStream();
                __数据流.Write(new byte[44], 0, 44);
                var __解码状态 = E合成状态.进行中;
                while (true)
                {
                    uint   __解码长度 = 0;
                    IntPtr __解码指针 = Dll离线合成.QTTSAudioGet(__session, ref __解码长度, ref __解码状态, ref __结果);
                    if (__结果 != 0)
                    {
                        break;
                    }
                    byte[] __解码数据 = new byte[(int)__解码长度];
                    if (__解码指针 != IntPtr.Zero)
                    {
                        Marshal.Copy(__解码指针, __解码数据, 0, (int)__解码长度);
                    }
                    __数据流.Write(__解码数据, 0, __解码数据.Length);
                    Thread.Sleep(100);
                    if (__解码状态 == E合成状态.完毕)
                    {
                        break;
                    }
                }
                if (__数据流.Length == 44)
                {
                    Debug.WriteLine("合成失败! 无音频 ");
                }
                byte[] __文件头 = HWAVE文件头.获取((int)__数据流.Length - 44);
                __数据流.Position = 0L;
                __数据流.Write(__文件头, 0, __文件头.Length);
                __数据流.Position = 0L;
                return(__数据流);
            }
            finally
            {
                if (__session != IntPtr.Zero)
                {
                    int __结果 = Dll离线合成.QTTSSessionEnd(__session, "");
                    if (__结果 != (int)ErrorCode.MSP_SUCCESS)
                    {
                        Debug.WriteLine("结束合成失败! 错误码: " + __结果);
                    }
                }
            }
        }