commit 68b782deed8295eaed1ba3ef0365653fd8ad58ff
parent d0f249754303f8f025ca1cb0e5a9fc941bb5786c
Author: gstraube <gstraube@mailbox.org>
Date: Sun, 23 Jul 2017 18:36:45 +0200
Create method for filtering samples by note
Diffstat:
2 files changed, 33 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/github/cythara/Sampler.java b/app/src/main/java/com/github/cythara/Sampler.java
@@ -2,6 +2,7 @@ package com.github.cythara;
import android.support.annotation.Nullable;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -10,14 +11,13 @@ class Sampler {
static PitchDifference calculateAverageDifference(List<PitchDifference> samples) {
Note mostFrequentNote = extractMostFrequentNote(samples);
+ List<PitchDifference> filteredSamples = filterByNote(samples, mostFrequentNote);
double deviationSum = 0;
int sameNoteCount = 0;
- for (PitchDifference pitchDifference : samples) {
- if (pitchDifference.closest == mostFrequentNote) {
+ for (PitchDifference pitchDifference : filteredSamples) {
deviationSum += pitchDifference.deviation;
sameNoteCount++;
- }
}
if (sameNoteCount > 0) {
@@ -29,6 +29,18 @@ class Sampler {
return null;
}
+ static List<PitchDifference> filterByNote(List<PitchDifference> samples, Note note) {
+ List<PitchDifference> filteredSamples = new ArrayList<>();
+
+ for (PitchDifference sample : samples) {
+ if (sample.closest == note) {
+ filteredSamples.add(sample);
+ }
+ }
+
+ return filteredSamples;
+ }
+
@Nullable
static Note extractMostFrequentNote(List<PitchDifference> samples) {
Map<Note, Integer> noteFrequencies = new HashMap<>();
diff --git a/app/src/test/java/com/github/cythara/SamplerTest.java b/app/src/test/java/com/github/cythara/SamplerTest.java
@@ -33,6 +33,24 @@ public class SamplerTest {
}
@Test
+ public void samples_are_filtered_correctly() {
+ List<PitchDifference> samples = new ArrayList<>();
+
+ samples.add(new PitchDifference(E2, 2D));
+ samples.add(new PitchDifference(E2, 2D));
+ samples.add(new PitchDifference(B3, 3D));
+ samples.add(new PitchDifference(E2, 2D));
+ samples.add(new PitchDifference(Note.G3, 4D));
+ samples.add(new PitchDifference(B3, 3D));
+
+ List<PitchDifference> filteredSamples = filterByNote(samples, B3);
+
+ for (PitchDifference sample : filteredSamples) {
+ assertThat(sample.closest, is(B3));
+ }
+ }
+
+ @Test
public void the_most_frequent_note_is_extracted_correctly() throws Exception {
List<PitchDifference> samples = new ArrayList<>();