Exemplo n.º 1
0
        /// <inheritdoc />
        public override void OpenSession(SequenceSessionData data)
        {
            Reset();
            SeqPeriodTime     = data.PeriodMS;
            _numberFrames     = (uint)data.NumPeriods;
            _channelsPerFrame = (uint)data.ChannelNames.Count();
            if (!string.IsNullOrEmpty(data.OutputAudioFileName))
            {
                _variableHeaders.Add(new VariableHeader(data.OutputAudioFileName));
            }

            _variableHeaders.Add(new VariableHeader(HeaderType.SequenceProducer));

            var blockCount = ComputeMaxBlockCount();

            _numberCompressionBlocks = (byte)blockCount;

            _offsetToChannelData  = FixedHeaderLength + blockCount * 8;              //need to add for sparse if we do that
            _offsetToChannelData += (uint)_variableHeaders.Sum(x => x.HeaderLength); //Account for variable header length

#if DEBUG
            Logging.Info($"Total frames count {_numberFrames}");
            Logging.Info($"Block count {blockCount}");
            Logging.Info($"Frames per block count {_framesPerBlock}");
            Logging.Info($"Offset to channel data {_offsetToChannelData}");
#endif

            OpenSession(data.OutFileName, _offsetToChannelData, data.ChannelNames.Count());
        }
Exemplo n.º 2
0
        public void OpenSession(SequenceSessionData sessionData)
        {
            _curPeriod   = 0;
            _sessionData = sessionData;
            try
            {
                _outfs = File.Create(_sessionData.OutFileName, _sessionData.ChannelNames.Count * 2, FileOptions.None);
            }
            catch (Exception e)
            {
                _outfs = null;
                throw e;
            }
            _xmlData          = new Vix2XMLData();
            _xmlData.Channels = new List <Vix2Channel>();

            _xmlData.Time = _sessionData.TimeMS.ToString();

            _xmlData.EventPeriodInMilliseconds = _sessionData.PeriodMS.ToString();

            _adder = 0;
            if (_sessionData.TimeMS % _sessionData.PeriodMS != 0)
            {
                _adder = 1;
            }

            _periodData = new Byte[sessionData.ChannelNames.Count * (_sessionData.NumPeriods + _adder)];

            _xmlData.MinimumLevel = "0";
            _xmlData.MaximumLevel = "255";
            _xmlData.AudioDevice  = "-1";
            _xmlData.AudioVolume  = "0";
        }
Exemplo n.º 3
0
        public void OpenSession(SequenceSessionData data)
        {
            SeqPeriodTime     = data.PeriodMS;
            _audioFileName    = Path.GetFileName(data.AudioFileName);
            _fileNameFieldLen = (UInt32)_audioFileName.Length + 5;
            _dataOffset      += _fileNameFieldLen;
            _fileNamePadding  = (4 - (_dataOffset % 4)) % 4;
            _dataOffset      += _fileNamePadding;

            OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
        }
Exemplo n.º 4
0
        public override void OpenSession(SequenceSessionData data)
        {
            _variableHeaders.Clear();
            _dataOffset   = _fixedHeaderLength;
            SeqPeriodTime = data.PeriodMS;

            if (!string.IsNullOrEmpty(data.OutputAudioFileName))
            {
                _variableHeaders.Add(new VariableHeader(data.OutputAudioFileName));
            }
            _dataOffset += (uint)_variableHeaders.Sum(x => x.HeaderLength);             //Account for variable header length

            OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
        }
Exemplo n.º 5
0
        public override void OpenSession(SequenceSessionData sessionData)
        {
            _curPeriod   = 0;
            _sessionData = sessionData;
            try
            {
                _outfs   = File.Create(_sessionData.OutFileName, _sessionData.ChannelNames.Count * 2, FileOptions.None);
                _dataOut = new BinaryWriter(_outfs);
            }
            catch (Exception e)
            {
                _outfs   = null;
                _dataOut = null;
                throw e;
            }

            _periodData = new Byte[sessionData.ChannelNames.Count * _sessionData.NumPeriods];
        }
Exemplo n.º 6
0
 /// <inheritdoc />
 public abstract void OpenSession(SequenceSessionData sessionData);
