commit 0ae6104e50f0b3cdc09be46ed3e3835fe3a43b10
parent 1c9f3fb10429fe33816ae51386512372d937bdff
Author: gstraube <gstraube@mailbox.org>
Date: Sat, 10 Feb 2018 17:12:46 +0100
Add pitch adjuster (issue #14)
Diffstat:
3 files changed, 83 insertions(+), 0 deletions(-)
diff --git a/app/src/main/java/com/github/cythara/PitchAdjuster.java b/app/src/main/java/com/github/cythara/PitchAdjuster.java
@@ -0,0 +1,19 @@
+package com.github.cythara;
+
+class PitchAdjuster {
+
+ private static final float A440 = 440f;
+ private final float adjustmentFactor;
+
+ PitchAdjuster() {
+ adjustmentFactor = 1f;
+ }
+
+ PitchAdjuster(float referencePitch) {
+ adjustmentFactor = referencePitch / A440;
+ }
+
+ float adjustPitch(float pitch) {
+ return pitch / adjustmentFactor;
+ }
+}
diff --git a/app/src/main/res/layout/set_reference_pitch_dialog.xml b/app/src/main/res/layout/set_reference_pitch_dialog.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical" android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+</LinearLayout>
+\ No newline at end of file
diff --git a/app/src/test/java/com/github/cythara/PitchAdjusterTest.java b/app/src/test/java/com/github/cythara/PitchAdjusterTest.java
@@ -0,0 +1,57 @@
+package com.github.cythara;
+
+import com.github.cythara.tuning.GuitarTuning;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static com.github.cythara.NoteName.E;
+import static com.github.cythara.NoteName.G;
+import static com.github.cythara.tuning.GuitarTuning.Pitch;
+import static org.hamcrest.Matchers.is;
+
+public class PitchAdjusterTest {
+
+ @Test
+ public void pitch_is_unchanged_for_A440() {
+ PitchAdjuster pitchAdjuster = new PitchAdjuster();
+
+ for (Pitch pitch : GuitarTuning.Pitch.values()) {
+ Assert.assertThat(pitchAdjuster.adjustPitch(pitch.getFrequency()),
+ is(pitch.getFrequency()));
+ }
+ }
+
+ @Test
+ public void pitch_is_adjusted() {
+ PitchAdjuster pitchAdjuster = new PitchAdjuster(442f);
+ Assert.assertThat(pitchAdjuster.adjustPitch(662.25f), is(659.2534f));
+
+ pitchAdjuster = new PitchAdjuster(434f);
+ Assert.assertThat(pitchAdjuster.adjustPitch(172.23f), is(174.61105f));
+ }
+
+ @Test
+ public void correct_note_is_retrieved_for_adjusted_pitch() {
+ PitchAdjuster pitchAdjuster = new PitchAdjuster(446f);
+ float adjustedPitch = pitchAdjuster.adjustPitch(198.67f);
+
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getName(),
+ is(G));
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getSign(),
+ is(""));
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getOctave(),
+ is(3));
+
+ pitchAdjuster = new PitchAdjuster(432f);
+ adjustedPitch = pitchAdjuster.adjustPitch(80.91f);
+
+
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getName(),
+ is(E));
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getSign(),
+ is(""));
+ Assert.assertThat(PitchComparator.retrieveNote(adjustedPitch).closest.getOctave(),
+ is(2));
+ }
+}