private VoiceSynthesizer generator; // генератор голоса. #endregion Fields #region Constructors /// <summary> /// Создает провайдер, который генерирует голос. /// </summary> /// <param name="aGenerator">Генератор голоса.</param> public GeneratorSoundProvider(VoiceSynthesizer aGenerator) { if (aGenerator == null) { throw new ArgumentNullException("aGenerator"); } generator = aGenerator; }
/// <summary> /// Создает провайдер-карту фраз по ключу. /// </summary> /// <param name="aGenerator">Генератор голоса.</param> /// <param name="aXmlFile">Файл-карта.</param> public MapSoundProvider(VoiceSynthesizer aGenerator, string aXmlFile) { if (aGenerator == null) { throw new ArgumentNullException("aGenerator"); } if (string.IsNullOrEmpty(aXmlFile)) { throw new ArgumentNullException("aXmlFile"); } var filePath = aXmlFile; if (!Path.IsPathRooted(aXmlFile)) { filePath = Application.StartupPath + "\\" + aXmlFile; } generator = aGenerator; LoadFromXmlFile(filePath); }
/// <inheritdoc /> protected override void DoInitialize() { try { Logger.Info("Инициализация..."); Logger.Info("Имя файла конфигурации \"" + configurationFileName + "\""); Logger.Info("Загрузка конфигурации сервера..."); configuration.LoadFromFile(configurationFileName); Logger.Info("Сетевой логин для клиентов: " + configuration.Login); Logger.Info("Обнаружено " + configuration.GetOutputDevicesCount() + " устройств вывода."); for (int i = 0; i < configuration.GetOutputDevicesCount(); i++) { OutputDeviceInfo outputDevice = configuration.GetOutputDevice(i); Logger.Info("Устройство \"" + outputDevice.GetName() + "\""); Logger.Info(" Идентификатор = " + outputDevice.GetId()); } Logger.Info("Обнаружено " + configuration.GetOutChannelsCount() + " каналов."); for (int j = 0; j < configuration.GetOutChannelsCount(); j++) { OutChannelInfo channel = configuration.GetOutChannel(j); Logger.Info("Канал \"" + channel.GetName() + "\""); Logger.Info(" Идентификатор = " + channel.GetId()); Logger.Info(" Идентификатор устройства = " + channel.GetDevice().GetId()); Logger.Info(" Номер канала = " + channel.GetChannelNumber()); Logger.Info(" Идентификатор группы = " + channel.GetGroup().GetId()); } Logger.Info("Обнаружено " + configuration.GetChannelGroupsCount() + " групп каналов."); Logger.Info("Обнаружено " + configuration.GetInputDevicesCount() + " устройств ввода."); for (var i = 0; i < configuration.GetInputDevicesCount(); ++i) { var device = configuration.GetInputDevice(i); Logger.Info("Устройство \"" + device.GetName() + "\""); Logger.Info(" Идентификатор = " + device.GetId()); } Logger.Info("Обнаружено " + configuration.GetInChannelsCount() + " каналов"); for (var i = 0; i < configuration.GetInChannelsCount(); ++i) { var channel = configuration.GetInChannel(i); Logger.Info("Канал \"" + channel.GetName() + "\""); Logger.Info(" Идентификатор = " + channel.GetId()); Logger.Info(" Идентификатор устройства = " + channel.GetDevice().GetId()); Logger.Info(" Номер канала = " + channel.GetChannelNumber()); } Logger.Info("Загрузка конфигурации сервера завершена."); controlListener = new ControlListener(); commandListener = new CommandListener(configuration.BitReverce); Logger.Info("Конфигурация менеджера каналов..."); channelManager = new ChannelManagerImpl(configuration); channelManager.StartManage(); Logger.Info("Конфигурация менеджера каналов завершена."); Logger.Info("Конфигурация генератора голоса..."); var generatorConfig = configuration.voiceConfiguration; var generator = new VoiceSynthesizer(generatorConfig.Voice, generatorConfig.Rate, generatorConfig.SamplePerSecond); Logger.Info("Конфигурация генератора голоса завершена."); Logger.Info("Конфигурация источников голосовых сообщений..."); var providers = new List<SoundProvider> { new WaveFileSoundProvider(configuration.WavFilesFolder), new MapSoundProvider(generator, configuration.MapSoundsFile), new GeneratorSoundProvider(generator) }; soundStorage = new SoundStorage(providers); Logger.Info("Конфигурация источников голосовых сообщений завершена."); Logger.Info("Конфигурация объявлений времени..."); timeController = new TimeController(); timeController.SetCallback(this); timeController.LoadFromXmlFile(configuration.TimeControllerFile); timeController.Initialize(); Logger.Info("Конфигурация объявлений времени завершена."); controlListener.SetCallback(this); controlListener.GetListenEndPoint().Address = IPAddress.Any; controlListener.GetListenEndPoint().Port = 9998; commandListener.SetCallback(this); commandListener.GetListenEndPoint().Address = IPAddress.Any; commandListener.GetListenEndPoint().Port = 9999; controlListener.Initialize(); commandListener.Initialize(); Logger.Info("Инициализация завершена."); } catch (Exception ex) { Logger.Info("Загрузка конфигурации не выполнена: " + ex.Message); Process.GetCurrentProcess().Kill(); } }