Exemplo n.º 1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DJTTS3Engine"/> class.
        /// </summary>
        /// <param name="workItem">The work item.</param>
        /// <param name="threadNumber">The thread number.</param>
        public DJTTS3Engine(WorkItem workItem, Int32 threadNumber)
            : base(workItem, threadNumber)
        {
            ICTIDriver driver = workItem.Items.Get <ICTIDriver>("DB160X"); // 通过适配器名字获取其依赖的对象

            if (driver == null)
            {
                Logger.Fatal("没有初始化正确的板卡适配器,此TTS需要与东进的语音卡配合使用");
                throw new Exception("东进TTS必须依赖于其自身的板卡,请检查配置文件后再试。");
            }

            bool driverStatus = driver.Active;

            Logger.Info("准备初始化东进TTS引擎……");
            try
            {
                canWork       = false;
                driver.Active = true;
                Int32 initSucess = TTS3.DJTTS3_Init();
                if (initSucess > 0)
                {
                    ttsChannelCount = TTS3.DJTTS3_GetTotalTTSChannel();
                    Int32 j = 0;
                    for (short i = 0; i < driver.ChannelCount; i++)
                    {
                        // 只对外线通道附加TTS功能
                        if (driver.Channels[i].ChannelType == ChannelType.TRUNK)
                        {
                            try
                            {
                                TTS3.DJTTS3_AddTTSToChannel(i);
                                Logger.Info("为 " + driver.VersionInfo.Name + " 的第 " + i.ToString() + " 条外线添加TTS功能,成功");
                                // 检查是否使用完可用的TTS通道数
                                j++;
                                if (j == ttsChannelCount)
                                {
                                    break;
                                }
                            }
                            catch
                            {
                                Logger.Error("为 " + driver.VersionInfo.Name + " 的第 " + i.ToString() + " 条外线添加TTS功能,失败");
                                continue;
                            }
                        }
                    }
                    canWork = true;
                    Logger.Info("完成东进TTS引擎初始化工作");
                }
                else
                {
                    Logger.Info("初始化东进TTS引擎失败,错误代码为: " + initSucess.ToString());
                }
            }
            catch (Exception ex)
            {
                Logger.Error("初始化东进TTS引擎时发生错误", ex);
            }
            finally
            {
                driver.Active = driverStatus;
            }
        }