Exemplo n.º 1
0
        /// <summary>
        ///  Gets the distance between the played frequency to the open note by percentage.
        /// </summary>
        /// <param name="twoClosestOpenNotes">The two closest open notes to the frequency.</param> 
        /// <param name="closestNote">The most closest note, out of the two closest notes, 
        /// which will be used as a reference to calculate the difference between this and the playedFrequency.</param>
        /// <param name="playedFrequency">The note that the user hits translated to frequency [Hz].</param>
        /// <returns>How close the users' frequency is from the desired note.</returns>
        private NoteDifference CalculateRatioOfCloseness(UpperAndLowerNotes twoClosestOpenNotes, Note closestNote, Hz playedFrequency)
        {
            float closenessToMark; //Closeness to the exact note mark. Number between 0 and 1.
            NoteDifference noteDiff = new NoteDifference();

            //Represents how close the frequency is from the closestNote.
            float difference = Math.Abs(playedFrequency - closestNote.Hertz);

            float middleOfTwoOpenNotes = Math.Abs(twoClosestOpenNotes.Upper.Hertz - twoClosestOpenNotes.Lower.Hertz) / 2;

            if (middleOfTwoOpenNotes != 0)
                //Calculate the closness to the closestNote.
                closenessToMark = difference / middleOfTwoOpenNotes; //FIX: Why is that?
            else
                closenessToMark = difference;
            //Calculate the alpha (opacity) of the note indicator.
            //noteDiff.ClosnessAlpha = NoteDifference.FULL_ALPHA - closenessToMark;
            //Calculate the closness by a precentage of base 90.
            noteDiff.ClosnessByPercentage_Base90 = closenessToMark * 90; //FIX: This is not a precentage!
            noteDiff.ClosestNote = closestNote.Name;

            if (playedFrequency < closestNote.Hertz)
            {
                //from -90 to 0 degrees.
                noteDiff.ClosnessByPercentage_Base90 *= (-1);
                //if (closestNote.Alias != null)
                //    noteDiff.ClosestNote = closestNote.Alias;
            }

            return noteDiff;
        }
Exemplo n.º 2
0
        /// <summary>
        /// Finds the two closest open chord notes (as shown at NoteFrequencyFilter description) 
        /// of the played frequency.
        /// </summary>
        /// <param name="playedFrequency">The frequency the user played.</param>
        /// <returns>Returns the two closest open chord notes, 
        /// unless the playedFrequency is above the highest open string frequency, 
        /// or below the lowest open string frequency,
        /// in that case it will return the same value for both.</returns>
        private UpperAndLowerNotes GetTwoClosestOpenNotes(Hz playedFrequency)
        {
            UpperAndLowerNotes twoClosestOpenNotes = new UpperAndLowerNotes(Notes.LowerLimit, Notes.UpperLimit);

            if (playedFrequency <= OpenStringNotes.E2.Hertz)
            {
                twoClosestOpenNotes.Lower = Notes.LowerLimit;
                twoClosestOpenNotes.Upper = OpenStringNotes.E2;
            }
            else if (playedFrequency > OpenStringNotes.E2.Hertz && playedFrequency <= OpenStringNotes.A2.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.E2;
                twoClosestOpenNotes.Upper = OpenStringNotes.A2;
            }
            else if (playedFrequency > OpenStringNotes.A2.Hertz && playedFrequency <= OpenStringNotes.D3.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.A2;
                twoClosestOpenNotes.Upper = OpenStringNotes.D3;
            }
            else if (playedFrequency > OpenStringNotes.D3.Hertz && playedFrequency <= OpenStringNotes.G3.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.D3;
                twoClosestOpenNotes.Upper = OpenStringNotes.G3;
            }
            else if (playedFrequency > OpenStringNotes.G3.Hertz && playedFrequency <= OpenStringNotes.B3.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.G3;
                twoClosestOpenNotes.Upper = OpenStringNotes.B3;
            }
            else if (playedFrequency > OpenStringNotes.B3.Hertz && playedFrequency <= OpenStringNotes.E4.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.B3;
                twoClosestOpenNotes.Upper = OpenStringNotes.E4;
            }
            else if (playedFrequency > OpenStringNotes.E4.Hertz)
            {
                twoClosestOpenNotes.Lower = OpenStringNotes.E4;
                twoClosestOpenNotes.Upper = Notes.UpperLimit;
            }

            return twoClosestOpenNotes;
        }
Exemplo n.º 3
0
 /// <summary>
 /// Find the single open note which is closest to the frequency.
 /// </summary>
 /// <param name="twoClosestOpenNotes">The two open notes that the frequency is between them.</param>
 /// <param name="frequency">The given frequency.</param>
 /// <returns>Retruns the main note that is being tuned to.</returns>
 private Note FindClosestOpenNote(UpperAndLowerNotes twoClosestOpenNotes, Hz frequency)
 {
     if ((twoClosestOpenNotes.Upper.Hertz - frequency) < (frequency - twoClosestOpenNotes.Lower.Hertz))
         return twoClosestOpenNotes.Upper;
     else
         return twoClosestOpenNotes.Lower;
 }