private void LoadEnvelopes(Sf2Region region)
{
//
//mod env
mod_env = new EnvelopeDescriptor();
mod_env.AttackTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.AttackModulationEnvelope] / 1200.0);
mod_env.AttackGraph = 3;
mod_env.DecayTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.DecayModulationEnvelope] / 1200.0);
mod_env.DelayTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.DelayModulationEnvelope] / 1200.0);
mod_env.HoldTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.HoldModulationEnvelope] / 1200.0);
mod_env.PeakLevel = 1;
mod_env.ReleaseTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.ReleaseModulationEnvelope] / 1200.0);
mod_env.StartLevel = 0;
mod_env.SustainLevel = 1f - SynthHelper.ClampS(region.Generators[(int)GeneratorEnum.SustainModulationEnvelope], (short)0, (short)1000) / 1000f;
//checks
if (mod_env.AttackTime < 0.001f)
mod_env.AttackTime = 0.001f;
else if (mod_env.AttackTime > 100f)
mod_env.AttackTime = 100f;
if (mod_env.DecayTime < 0.001f)
mod_env.DecayTime = 0;
else if (mod_env.DecayTime > 100f)
mod_env.DecayTime = 100f;
if (mod_env.DelayTime < 0.001f)
mod_env.DelayTime = 0;
else if (mod_env.DelayTime > 20f)
mod_env.DelayTime = 20f;
if (mod_env.HoldTime < 0.001f)
mod_env.HoldTime = 0;
else if (mod_env.HoldTime > 20f)
mod_env.HoldTime = 20f;
if (mod_env.ReleaseTime < 0.001f)
mod_env.ReleaseTime = 0.001f;
else if (mod_env.ReleaseTime > 100f)
mod_env.ReleaseTime = 100f;
//
// volume env
vel_env = new EnvelopeDescriptor();
vel_env.AttackTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.AttackVolumeEnvelope] / 1200.0);
vel_env.AttackGraph = 3;
vel_env.DecayTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.DecayVolumeEnvelope] / 1200.0);
vel_env.DelayTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.DelayVolumeEnvelope] / 1200.0);
vel_env.HoldTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.HoldVolumeEnvelope] / 1200.0);
vel_env.PeakLevel = 0;
vel_env.ReleaseTime = (float)Math.Pow(2, region.Generators[(int)GeneratorEnum.ReleaseVolumeEnvelope] / 1200.0);
vel_env.StartLevel = -100;
vel_env.SustainLevel = SynthHelper.ClampS(region.Generators[(int)GeneratorEnum.SustainVolumeEnvelope], (short)0, (short)1000) / -10f;
// checks
if (vel_env.AttackTime < 0.001f)
vel_env.AttackTime = 0.001f;
else if (vel_env.AttackTime > 100f)
vel_env.AttackTime = 100f;
if (vel_env.DecayTime < 0.001f)
vel_env.DecayTime = 0;
else if (vel_env.DecayTime > 100f)
vel_env.DecayTime = 100f;
if (vel_env.DelayTime < 0.001f)
vel_env.DelayTime = 0;
else if (vel_env.DelayTime > 20f)
vel_env.DelayTime = 20f;
if (vel_env.HoldTime < 0.001f)
vel_env.HoldTime = 0;
else if (vel_env.HoldTime > 20f)
vel_env.HoldTime = 20f;
if (vel_env.ReleaseTime < 0.001f)
vel_env.ReleaseTime = 0.001f;
else if (vel_env.ReleaseTime > 100f)
vel_env.ReleaseTime = 100f;
}