Example #1
0
        private List <FretPosition> CalculateFretsForString(SIString str)
        {
            var frets = new List <FretPosition>();

            if (!CompensateFretPositions)
            {
                for (int i = MinimumFret; i <= MaximumFret; i++)
                {
                    frets.Add(CalculateFretPosition(str, i));
                }
            }
            else
            {
                var positions = FretCompensationCalculator.CalculateFretsCompensatedPositions(
                    str.PhysicalProperties, str.StringLength,
                    str.Tuning.FinalPitch, FretsTemperament,
                    str.ActionAtFirstFret, str.ActionAtTwelfthFret, Measure.Mm(1.1938), str.TotalNumberOfFrets);

                for (int i = 0; i < positions.Length; i++)
                {
                    PreciseDouble fretPosRatio = (str.StringLength - positions[i]).NormalizedValue / str.StringLength.NormalizedValue;
                    var           fretPos      = str.LayoutLine.P2 + (str.LayoutLine.Direction * -1) * (str.StringLength * fretPosRatio);
                    frets.Add(new FretPosition()
                    {
                        FretIndex = i - str.StartingFret, Position = fretPos, StringIndex = str.Index, PositionRatio = fretPosRatio
                    });
                }
            }
            return(frets);
        }
Example #2
0
        public static PreciseDouble GetRelativeFretPosition(StringTuning tuning, int fret, Temperament temperament)
        {
            if (fret == 0)
            {
                return(1d);
            }

            var           pitchAtFret = FretCompensationCalculator.GetPitchAtFret(tuning.FinalPitch, fret, temperament);
            PreciseDouble fretRatio   = NoteConverter.CentsToIntonationRatio(pitchAtFret.Cents - tuning.FinalPitch.Cents);

            return((PreciseDouble)1d / fretRatio);
        }