Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void ParseInstrumentData(string[] text, string InstrumentPath, InstrumentBank bank)
- {
- allSamplesHaveDualChannels = true;
- SfzRegion Group = new SfzRegion();
- bool[] groupValues = new bool[21];
- List<Sample> Samples = new List<Sample>();
- List<string> SampleNames = new List<string>();
- List<SfzRegion> Regions = new List<SfzRegion>();
- for (int x = 0; x < text.Length; x++)
- {
- string line = text[x].Trim();
- if (line != "")
- {
- switch (line.Substring(0, 1).ToLower())
- {
- case "<":
- if (line == "<group>")
- {
- while (text[x] != "")
- {
- x++;
- if (x >= text.Length)
- break;
- string[] Rvalue = text[x].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
- if (Rvalue.Length == 2)
- {
- switch (Rvalue[0])
- {
- case "sample":
- Rvalue[1] = System.IO.Path.GetFileNameWithoutExtension(Rvalue[1]);
- groupValues[0] = true;
- if (SampleNames.Contains(Rvalue[1]))//its in the local list so no need to check the master list
- {
- Group.SampleIndex = SampleNames.IndexOf(Rvalue[1]);
- }
- else
- {
- SampleNames.Add(Rvalue[1]);
- //check if the sample is in the master list.
- int sampNum = bank.SampleNameList.IndexOf(Rvalue[1]);
- Sample s;
- if (sampNum > -1)//its in the list
- {
- s = bank.SampleList[sampNum];
- }
- else//its not in the list
- {
- s = new Sample(InstrumentPath + "SAMPLES/" + Rvalue[1] + ".wav");
- bank.SampleList.Add(s);
- bank.SampleNameList.Add(Rvalue[1]);
- }
- if (s.isDualChannel == false)
- allSamplesHaveDualChannels = false;
- Samples.Add(s);
- Group.SampleIndex = SampleNames.Count - 1;
- }
- break;
- case "hikey":
- Group.HiNote = (byte)int.Parse(Rvalue[1]);
- groupValues[1] = true;
- break;
- case "lokey":
- Group.LoNote = (byte)int.Parse(Rvalue[1]);
- groupValues[2] = true;
- break;
- case "loop_start":
- Group.LoopStart = int.Parse(Rvalue[1]);
- groupValues[3] = true;
- break;
- case "loop_end":
- Group.LoopEnd = int.Parse(Rvalue[1]);
- groupValues[4] = true;
- break;
- case "tune":
- Group.Tune = int.Parse(Rvalue[1]) / 100.0f;
- groupValues[5] = true;
- break;
- case "pitch_keycenter":
- Group.Root = int.Parse(Rvalue[1]);
- groupValues[6] = true;
- break;
- case "volume":
- Group.Volume = float.Parse(Rvalue[1]);
- groupValues[7] = true;
- break;
- case "loop_mode":
- groupValues[8] = true;
- switch (Rvalue[1])
- {
- case "loop_continuous":
- Group.LoopMode = 1;
- break;
- case "loop_sustain":
- Group.LoopMode = 2;
- break;
- default:
- Group.LoopMode = 0;
- break;
- }
- break;
- case "ampeg_release":
- groupValues[9] = true;
- Group.Release = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_attack":
- groupValues[10] = true;
- Group.Attack = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_decay":
- groupValues[11] = true;
- Group.Decay = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_hold":
- groupValues[12] = true;
- Group.Hold = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "lovel":
- groupValues[13] = true;
- Group.LoVelocity = (byte)int.Parse(Rvalue[1]);
- break;
- case "hivel":
- groupValues[14] = true;
- Group.HiVelocity = (byte)int.Parse(Rvalue[1]);
- break;
- case "lochan":
- groupValues[15] = true;
- Group.LoChannel = (byte)(int.Parse(Rvalue[1]) - 1);
- break;
- case "hichan":
- groupValues[16] = true;
- Group.HiChannel = (byte)(int.Parse(Rvalue[1]) - 1);
- break;
- case "key":
- Group.Root = int.Parse(Rvalue[1]);
- groupValues[6] = true;
- Group.HiNote = (byte)Group.Root;
- groupValues[1] = true;
- Group.LoNote = (byte)Group.Root;
- groupValues[2] = true;
- break;
- case "offset":
- groupValues[17] = true;
- Group.Offset = int.Parse(Rvalue[1]);
- break;
- case "pan":
- groupValues[18] = true;
- Group.Pan = float.Parse(Rvalue[1]);
- break;
- case "effect1":
- groupValues[19] = true;
- Group.Effect1 = float.Parse(Rvalue[1]);
- break;
- case "effect2":
- groupValues[20] = true;
- Group.Effect2 = float.Parse(Rvalue[1]);
- break;
- default:
- break;
- }
- }
- }
- }
- else if (line == "<region>")
- {
- SfzRegion r = new SfzRegion();
- while (text[x] != "")
- {
- x++;
- if (x >= text.Length)
- break;
- string[] Rvalue = text[x].Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries);
- if (Rvalue.Length == 2)
- {
- switch (Rvalue[0])
- {
- case "sample":
- Rvalue[1] = System.IO.Path.GetFileNameWithoutExtension(Rvalue[1]);//remove ending .wav
- if (SampleNames.Contains(Rvalue[1]))//its in the local list so no need to check the master list
- {
- r.SampleIndex = SampleNames.IndexOf(Rvalue[1]);
- }
- else
- {
- SampleNames.Add(Rvalue[1]);
- //check if the sample is in the master list.
- int sampNum = bank.SampleNameList.IndexOf(Rvalue[1]);
- Sample s;
- if (sampNum > -1)//its in the list
- {
- s = bank.SampleList[sampNum];
- }
- else//its not in the list
- {
- s = new Sample(InstrumentPath + "SAMPLES/" + Rvalue[1] + ".wav");
- bank.SampleList.Add(s);
- bank.SampleNameList.Add(Rvalue[1]);
- }
- if (s.isDualChannel == false)
- allSamplesHaveDualChannels = false;
- Samples.Add(s);
- r.SampleIndex = SampleNames.Count - 1;
- }
- break;
- case "hikey":
- r.HiNote = (byte)int.Parse(Rvalue[1]);
- break;
- case "lokey":
- r.LoNote = (byte)int.Parse(Rvalue[1]);
- break;
- case "loop_start":
- r.LoopStart = int.Parse(Rvalue[1]);
- break;
- case "loop_end":
- r.LoopEnd = int.Parse(Rvalue[1]);
- break;
- case "tune":
- r.Tune = int.Parse(Rvalue[1]) / 100.0f;
- break;
- case "pitch_keycenter":
- r.Root = int.Parse(Rvalue[1]);
- break;
- case "volume":
- r.Volume = float.Parse(Rvalue[1]);
- break;
- case "loop_mode":
- switch (Rvalue[1])
- {
- case "loop_continuous":
- r.LoopMode = 1;
- break;
- case "loop_sustain":
- r.LoopMode = 2;
- break;
- default:
- r.LoopMode = 0;
- break;
- }
- break;
- case "ampeg_release":
- r.Release = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_attack":
- r.Attack = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_decay":
- r.Decay = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "ampeg_hold":
- r.Hold = SynthHelper.getSampleFromTime(this.SampleRate, float.Parse(Rvalue[1]));
- break;
- case "lovel":
- r.LoVelocity = (byte)int.Parse(Rvalue[1]);
- break;
- case "hivel":
- r.HiVelocity = (byte)int.Parse(Rvalue[1]);
- break;
- case "lochan":
- r.LoChannel = (byte)(int.Parse(Rvalue[1]) - 1);
- break;
- case "hichan":
- r.HiChannel = (byte)(int.Parse(Rvalue[1]) - 1);
- break;
- case "key":
- r.Root = int.Parse(Rvalue[1]);
- r.HiNote = (byte)r.Root;
- r.LoNote = (byte)r.Root;
- break;
- case "offset":
- r.Offset = int.Parse(Rvalue[1]);
- break;
- case "pan":
- r.Pan = float.Parse(Rvalue[1]);
- break;
- case "effect1":
- r.Effect1 = float.Parse(Rvalue[1]);
- break;
- case "effect2":
- r.Effect2 = float.Parse(Rvalue[1]);
- break;
- default:
- break;
- }
- }
- }
- if (Regions.Contains(r) == false)
- Regions.Add(r);
- }
- break;
- default:
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement