Exemplo n.º 1
0
        /// <summary>
        /// Plays to file.
        /// </summary>
        /// <param name="channel">The channel.</param>
        /// <param name="text">The text.</param>
        /// <param name="playType">Type of the play.</param>
        /// <param name="fileName">Name of the file.</param>
        /// <returns></returns>
        public override bool PlayToFile(IChannel channel, string text, TTSPlayType playType, string fileName)
        {
            if (!canWork)
            {
                Logger.Warn("因TTS引擎初始化失败或其它原因造成不可用,不能进行TTS放音");
                return(false);
            }

            if (channel == null)
            {
                Logger.Warn("传入通道参数未初始化不能进行TTS放音");
                return(false);
            }

            string dir = Path.GetDirectoryName(fileName);

            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }

            string fileext = Path.GetExtension(fileName);

            lock (D160X.SyncObj)
            {
                Logger.Info(string.Format("通道 {0} 利用TTS转换文字 {1} 到语音文件 \"{2}\"", channel.ChannelID, text, fileName));
                // 根据文件扩展名转换为不同格式的语音文件
                switch (fileext.ToLower())
                {
                case ".voc":
                    TTS3.DJTTS3_CvtTextToVocFile(Encoding.UTF8.GetBytes(text), 50, Encoding.UTF8.GetBytes(fileName), channel.ChannelID,
                                                 50, 50, XmlTag ? TTS3.INFO_USE_LABLE : TTS3.INFO_NOTUSE_LABLE);
                    break;

                case ".wav":
                    TTS3.DJTTS3_CvtTextToWaveFile(Encoding.UTF8.GetBytes(text), 50, Encoding.UTF8.GetBytes(fileName), channel.ChannelID,
                                                  50, 50, XmlTag ? TTS3.INFO_USE_LABLE : TTS3.INFO_NOTUSE_LABLE);
                    break;

                default:
                    TTS3.DJTTS3_CvtTextToVocFile(Encoding.UTF8.GetBytes(text), 50, Encoding.UTF8.GetBytes(fileName), channel.ChannelID,
                                                 50, 50, XmlTag ? TTS3.INFO_USE_LABLE : TTS3.INFO_NOTUSE_LABLE);
                    break;
                }
            }

            return(true);
        }