// Use like this: // Zebra2Preset.EnvelopeTimeBase timebase = Zebra2Preset.EnvelopeTimeBase.TIMEBASE_1_4; // double envValue = 0.0; // Zebra2Preset.MillisecondsToEnvTypeAndValue(msValue, out timebase, out envValue); public static void MillisecondsToEnvTypeAndValue(float msValue, out EnvelopeTimeBase timeBase, out double envValue) { // round to nearest 5 int timeInMs = MathUtils.RoundToNearestInteger( (int) msValue, 5); if (timeInMs <= 8000) { // use 8sX timeBase = Zebra2Preset.EnvelopeTimeBase.TIMEBASE_8sX; envValue = MillisecondsToEnvValue(timeInMs, timeBase); } else if (timeInMs > 8000 && timeInMs <= 16000) { timeBase = Zebra2Preset.EnvelopeTimeBase.TIMEBASE_16sX; envValue = MillisecondsToEnvValue(timeInMs, timeBase); } else { // Zebra2 cannot use more than 16 seconds timeBase = Zebra2Preset.EnvelopeTimeBase.TIMEBASE_8sX; envValue = 0; } }
public static double EnvTypeAndValueToMilliseconds(EnvelopeTimeBase timeBase, double envValue) { // Forumla: =1000*((B3/50)^3) double ms = 0; switch (timeBase) { case EnvelopeTimeBase.TIMEBASE_8sX: ms = 1000 * ( Math.Pow(envValue / 50, 3) ); break; case EnvelopeTimeBase.TIMEBASE_16sX: ms = 2000 * ( Math.Pow(envValue / 50, 3) ); break; case EnvelopeTimeBase.TIMEBASE_10s: ms = envValue * 100; break; } return ms; }