Beispiel #1
0
    public void AddNote(Note newNote)
    {
        foreach (var noteVisualizer in allNoteVisualizers)
        {
            DataPortion dp = songData[noteVisualizer.name];
            if (dp.currentFrameNoteData == null)
            {
                dp.currentFrameNoteData = new Dictionary <int, NoteData>();
            }
            NoteData newNoteData = new NoteData(newNote.midiNum, newNote.frequencyIntensity);
            dp.currentFrameNoteData[newNoteData.midiNum] = newNoteData;
        }



        //if (notesInSong == null)
        //{
        //    notesInSong = new List<Note>();
        //    noteDict = new Dictionary<int, SortablePair>();
        //}
        //if (notesInSong.Count == 0)
        //{
        //    songStartTime = Time.time;
        //}
        //notesInSong.Add(newNote);

        //noteDict[(newNote.midiNum + 120) % 12].count++;

        //Analyze();
    }
Beispiel #2
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);
            }
        }
    }
Beispiel #3
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);
            }
        }
    }
Beispiel #4
0
 public void ResetFrame()
 {
     //deep copy
     foreach (NoteVisualizers noteVisual in allNoteVisualizers)
     {
         DataPortion dp = songData[noteVisual.name];
         foreach (var item in dp.currentFrameNoteData)
         {
             dp.previousFrameNoteData[item.Key] = item.Value;
         }
         dp.currentFrameNoteData.Clear();
         dp.previousFrameMeanFrequency = dp.currentFrameMeanFrequency;
         dp.currentFrameMeanFrequency  = 0;
     }
 }
Beispiel #5
0
        /// <summary>
        /// Запуск чтения файла.
        /// </summary>
        /// <param name="filename">Имя исходного файла.</param>
        /// <param name="blockSizeDefinder">Тот, кто умеет определять размер очередной порции данных для чтения.</param>
        public void Run(string filename, IBlockSizeDefinder blockSizeDefinder)
        {
            using (var reader = new Reader(filename, blockSizeDefinder))
            {
                var index = 0;

                byte[] data;
                while (reader.Read(out data))
                {
                    var item = new DataPortion(index, data);
                    _taskQueue.Add(item);

                    index++;
                }

                _taskQueue.Completed();
            }
        }
Beispiel #6
0
    private bool IsRelevant(NoteData noteData, DataPortion dp, float meanFrequency)
    {
        float stDevsAboveMean = ((noteData.frequency - meanFrequency) / dp.stDevThisFrame);

        return(stDevsAboveMean > stDevThreshold);
    }