public void AddPopnMetadata(IEvent ev, IDjmainChartEvent ce)
        {
            var command = (DjmainEventType)(ce.Param0 & 0xF);
            var param0  = ce.Param0 >> 4;
            var param1  = ce.Param1;

            ev[NumericData.SourceCommand] = ce.Param0;
            ev[NumericData.SourceData]    = ce.Param1;

            switch (command)
            {
            case DjmainEventType.Marker:
            case DjmainEventType.SoundSelect:
                ev[NumericData.Column] = param0;
                ev[NumericData.Player] = 0;
                ev[FlagData.Note]      = true;

                if (command == DjmainEventType.SoundSelect)
                {
                    ev[NumericData.LoadSound] = param1 - 1;
                }

                break;

            default:
                SetCommon(ev, command, param0, param1);
                break;
            }
        }
        private static bool IsNote(IDjmainChartEvent ev)
        {
            switch ((DjmainEventType)(ev.Param0 & 0xF))
            {
            case DjmainEventType.SoundSelect:
            case DjmainEventType.Bgm:
                return(true);

            default:
                return(false);
            }
        }
        public void AddBeatmaniaMetadata(IEvent ev, IDjmainChartEvent ce)
        {
            var command = (DjmainEventType)(ce.Param0 & 0xF);
            var param0  = ce.Param0 >> 4;
            var param1  = ce.Param1;

            ev[NumericData.SourceCommand] = ce.Param0;
            ev[NumericData.SourceData]    = ce.Param1;

            switch (command)
            {
            case DjmainEventType.Marker:
            case DjmainEventType.SoundSelect:
                switch ((DjmainBeatmaniaColumnType)param0)
                {
                case DjmainBeatmaniaColumnType.Player0Scratch:
                case DjmainBeatmaniaColumnType.Player1Scratch:
                {
                    ev[FlagData.Scratch]   = true;
                    ev[NumericData.Player] = param0 & 1;
                    break;
                }

                case DjmainBeatmaniaColumnType.Player0Measure:
                case DjmainBeatmaniaColumnType.Player1Measure:
                {
                    // Sometimes you get commands like 0xD1 (2p measure sound select?? wtf??)
                    // which are absolutely absurd, so we don't bother.
                    if (command == DjmainEventType.Marker)
                    {
                        ev[FlagData.Measure] = true;
                    }

                    ev[NumericData.Player] = param0 & 1;
                    break;
                }

                case DjmainBeatmaniaColumnType.Player0FreeScratch:
                case DjmainBeatmaniaColumnType.Player1FreeScratch:
                {
                    if (command == DjmainEventType.SoundSelect)
                    {
                        ev[FlagData.Scratch] = true;
                    }
                    else
                    {
                        ev[FlagData.FreeZone] = true;
                    }

                    ev[NumericData.Player] = param0 & 1;
                    break;
                }

                default:
                {
                    ev[NumericData.Column] = param0 >> 1;
                    ev[NumericData.Player] = param0 & 1;
                    break;
                }
                }

                if (command == DjmainEventType.Marker && ev[FlagData.Measure] != true)
                {
                    ev[FlagData.Note] = true;
                }

                if (command == DjmainEventType.SoundSelect)
                {
                    ev[NumericData.LoadSound] = param1 - 1;
                }

                break;

            default:
                SetCommon(ev, command, param0, param1);
                break;
            }
        }