Exemplo n.º 7
0
        void SequenceCacheEnded(object sender, Vixen.Cache.Event.CacheEventArgs e)
        {
            SequenceSessionData sessionData = new SequenceSessionData();

            if (_exporting)
            {
                List<ICommand> commandList = new List<ICommand>();
                OutputStateListAggregator outAggregator = _preCachingSequenceEngine.Cache.OutputStateListAggregator;
                IEnumerable<Guid> outIds = outAggregator.GetOutputIds();
                int periods = outAggregator.GetCommandsForOutput(outIds.First()).Count() - 1;

                //Get a list of controller ids by index order
                IEnumerable<Guid> controllers = ControllerExportInfo.OrderBy(x => x.Index).Select(i => i.Id);

                //Now assemble a all their outputs by controller order.
                List<List<Guid>> controllerOutputs = new List<List<Guid>>();
                foreach (var controller in controllers)
                {
                    controllerOutputs.Add(VixenSystem.OutputControllers.GetController(controller).Outputs.Select(x => x.Id).ToList());
                }

                if (_cancelling == false)
                {
                    SequenceNotify(ExportNotifyType.SAVING);
                    sessionData.OutFileName = OutFileName;
                    sessionData.NumPeriods = periods;
                    sessionData.PeriodMS = UpdateInterval;
                    sessionData.ChannelNames = BuildChannelNames(outIds);
                    sessionData.TimeMS = _preCachingSequenceEngine.Sequence.Length.TotalMilliseconds;
                    sessionData.AudioFileName = AudioFilename;
                    try
                    {
                        _output.OpenSession(sessionData);
                        for (int j = 0; j < periods; j++)
                        {
                            SavePosition = Decimal.Round(((Decimal)j / (Decimal)periods) * 100, 2);
                            commandList.Clear();
                            //Iterate the controller output groups.
                            foreach (var controller in controllerOutputs)
                            {
                                //Grab commands for each output
                                foreach (Guid guid in controller)
                                {
                                    commandList.Add(outAggregator.GetCommandsForOutput(guid).ElementAt(j));
                                }

                            }

                            UpdateState(commandList.ToArray());
                        }

                        _output.CloseSession();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Save Error!");
                        throw ex;
                    }

                    _preCachingSequenceEngine.SequenceCacheEnded -= SequenceCacheEnded;
                    _preCachingSequenceEngine.SequenceCacheStarted -= SequenceCacheStarted;
                }

                if (SequenceNotify != null)
                {
                    SequenceNotify(ExportNotifyType.COMPLETE);
                }
            }
        }
Exemplo n.º 8
0
 public override void OpenSession(SequenceSessionData data)
 {
     OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
 }
Exemplo n.º 9
0
 public void OpenSession(SequenceSessionData data)
 {
     this.SeqPeriodTime = data.PeriodMS;
     OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
 }
Exemplo n.º 10
0
        public void OpenSession(SequenceSessionData sessionData)
        {
            _curPeriod = 0;
            _sessionData = sessionData;
            try
            {
                _outfs = File.Create(_sessionData.OutFileName, _sessionData.ChannelNames.Count * 2, FileOptions.None);
            }
            catch (Exception e)
            {
                _outfs = null;
                throw e;
            }
            _xmlData = new Vix2XMLData();
            _xmlData.Channels = new List<Vix2Channel>();

            _xmlData.Time = _sessionData.TimeMS.ToString();

            _xmlData.EventPeriodInMilliseconds = _sessionData.PeriodMS.ToString();

            _adder = 0;
            if (_sessionData.TimeMS % _sessionData.PeriodMS != 0)
            {
                _adder = 1;
            }

            _periodData = new Byte[sessionData.ChannelNames.Count * (_sessionData.NumPeriods + _adder)];

            _xmlData.MinimumLevel = "0";
            _xmlData.MaximumLevel = "255";
            _xmlData.AudioDevice = "-1";
            _xmlData.AudioVolume = "0";
        }
