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 void QuickSetup(int sampleRate, int note, float velocity, FilterDescriptor filterInfo)
 {
     coeffUpdateRequired = false;
     cutOff = filterInfo.CutOff;
     resonance = filterInfo.Resonance;
     filterType = filterInfo.FilterMethod;
     a1 = 0; a2 = 0; b1 = 0; b2 = 0;
     m1 = 0f; m2 = 0f; m3 = 0f;
     if (cutOff <= 0 || resonance <= 0)
     {
         filterType = FilterTypeEnum.None;
     }
     if (filterType != FilterTypeEnum.None)
     {
         cutOff *= SynthHelper.CentsToPitch((note - filterInfo.RootKey) * filterInfo.KeyTrack + (int)(velocity * filterInfo.VelTrack));
         UpdateCoeff(sampleRate);
     }
 }
 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();
 }
 private void LoadSfzFilters(SfzRegion region)
 {
     FilterDescriptions = new FilterDescriptor[1];
     FilterDescriptions[0] = new FilterDescriptor();
     FilterDescriptions[0].FilterMethod = region.filterType;
     FilterDescriptions[0].CutOff = region.cutOff;
     FilterDescriptions[0].KeyTrack = region.filterKeyTrack;
     FilterDescriptions[0].Resonance = (float)SynthHelper.DBtoLinear(region.resonance);
     FilterDescriptions[0].RootKey = region.filterKeyCenter;
     FilterDescriptions[0].VelTrack = region.filterVelTrack;
 }
 private void LoadFilter(Sf2Region region)
 {
     fltr = new FilterDescriptor();
     fltr.FilterMethod = FilterTypeEnum.BiquadLowpass;
     fltr.CutOff = (float)SynthHelper.KeyToFrequency(region.Generators[(int)GeneratorEnum.InitialFilterCutoffFrequency] / 100.0, 69);
     fltr.Resonance = (float)SynthHelper.DBtoLinear(region.Generators[(int)GeneratorEnum.InitialFilterQ] / 10.0);
 }
 public override void Load(DescriptorList description, AssetManager assets)
 {
     //read in sfz params
     CustomDescriptor sfzConfig = description.FindCustomDescriptor("sfzi");
     exTarget = (int)sfzConfig.Objects[0];
     exGroup = (int)sfzConfig.Objects[1];
     sfzVolume = (float)sfzConfig.Objects[2];
     sfzPan = new PanComponent((float)sfzConfig.Objects[3], PanFormulaEnum.Neg3dBCenter);
     ampKeyTrack = (float)sfzConfig.Objects[4];
     ampRootKey = (byte)sfzConfig.Objects[5];
     ampVelTrack = (float)sfzConfig.Objects[6];
     //read in the generator info
     GeneratorDescriptor gdes = description.GenDescriptions[0];
     if (gdes.SamplerType != WaveformEnum.SampleData)
         throw new Exception("Sfz can only support sample data generators.");
     gen = gdes.ToGenerator(assets);
     //read in the envelope info
     ptch_env = description.EnvelopeDescriptions[0];
     fltr_env = description.EnvelopeDescriptions[1];
     amp_env = description.EnvelopeDescriptions[2];
     //read in the lfo info
     ptch_lfo = description.LfoDescriptions[0];
     fltr_lfo = description.LfoDescriptions[1];
     amp_lfo = description.LfoDescriptions[2];
     //read in the filter info
     fltr = description.FilterDescriptions[0];
 }