Пример #1
0
    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);
            }
        }
    }
Пример #2
0
    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);
            }
        }
    }