Exemplo n.º 11
0
        private void ProcessExport()
        {
            SequenceSessionData sessionData = new SequenceSessionData();

            if (_exporting)
            {
                SavePosition = 0;
                SequenceNotify(ExportNotifyType.SAVING);
             	_generator.BeginGeneration();

                IEnumerable<Guid> outIds = _generator.State.GetOutputIds();
                int periods = (int)_generator.Sequence.Length.TotalMilliseconds / _generator.Interval;//outAggregator.GetCommandsForOutput(outIds.First()).Count() - 1;

                //Get a list of controller ids by index order
                IEnumerable<Guid> controllers = ControllerExportInfo.OrderBy(x => x.Index).Select(i => i.Id);

                //Now assemble a all their outputs by controller order.
                List<List<Guid>> controllerOutputs = controllers.Select(controller => VixenSystem.OutputControllers.GetController(controller).Outputs.Select(x => x.Id).ToList()).ToList();

                List<ICommand> commandList = new List<ICommand>(controllerOutputs.Count);
                _eventData = new List<byte>(controllerOutputs.Count);

                if (_cancelling == false)
                {
                    sessionData.OutFileName = OutFileName;
                    sessionData.NumPeriods = periods;
                    sessionData.PeriodMS = UpdateInterval;
                    sessionData.ChannelNames = BuildChannelNames(outIds);
                    sessionData.TimeMS = _generator.Sequence.Length.TotalMilliseconds;
                    sessionData.AudioFileName = AudioFilename;
                    try
                    {
                        _output.OpenSession(sessionData);
                        int j = 0;
                        while (_generator.HasNextInterval() && _cancelling == false)
                        {
                            SavePosition = Decimal.Round(((Decimal) j/periods)*100, 2);
                            commandList.Clear();
                            //Iterate the controller output groups.
                            foreach (var controller in controllerOutputs)
                            {
                                //Grab commands for each output
                                commandList.AddRange(controller.Select(guid => _generator.State.GetCommandForOutput(guid)));
                            }

                            UpdateState(commandList.ToArray());
                            _generator.NextInterval();
                            j++;
                        }

                        _output.CloseSession();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, @"Save Error!");
                        throw ex;
                    }
                    finally
                    {
                        _generator.EndGeneration();
                    }

                }

                if (SequenceNotify != null)
                {
                    SequenceNotify(ExportNotifyType.COMPLETE);
                }
            }
        }
Exemplo n.º 12
0
        private void ProcessExport(IProgress <ExportProgressStatus> progress)
        {
            SequenceSessionData sessionData = new SequenceSessionData();

            if (_exporting)
            {
                if (SequenceNotify != null)
                {
                    SequenceNotify(ExportNotifyType.SAVING);
                }
                _generator.BeginGeneration();

                //IEnumerable<Guid> outIds = _generator.State.GetOutputIds();
                int periods = (int)_generator.Sequence.Length.TotalMilliseconds / _generator.Interval;    //outAggregator.GetCommandsForOutput(outIds.First()).Count() - 1;

                //Get a list of controller ids by index order
                IEnumerable <Guid> controllerIds = ControllerExportInfo.Where(x => x.IsActive).OrderBy(x => x.Index).Select(i => i.Id);

                var controllers = controllerIds.Select(controller => VixenSystem.OutputControllers.GetController(controller));

                //Now assemble a all their outputs by controller order.
                List <List <Guid> > controllerOutputs = controllers.Select(controller => controller.Outputs.Select(x => x.Id).ToList()).ToList();

                List <ICommand> commandList = new List <ICommand>(controllerOutputs.Count);
                _eventData = new List <byte>(controllerOutputs.Count);
                var progressData = new ExportProgressStatus(ExportProgressStatus.ProgressType.Task);
                if (_cancelling == false)
                {
                    sessionData.OutFileName   = OutFileName;
                    sessionData.NumPeriods    = periods;
                    sessionData.PeriodMS      = UpdateInterval;
                    sessionData.ChannelNames  = BuildChannelNames(controllers);
                    sessionData.TimeMS        = _generator.Sequence.Length.TotalMilliseconds;
                    sessionData.AudioFileName = AudioFilename;
                    try
                    {
                        _output.OpenSession(sessionData);
                        double j = 0;
                        while (_generator.HasNextInterval() && _cancelling == false)
                        {
                            if (progress != null)
                            {
                                progressData.TaskProgressValue   = (int)(j / periods * 100);
                                progressData.TaskProgressMessage = string.Format("Exporting {0}", _generator.Sequence.Name);
                                progress.Report(progressData);
                            }
                            commandList.Clear();
                            //Iterate the controller output groups.
                            foreach (var controller in controllerOutputs)
                            {
                                //Grab commands for each output
                                commandList.AddRange(controller.Select(guid => _generator.State.GetCommandForOutput(guid)));
                            }

                            UpdateState(commandList.ToArray());
                            _generator.NextInterval();
                            j++;
                        }

                        _output.CloseSession();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, @"Save Error!");
                        throw ex;
                    }
                    finally
                    {
                        _generator.EndGeneration();
                    }
                }

                if (SequenceNotify != null)
                {
                    SequenceNotify(ExportNotifyType.COMPLETE);
                }
            }
        }
