Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 19.34 KB | None | 0 0
  1.       private void ParseInstrumentData(string[] text, string InstrumentPath, InstrumentBank bank)
  2.         {
  3.             allSamplesHaveDualChannels = true;
  4.             SfzRegion Group = new SfzRegion();
  5.             bool[] groupValues = new bool[21];
  6.             List<Sample> Samples = new List<Sample>();
  7.             List<string> SampleNames = new List<string>();
  8.             List<SfzRegion> Regions = new List<SfzRegion>();
  9.             for (int x = 0; x < text.Length; x++)
  10.             {
  11.                 string line = text[x].Trim();
  12.                 if (line != "")
  13.                 {
  14.                     switch (line.Substring(0, 1).ToLower())
  15.                     {
  16.                         case "<":
  17.                             if (line == "<group>")
  18.                             {
  19.                                 while (text[x] != "")
  20.                                 {
  21.                                     x++;
  22.                                     if (x >= text.Length)
  23.                                         break;
  24.                                     string[] Rvalue = text[x].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
  25.                                     if (Rvalue.Length == 2)
  26.                                     {
  27.                                         switch (Rvalue[0])
  28.                                         {
  29.                                             case "sample":
  30.                                                 Rvalue[1] = System.IO.Path.GetFileNameWithoutExtension(Rvalue[1]);
  31.                                                 groupValues[0] = true;
  32.                                                 if (SampleNames.Contains(Rvalue[1]))//its in the local list so no need to check the master list
  33.                                                 {
  34.                                                     Group.SampleIndex = SampleNames.IndexOf(Rvalue[1]);
  35.                                                 }
  36.                                                 else
  37.                                                 {
  38.                                                     SampleNames.Add(Rvalue[1]);
  39.                                                     //check if the sample is in the master list.
  40.                                                     int sampNum = bank.SampleNameList.IndexOf(Rvalue[1]);
  41.                                                     Sample s;
  42.                                                     if (sampNum > -1)//its in the list
  43.                                                     {
  44.                                                         s = bank.SampleList[sampNum];
  45.                                                     }
  46.                                                     else//its not in the list
  47.                                                     {
  48.                                                         s = new Sample(InstrumentPath + "SAMPLES/" + Rvalue[1] + ".wav");
  49.                                                         bank.SampleList.Add(s);
  50.                                                         bank.SampleNameList.Add(Rvalue[1]);
  51.                                                     }
  52.                                                     if (s.isDualChannel == false)
  53.                                                         allSamplesHaveDualChannels = false;
  54.                                                     Samples.Add(s);
  55.                                                     Group.SampleIndex = SampleNames.Count - 1;
  56.                                                 }
  57.                                                 break;
  58.                                             case "hikey":
  59.                                                 Group.HiNote = (byte)int.Parse(Rvalue[1]);
  60.                                                 groupValues[1] = true;
  61.                                                 break;
  62.                                             case "lokey":
  63.                                                 Group.LoNote = (byte)int.Parse(Rvalue[1]);
  64.                                                 groupValues[2] = true;
  65.                                                 break;
  66.                                             case "loop_start":
  67.                                                 Group.LoopStart = int.Parse(Rvalue[1]);
  68.                                                 groupValues[3] = true;
  69.                                                 break;
  70.                                             case "loop_end":
  71.                                                 Group.LoopEnd = int.Parse(Rvalue[1]);
  72.                                                 groupValues[4] = true;
  73.                                                 break;
  74.                                             case "tune":
  75.                                                 Group.Tune = int.Parse(Rvalue[1]) / 100.0f;
  76.                                                 groupValues[5] = true;
  77.                                                 break;
  78.                                             case "pitch_keycenter":
  79.                                                 Group.Root = int.Parse(Rvalue[1]);
  80.                                                 groupValues[6] = true;
  81.                                                 break;
  82.                                             case "volume":
  83.                                                 Group.Volume = float.Parse(Rvalue[1]);
  84.                                                 groupValues[7] = true;
  85.                                                 break;
  86.                                             case "loop_mode":
  87.                                                 groupValues[8] = true;
  88.                                                 switch (Rvalue[1])
  89.                                                 {
  90.                                                     case "loop_continuous":
  91.                                                         Group.LoopMode = 1;
  92.                                                         break;
  93.                                                     case "loop_sustain":
  94.                                                         Group.LoopMode = 2;
  95.                                                         break;
  96.                                                     default:
  97.                                                         Group.LoopMode = 0;
  98.                                                         break;
  99.                                                 }
  100.                                                 break;
  101.                                             case "ampeg_release":
  102.                                                 groupValues[9] = true;
  103.                                                 Group.Release = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  104.                                                 break;
  105.                                             case "ampeg_attack":
  106.                                                 groupValues[10] = true;
  107.                                                 Group.Attack = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  108.                                                 break;
  109.                                             case "ampeg_decay":
  110.                                                 groupValues[11] = true;
  111.                                                 Group.Decay = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  112.                                                 break;
  113.                                             case "ampeg_hold":
  114.                                                 groupValues[12] = true;
  115.                                                 Group.Hold = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  116.                                                 break;
  117.                                             case "lovel":
  118.                                                 groupValues[13] = true;
  119.                                                 Group.LoVelocity = (byte)int.Parse(Rvalue[1]);
  120.                                                 break;
  121.                                             case "hivel":
  122.                                                 groupValues[14] = true;
  123.                                                 Group.HiVelocity = (byte)int.Parse(Rvalue[1]);
  124.                                                 break;
  125.                                             case "lochan":
  126.                                                 groupValues[15] = true;
  127.                                                 Group.LoChannel = (byte)(int.Parse(Rvalue[1]) - 1);
  128.                                                 break;
  129.                                             case "hichan":
  130.                                                 groupValues[16] = true;
  131.                                                 Group.HiChannel = (byte)(int.Parse(Rvalue[1]) - 1);
  132.                                                 break;
  133.                                             case "key":
  134.                                                 Group.Root = int.Parse(Rvalue[1]);
  135.                                                 groupValues[6] = true;
  136.                                                 Group.HiNote = (byte)Group.Root;
  137.                                                 groupValues[1] = true;
  138.                                                 Group.LoNote = (byte)Group.Root;
  139.                                                 groupValues[2] = true;
  140.                                                 break;
  141.                                             case "offset":
  142.                                                 groupValues[17] = true;
  143.                                                 Group.Offset = int.Parse(Rvalue[1]);
  144.                                                 break;
  145.                                             case "pan":
  146.                                                 groupValues[18] = true;
  147.                                                 Group.Pan = float.Parse(Rvalue[1]);
  148.                                                 break;
  149.                                             case "effect1":
  150.                                                 groupValues[19] = true;
  151.                                                 Group.Effect1 = float.Parse(Rvalue[1]);
  152.                                                 break;
  153.                                             case "effect2":
  154.                                                 groupValues[20] = true;
  155.                                                 Group.Effect2 = float.Parse(Rvalue[1]);
  156.                                                 break;
  157.                                             default:
  158.                                                 break;
  159.                                         }
  160.                                     }
  161.                                 }
  162.                             }
  163.                             else if (line == "<region>")
  164.                             {
  165.                                 SfzRegion r = new SfzRegion();
  166.                                 while (text[x] != "")
  167.                                 {
  168.                                     x++;
  169.                                     if (x >= text.Length)
  170.                                         break;
  171.                                     string[] Rvalue = text[x].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
  172.                                     if (Rvalue.Length == 2)
  173.                                     {
  174.                                         switch (Rvalue[0])
  175.                                         {
  176.                                             case "sample":
  177.                                                 Rvalue[1] = System.IO.Path.GetFileNameWithoutExtension(Rvalue[1]);//remove ending .wav
  178.                                                 if (SampleNames.Contains(Rvalue[1]))//its in the local list so no need to check the master list
  179.                                                 {
  180.                                                     r.SampleIndex = SampleNames.IndexOf(Rvalue[1]);
  181.                                                 }
  182.                                                 else
  183.                                                 {
  184.                                                     SampleNames.Add(Rvalue[1]);
  185.                                                     //check if the sample is in the master list.
  186.                                                     int sampNum = bank.SampleNameList.IndexOf(Rvalue[1]);
  187.                                                     Sample s;
  188.                                                     if (sampNum > -1)//its in the list
  189.                                                     {
  190.                                                         s = bank.SampleList[sampNum];
  191.                                                     }
  192.                                                     else//its not in the list
  193.                                                     {
  194.                                                         s = new Sample(InstrumentPath + "SAMPLES/" + Rvalue[1] + ".wav");
  195.                                                         bank.SampleList.Add(s);
  196.                                                         bank.SampleNameList.Add(Rvalue[1]);
  197.                                                     }
  198.                                                     if (s.isDualChannel == false)
  199.                                                         allSamplesHaveDualChannels = false;
  200.                                                     Samples.Add(s);
  201.                                                     r.SampleIndex = SampleNames.Count - 1;
  202.                                                 }
  203.                                                 break;
  204.                                             case "hikey":
  205.                                                 r.HiNote = (byte)int.Parse(Rvalue[1]);
  206.                                                 break;
  207.                                             case "lokey":
  208.                                                 r.LoNote = (byte)int.Parse(Rvalue[1]);
  209.                                                 break;
  210.                                             case "loop_start":
  211.                                                 r.LoopStart = int.Parse(Rvalue[1]);
  212.                                                 break;
  213.                                             case "loop_end":
  214.                                                 r.LoopEnd = int.Parse(Rvalue[1]);
  215.                                                 break;
  216.                                             case "tune":
  217.                                                 r.Tune = int.Parse(Rvalue[1]) / 100.0f;
  218.                                                 break;
  219.                                             case "pitch_keycenter":
  220.                                                 r.Root = int.Parse(Rvalue[1]);
  221.                                                 break;
  222.                                             case "volume":
  223.                                                 r.Volume = float.Parse(Rvalue[1]);
  224.                                                 break;
  225.                                             case "loop_mode":
  226.                                                 switch (Rvalue[1])
  227.                                                 {
  228.                                                     case "loop_continuous":
  229.                                                         r.LoopMode = 1;
  230.                                                         break;
  231.                                                     case "loop_sustain":
  232.                                                         r.LoopMode = 2;
  233.                                                         break;
  234.                                                     default:
  235.                                                         r.LoopMode = 0;
  236.                                                         break;
  237.                                                 }
  238.                                                 break;
  239.                                             case "ampeg_release":
  240.                                                 r.Release = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  241.                                                 break;
  242.                                             case "ampeg_attack":
  243.                                                 r.Attack = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  244.                                                 break;
  245.                                             case "ampeg_decay":
  246.                                                 r.Decay = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  247.                                                 break;
  248.                                             case "ampeg_hold":
  249.                                                 r.Hold = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
  250.                                                 break;
  251.                                             case "lovel":
  252.                                                 r.LoVelocity = (byte)int.Parse(Rvalue[1]);
  253.                                                 break;
  254.                                             case "hivel":
  255.                                                 r.HiVelocity = (byte)int.Parse(Rvalue[1]);
  256.                                                 break;
  257.                                             case "lochan":
  258.                                                 r.LoChannel = (byte)(int.Parse(Rvalue[1]) - 1);
  259.                                                 break;
  260.                                             case "hichan":
  261.                                                 r.HiChannel = (byte)(int.Parse(Rvalue[1]) - 1);
  262.                                                 break;
  263.                                             case "key":
  264.                                                 r.Root = int.Parse(Rvalue[1]);
  265.                                                 r.HiNote = (byte)r.Root;
  266.                                                 r.LoNote = (byte)r.Root;
  267.                                                 break;
  268.                                             case "offset":
  269.                                                 r.Offset = int.Parse(Rvalue[1]);
  270.                                                 break;
  271.                                             case "pan":
  272.                                                 r.Pan = float.Parse(Rvalue[1]);
  273.                                                 break;
  274.                                             case "effect1":
  275.                                                 r.Effect1 = float.Parse(Rvalue[1]);
  276.                                                 break;
  277.                                             case "effect2":
  278.                                                 r.Effect2 = float.Parse(Rvalue[1]);
  279.                                                 break;
  280.                                             default:
  281.                                                 break;
  282.                                         }
  283.                                     }
  284.                                 }
  285.                                 if (Regions.Contains(r) == false)
  286.                                     Regions.Add(r);
  287.                             }
  288.                             break;
  289.                         default:
  290.                             break;
  291.                     }
  292.                 }
  293.             }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement