コード例 #1
0
        public static byte[] GetHarmonicLevels(string waveformName, int count)
        {
            LeiterParameters para   = WaveformParameters[waveformName];
            List <byte>      levels = new List <byte>();
            var n = 0;

            while (n < count)
            {
                levels.Add((byte)LeiterEngine.GetHarmonicLevel(n + 1, para));
                n++;
            }
            return(levels.ToArray());
        }
コード例 #2
0
        public static int GetHarmonicLevel(int harmonicNumber, LeiterParameters para, int maxLevel = 99)
        {
            double aMax  = 1.0;
            double a     = LeiterEngine.Compute(harmonicNumber, para);
            double v     = Math.Log(Math.Abs(a / aMax));
            double level = ((double)maxLevel) + 8.0 * v;

            System.Console.WriteLine(String.Format("DEBUG: n = {0}, a = {1}, v = {2}", harmonicNumber, a, v));
            if (level < 0)
            {
                return(0);
            }
            return((int)Math.Floor(level));
        }
コード例 #3
0
        public static double Compute(int number, LeiterParameters para)
        {
            double n = (double)number;
            double a = para.A;
            double b = para.B;
            double c = para.C;
            double x = n * Math.PI * para.XP;
            double y = n * Math.PI * para.YP;
            double d = para.D;
            double e = para.E;

            double module1 = 1.0 / Math.Pow(n, a);
            double module2 = Math.Pow(Math.Sin(x), b) * Math.Pow(Math.Cos(x), c);
            double module3 = Math.Pow(Math.Sin(y), d) * Math.Pow(Math.Cos(y), e);

            return(module1 * module2 * module3);
        }