private void DetermineRelevantNotes(NoteVisualizers noteVisualizer, int minMidiNote = 24, int MaxMidiNote = 88) { DataPortion dp = songData[noteVisualizer.name]; int numNotes = MaxMidiNote - minMidiNote + 1; int countedNumNotes = 0; List <float> frequenciesThisFrame = new List <float>(); foreach (var noteDataPair in dp.currentFrameNoteData) { NoteData noteData = noteDataPair.Value; if ((noteData.midiNum < minMidiNote) || (noteData.midiNum > MaxMidiNote)) { continue; } dp.currentFrameMeanFrequency += noteData.frequency; countedNumNotes++; frequenciesThisFrame.Add(noteData.frequency); } dp.currentFrameMeanFrequency /= numNotes; dp.stDevThisFrame = getStandardDeviation(frequenciesThisFrame, dp.currentFrameMeanFrequency); pm.Get <Equalizer>().SetThresholdVisual("mean", dp.currentFrameMeanFrequency); pm.Get <Equalizer>().SetThresholdVisual("stDev1", dp.currentFrameMeanFrequency + dp.stDevThisFrame); pm.Get <Equalizer>().SetThresholdVisual("stDev2", dp.currentFrameMeanFrequency + 2 * dp.stDevThisFrame); pm.Get <Equalizer>().SetThresholdVisual("stDev3", dp.currentFrameMeanFrequency + 3 * dp.stDevThisFrame); if (countedNumNotes != numNotes) { Debug.LogError("COUNTED NUM NOTES DOES NOT MATCH ACTUAL NUM NOTES, counted: " + countedNumNotes + "num: " + numNotes); } foreach (var noteDataPair in dp.currentFrameNoteData) { if ((noteDataPair.Key < minMidiNote) || (noteDataPair.Key > MaxMidiNote)) { continue; } NoteData noteData = noteDataPair.Value; float noteDifferenceFromMean = noteData.frequency - dp.currentFrameMeanFrequency; noteData.SetStandardDeviation(noteDifferenceFromMean / dp.stDevThisFrame); if (IsRelevant(noteData, dp, dp.currentFrameMeanFrequency)) { //do something bleh relevantnotes noteVisualizer.AddNoteFrequency(noteData.midiNum, noteData.stDevTotal); AddRelevanceData(noteVisualizer, noteDataPair); } } }
private void AddRelevanceData(NoteVisualizers noteVisual, KeyValuePair <int, NoteData> noteDataPair) { DataPortion dp = songData[noteVisual.name]; //if note was not relevant last frame, add it to the list of relevance data for this frame if (dp.previousFrameNoteData.Count == dp.currentFrameNoteData.Count) { NoteData previousFrameNoteData = dp.previousFrameNoteData[noteDataPair.Key]; if (!IsRelevant(previousFrameNoteData, dp, dp.previousFrameMeanFrequency)) { RelevanceData r = new RelevanceData(noteDataPair.Value); Debug.Log("New relevant Note: " + noteVisual.name + " Note name: " + noteDataPair.Value.midiNum + " | " + ((NOTE_NAME)((noteDataPair.Key + 120) % 12)) + " Time: " + Time.time); } } }