protected override void AddSlider(Slider s)
 {
     //convert old style slider to hold
     if (Beatmap.PlayMode == osu_common.PlayModes.OsuMania)
     {
         HitCircleHold h = new HitCircleHold(this, s.Position, s.StartTime, false, s.Whistle, s.Finish, s.Clap, 0);
         h.EndTime            = ((SliderOsu)s).VirtualEndTime;
         h.SampleAddr         = s.SampleAddr;
         h.SampleFile         = s.SampleFile;
         h.SampleSet          = s.SampleSet;
         h.SampleSetAdditions = s.SampleSetAdditions;
         h.SampleVolume       = s.SampleVolume;
         h.CustomSampleSet    = s.CustomSampleSet;
         Add(h, false);
         s.Dispose();
     }
     else
     {
         Add(s, false);
     }
 }
        /// <summary>
        ///
        /// </summary>
        /// <param name="line">[00111:00000100]</param>
        private void parseDataField(string[] arr)
        {
            int[]         key = line2key(arr[0]); // 001 00
            List <string> val = line2arr(arr[1]); // 00 01 AW 00

            switch (key[1])
            {
            case 1:      //BGM
                if (IgnoreEffect)
                {
                    return;
                }
                for (int i = 0; i < val.Count; i++)
                {
                    if (val[i] == "00")
                    {
                        continue;
                    }
                    string fn;
                    if (wavDict.TryGetValue(val[i], out fn))
                    {
                        EventSample e = new EventSample(-1, fn, (int)getTime(key[0], 1.0 * i / val.Count), StoryLayer.Background, 70);
                        e.WriteToOsu = true;
                        eventManager.Add(e);
                        effectDict[fn] = true;
                    }
                }
                break;

            case 11:
            case 12:
            case 13:
            case 14:
            case 15:
            case 16:
            case 18:
            case 19:
            {
                for (int i = 0; i < val.Count; i++)
                {
                    if (val[i] == "00")
                    {
                        continue;
                    }
                    int col = key[1] == 16 ? 0 : (key[1] < 16 ? key[1] - 10 : key[1] - 12);
                    if (IgnoreSpecial)
                    {
                        col--;
                    }
                    if (longType == 2 && val[i] == longObj && pendingNotes[col] != null)
                    {
                        pendingNotes[col].EndTime = (int)getTime(key[0], 1.0 * i / val.Count);
                        pendingNotes[col].Type    = HitObjectType.Hold;
                        pendingNotes[col]         = null;
                        continue;
                    }
                    HitCircleOsu h   = new HitCircleOsu(hitObjectManager, new Vector2(hitObjectManager.ManiaStage.Columns[col].SnapPositionX, 192), (int)getTime(key[0], 1.0 * i / val.Count), false);
                    string       wav = "";
                    if (wavDict.TryGetValue(val[i], out wav) && !IgnoreSample)
                    {
                        noteDict[wav] = true;
                        h.SampleFile  = wav;
                    }
                    else
                    {
                        h.SampleVolume = 1;         //mute sample volume if file doesn't exist in meta
                    }
                    hitObjectManager.Add(h, true);
                    if (longType == 2)
                    {
                        pendingNotes[col] = h;
                    }
                }
            }
            break;

            case 51:
            case 52:
            case 53:
            case 54:
            case 55:
            case 56:
            case 58:
            case 59:
            {
                if (longType != 1)
                {
                    break;
                }
                for (int i = 0; i < val.Count; i++)
                {
                    if (val[i] == "00")
                    {
                        continue;
                    }
                    int col = key[1] == 56 ? 0 : (key[1] < 56 ? key[1] - 50 : key[1] - 52);
                    if (IgnoreSpecial)
                    {
                        col--;
                    }
                    if (pendingNotes[col] != null)
                    {
                        pendingNotes[col].EndTime = (int)getTime(key[0], 1.0 * i / val.Count);
                        pendingNotes[col]         = null;
                        continue;
                    }
                    else
                    {
                        HitCircleHold h = new HitCircleHold(hitObjectManager, new Vector2(hitObjectManager.ManiaStage.Columns[col].SnapPositionX, 192),
                                                            (int)getTime(key[0], 1.0 * i / val.Count), false, false, false, false, 0);
                        string wav = "";
                        if (wavDict.TryGetValue(val[i], out wav) && !IgnoreSample)
                        {
                            noteDict[wav] = true;
                            h.SampleFile  = wav;
                        }
                        else
                        {
                            h.SampleVolume = 1;
                        }
                        hitObjectManager.Add(h, true);
                        pendingNotes[col] = h;
                    }
                }
            }
            break;
            }
        }