private void microphone_BufferReady(object sender, EventArgs e) { _page.MessageTextBlock.Text = ""; _microphone.GetData(_buffer); double[] x = new double[2048]; int index = 0; for (int i = 0; i < 2048; i += 2) { x[index] = Convert.ToDouble(BitConverter.ToInt16(_buffer, i)); index++; } double frequency = FrequencyUtils.FindFundamentalFrequency(x, _microphone.SampleRate, 60, 2000); SoundNote soundNote = new SoundNote(); soundNote.FindNoteByFrequency(frequency); _notesList.Add(soundNote); _page.ShowNote(soundNote); if (!soundNote.IsOutOfTune) { if (IsCorrectListOfNotes(_notesList)) { a = x; double[] b = FrequencyUtils.Spectr; SoundNote lastNote = _notesList.Last(); AchievedNotes.Add(lastNote); _notesList.Clear(); CorrectNoteEvent(_microphone); } } }
public void ShowNote(SoundNote soundNote) { iter++; NoteTextBlock.Foreground = soundNote.IsOutOfTune ? new SolidColorBrush(Colors.Red) : new SolidColorBrush(Colors.Green); NoteTextBlock.Text = soundNote.Note + soundNote.Octave; }
private VocalRange[] GetNeighboursOfNote(SoundNote soundNote, bool isFindingLowest) { VocalRange[] arrayOfRanges = new VocalRange[2]; int distance; if (isFindingLowest) { distance = 100; for (int i = 0; i < _listOfAllRanges.Count; i++) { SoundNote tempNote = new SoundNote(_listOfAllRanges[i].LowestNote); int tempdistance = SoundNote.GetDistanceBetweenNotes(soundNote, tempNote); if (tempdistance < distance && soundNote.CompareTo(tempNote) == 1) { distance = tempdistance; arrayOfRanges[0] = _listOfAllRanges[i]; } } distance = 100; for (int i = 0; i < _listOfAllRanges.Count; i++) { SoundNote tempNote = new SoundNote(_listOfAllRanges[i].LowestNote); int tempdistance = SoundNote.GetDistanceBetweenNotes(soundNote, tempNote); if (tempdistance < distance && soundNote.CompareTo(tempNote) == -1) { distance = tempdistance; arrayOfRanges[1] = _listOfAllRanges[i]; } } } else { distance = 100; for (int i = 0; i < _listOfAllRanges.Count; i++) { SoundNote tempNote = new SoundNote(_listOfAllRanges[i].HighestNote); int tempdistance = SoundNote.GetDistanceBetweenNotes(soundNote, tempNote); if (tempdistance < distance && soundNote.CompareTo(tempNote) == 1) { distance = tempdistance; arrayOfRanges[0] = _listOfAllRanges[i]; } } distance = 100; for (int i = 0; i < _listOfAllRanges.Count; i++) { SoundNote tempNote = new SoundNote(_listOfAllRanges[i].HighestNote); int tempdistance = SoundNote.GetDistanceBetweenNotes(soundNote, tempNote); if (tempdistance < distance && soundNote.CompareTo(tempNote) == -1) { distance = tempdistance; arrayOfRanges[1] = _listOfAllRanges[i]; } } } return(arrayOfRanges); }
public void FindHighestAndLowestNote() { HighestNote = AchievedNotes.Max(); LowestNote = AchievedNotes.Min(); }