Exemplo n.º 1
0
        public void SetFricationTaps(IntonationModel model)
        {
            double fricationAmplitude = WaveHelper.CalculateAmplitude(model.FricationVolume);


            /*  CALCULATE POSITION REMAINDER AND COMPLEMENT  */
            var integerPart = (int)model.FricationPosition;
            var complement  = model.FricationPosition - (double)integerPart;
            var remainder   = 1.0 - complement;

            /*  SET THE FRICATION TAPS  */
            for (int i = 0; i < 8; i++)
            {
                if (i == integerPart)
                {
                    FricationTap[i] = remainder * fricationAmplitude;
                    if ((i + 1) < 8)
                    {
                        FricationTap[++i] = complement * fricationAmplitude;
                    }
                }
                else
                {
                    FricationTap[i] = 0.0;
                }
            }
        }
Exemplo n.º 2
0
        public void CalculateTubeCoefficients(IntonationModel model, ThroatModelParameters parameters)
        {
            /*  CALCULATE COEFFICIENTS FOR THE Oropharynx  */
            for (int i = 0; i < OropharynxCoefficients.Count(); i++)
            {
                var lastSegment = i + 1 == OropharynxCoefficients.Count();
                var radA2       = Square(model.RadiusSegments.ElementAt(i));
                var radB2       = lastSegment ? Square(parameters.AperatureScalingRadius) : Square(model.RadiusSegments.ElementAt(i + 1));
                OropharynxCoefficients[i] = (radA2 - radB2) / (radA2 + radB2);
            }

            /*  CALCULATE ALPHA COEFFICIENTS FOR 3-WAY JUNCTION  */
            var sides = Square(model.RadiusSegments.ElementAt(3));
            var velum = Square(model.Velum);
            var sum   = 2.0 / (sides + sides + velum);

            Alpha.Left  = sum * sides;
            Alpha.Right = sum * sides;
            Alpha.Upper = sum * velum;

            /*  AND 1ST NASAL PASSAGE COEFFICIENT  */
            var nose = Square(parameters.NoseRadius.ElementAt(1));

            NasalCoefficients[0] = (velum - nose) / (velum + nose);
        }