AlphaTab.Audio.Generator.MidiPlaybackController.ProcessCurrent C# (CSharp) Метод

ProcessCurrent() публичный Метод

public ProcessCurrent ( ) : void
Результат void
        public void ProcessCurrent()
        {
            var masterBar = _score.MasterBars[Index];
            var masterBarAlternateEndings = masterBar.AlternateEndings;

            // if the repeat group wasn't closed we reset the repeating
            // on the last group opening
            if (!masterBar.RepeatGroup.IsClosed && masterBar.RepeatGroup.Openings[masterBar.RepeatGroup.Openings.Count - 1] == masterBar)
            {
                _repeatNumber = 0;
                _repeatOpen = false;
            }

            if ((masterBar.IsRepeatStart || masterBar.Index == 0) && _repeatNumber == 0)
            {
                _repeatStartIndex = Index;
                _repeatOpen = true;
            }
            else if (masterBar.IsRepeatStart)
            {
                ShouldPlay = true;
            }

            // if we encounter an alternate ending
            if (_repeatOpen && masterBarAlternateEndings > 0)
            {
                // do we need to skip this section?
                if ((masterBarAlternateEndings & (1 << _repeatNumber)) == 0)
                {
                    ShouldPlay = false;
                }
                else
                {
                    ShouldPlay = true;
                }
            }

            if (ShouldPlay)
            {
                CurrentTick += masterBar.CalculateDuration();
            }
        }

Usage Example

Пример #1
0
        public void Generate()
        {
            // initialize tracks
            for (int i = 0, j = _score.Tracks.Count; i < j; i++)
            {
                GenerateTrack(_score.Tracks[i]);
            }

            var       controller        = new MidiPlaybackController(_score);
            MasterBar previousMasterBar = null; // store the previous played bar for repeats

            while (!controller.Finished)
            {
                var index       = controller.Index;
                var bar         = _score.MasterBars[index];
                var currentTick = controller.CurrentTick;
                controller.ProcessCurrent();
                if (controller.ShouldPlay)
                {
                    GenerateMasterBar(bar, previousMasterBar, currentTick);
                    for (int i = 0, j = _score.Tracks.Count; i < j; i++)
                    {
                        GenerateBar(_score.Tracks[i].Bars[index], currentTick);
                    }
                }
                controller.MoveNext();
                previousMasterBar = bar;
            }
        }
All Usage Examples Of AlphaTab.Audio.Generator.MidiPlaybackController::ProcessCurrent