public DescriptorList(StreamReader reader)
 {
     List<EnvelopeDescriptor> envList = new List<EnvelopeDescriptor>();
     List<FilterDescriptor> fltrList = new List<FilterDescriptor>();
     List<LfoDescriptor> lfoList = new List<LfoDescriptor>();
     List<GeneratorDescriptor> genList = new List<GeneratorDescriptor>();
     List<CustomDescriptor> cList = new List<CustomDescriptor>();
     List<string> descList = new List<string>();
     while (!reader.EndOfStream)
     {
         string tag = ReadNextTag(reader, descList); 
         switch (tag)
         {
             case "envelope":
             {
                 EnvelopeDescriptor env = new EnvelopeDescriptor();
                 env.Read(descList.ToArray());
                 envList.Add(env);
                 break;
             }
             case "generator":
             {
                 GeneratorDescriptor gen = new GeneratorDescriptor();
                 gen.Read(descList.ToArray());
                 genList.Add(gen);
                 break;
             }
             case "filter":
             {
                 FilterDescriptor fltr = new FilterDescriptor();
                 fltr.Read(descList.ToArray());
                 fltrList.Add(fltr);
                 break;
             }
             case "lfo":
             {
                 LfoDescriptor lfo = new LfoDescriptor();
                 lfo.Read(descList.ToArray());
                 lfoList.Add(lfo);
                 break;
             }
             default:
                 if (!tag.Equals(string.Empty))
                 {
                     CustomDescriptor cus = new CustomDescriptor(tag, 0);
                     cus.Read(descList.ToArray());
                     cList.Add(cus);
                 }
                 break;
         }
         descList.Clear();
     }
     EnvelopeDescriptions = envList.ToArray();
     FilterDescriptions = fltrList.ToArray();
     LfoDescriptions = lfoList.ToArray();
     GenDescriptions = genList.ToArray();
     CustomDescriptions = cList.ToArray();
 }
 public DescriptorList(BinaryReader reader)
 {
     List<EnvelopeDescriptor> envList = new List<EnvelopeDescriptor>();
     List<FilterDescriptor> fltrList = new List<FilterDescriptor>();
     List<LfoDescriptor> lfoList = new List<LfoDescriptor>();
     List<GeneratorDescriptor> genList = new List<GeneratorDescriptor>();
     List<CustomDescriptor> cList = new List<CustomDescriptor>();
     int count = reader.ReadInt16();
     for (int x = 0; x < count; x++)
     {
         string id = new string(IOHelper.Read8BitChars(reader, 4));
         int size = reader.ReadInt32();
         switch (id.ToLower())
         {
             case EnvelopeDescriptor.ID:
             {
                 EnvelopeDescriptor env = new EnvelopeDescriptor();
                 env.Read(reader);
                 envList.Add(env);
                 break;
             }
             case GeneratorDescriptor.ID:
             {
                 GeneratorDescriptor gen = new GeneratorDescriptor();
                 gen.Read(reader);
                 genList.Add(gen);
                 break;
             }
             case FilterDescriptor.ID:
             {
                 FilterDescriptor fltr = new FilterDescriptor();
                 fltr.Read(reader);
                 fltrList.Add(fltr);
                 break;
             }
             case LfoDescriptor.ID:
             {
                 LfoDescriptor lfo = new LfoDescriptor();
                 lfo.Read(reader);
                 lfoList.Add(lfo);
                 break;
             }
             default:
             {
                 CustomDescriptor cus = new CustomDescriptor(id, size);
                 cus.Read(reader);
                 cList.Add(cus);
                 break;
             }
         }
     }
     EnvelopeDescriptions = envList.ToArray();
     FilterDescriptions = fltrList.ToArray();
     LfoDescriptions = lfoList.ToArray();
     GenDescriptions = genList.ToArray();
     CustomDescriptions = cList.ToArray();
 }