Sampler.java (2093B)
1 package com.github.cythara; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 8 class Sampler { 9 10 static PitchDifference calculateAverageDifference(List<PitchDifference> samples) { 11 Note mostFrequentNote = extractMostFrequentNote(samples); 12 List<PitchDifference> filteredSamples = filterByNote(samples, mostFrequentNote); 13 14 double deviationSum = 0; 15 int sameNoteCount = 0; 16 for (PitchDifference pitchDifference : filteredSamples) { 17 deviationSum += pitchDifference.deviation; 18 sameNoteCount++; 19 } 20 21 if (sameNoteCount > 0) { 22 double averageDeviation = deviationSum / sameNoteCount; 23 24 return new PitchDifference(mostFrequentNote, averageDeviation); 25 } 26 27 return null; 28 } 29 30 static List<PitchDifference> filterByNote(List<PitchDifference> samples, Note note) { 31 List<PitchDifference> filteredSamples = new ArrayList<>(); 32 33 for (PitchDifference sample : samples) { 34 if (sample.closest == note) { 35 filteredSamples.add(sample); 36 } 37 } 38 39 return filteredSamples; 40 } 41 42 static Note extractMostFrequentNote(List<PitchDifference> samples) { 43 Map<Note, Integer> noteFrequencies = new HashMap<>(); 44 45 for (PitchDifference pitchDifference : samples) { 46 Note closest = pitchDifference.closest; 47 if (noteFrequencies.containsKey(closest)) { 48 Integer count = noteFrequencies.get(closest); 49 noteFrequencies.put(closest, count + 1); 50 } else { 51 noteFrequencies.put(closest, 1); 52 } 53 } 54 55 Note mostFrequentNote = null; 56 int mostOccurrences = 0; 57 for (Note note : noteFrequencies.keySet()) { 58 Integer occurrences = noteFrequencies.get(note); 59 if (occurrences > mostOccurrences) { 60 mostFrequentNote = note; 61 mostOccurrences = occurrences; 62 } 63 } 64 65 return mostFrequentNote; 66 } 67 }