Exemplo n.º 13
0
        public void OpenSession(SequenceSessionData sessionData)
        {
            _curPeriod = 0;
            _sessionData = sessionData;
            try
            {
                _outfs = File.Create(_sessionData.OutFileName, _sessionData.ChannelNames.Count * 2, FileOptions.None);
                _dataOut = new BinaryWriter(_outfs);
            }
            catch (Exception e)
            {
                _outfs = null;
                _dataOut = null;
                throw e;
            }

            _periodData = new Byte[sessionData.ChannelNames.Count * _sessionData.NumPeriods];
        }
Exemplo n.º 14
0
 public void OpenSession(SequenceSessionData data)
 {
     OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
 }
Exemplo n.º 15
0
        void SequenceCacheEnded(object sender, Vixen.Cache.Event.CacheEventArgs e)
        {
            SequenceSessionData sessionData = new SequenceSessionData();

            if (_exporting)
            {
                List <ICommand>           commandList   = new List <ICommand>();
                OutputStateListAggregator outAggregator = _preCachingSequenceEngine.Cache.OutputStateListAggregator;
                IEnumerable <Guid>        outIds        = outAggregator.GetOutputIds();
                int periods = outAggregator.GetCommandsForOutput(outIds.First()).Count() - 1;

                //Get a list of controller ids by index order
                IEnumerable <Guid> controllers = ControllerExportInfo.OrderBy(x => x.Index).Select(i => i.Id);

                //Now assemble a all their outputs by controller order.
                List <List <Guid> > controllerOutputs = new List <List <Guid> >();
                foreach (var controller in controllers)
                {
                    controllerOutputs.Add(VixenSystem.OutputControllers.GetController(controller).Outputs.Select(x => x.Id).ToList());
                }

                if (_cancelling == false)
                {
                    SequenceNotify(ExportNotifyType.SAVING);
                    sessionData.OutFileName   = OutFileName;
                    sessionData.NumPeriods    = periods;
                    sessionData.PeriodMS      = UpdateInterval;
                    sessionData.ChannelNames  = BuildChannelNames(outIds);
                    sessionData.TimeMS        = _preCachingSequenceEngine.Sequence.Length.TotalMilliseconds;
                    sessionData.AudioFileName = AudioFilename;
                    try
                    {
                        _output.OpenSession(sessionData);
                        for (int j = 0; j < periods; j++)
                        {
                            SavePosition = Decimal.Round(((Decimal)j / (Decimal)periods) * 100, 2);
                            commandList.Clear();
                            //Iterate the controller output groups.
                            foreach (var controller in controllerOutputs)
                            {
                                //Grab commands for each output
                                foreach (Guid guid in controller)
                                {
                                    commandList.Add(outAggregator.GetCommandsForOutput(guid).ElementAt(j));
                                }
                            }

                            UpdateState(commandList.ToArray());
                        }

                        _output.CloseSession();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Save Error!");
                        throw ex;
                    }

                    _preCachingSequenceEngine.SequenceCacheEnded   -= SequenceCacheEnded;
                    _preCachingSequenceEngine.SequenceCacheStarted -= SequenceCacheStarted;
                }

                if (SequenceNotify != null)
                {
                    SequenceNotify(ExportNotifyType.COMPLETE);
                }
            }
        }
Exemplo n.º 16
0
 public void OpenSession(SequenceSessionData data)
 {
     this.SeqPeriodTime = data.PeriodMS;
     OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
 }
Exemplo n.º 17
0
        public void OpenSession(SequenceSessionData data)
        {
            SeqPeriodTime = data.PeriodMS;
            _audioFileName = Path.GetFileName(data.AudioFileName);
            _fileNameFieldLen = (UInt32)_audioFileName.Length + 5;
            _dataOffset += _fileNameFieldLen;
            _fileNamePadding = (4 - (_dataOffset % 4)) % 4;
            _dataOffset += _fileNamePadding;

            OpenSession(data.OutFileName, data.NumPeriods, data.ChannelNames.Count());
        }