plectrum

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 0ae6104e50f0b3cdc09be46ed3e3835fe3a43b10
parent 1c9f3fb10429fe33816ae51386512372d937bdff
Author: gstraube <gstraube@mailbox.org>
Date:   Sat, 10 Feb 2018 17:12:46 +0100

Add pitch adjuster (issue #14)

Diffstat:
Aapp/src/main/java/com/github/cythara/PitchAdjuster.java | 19+++++++++++++++++++
Aapp/src/main/res/layout/set_reference_pitch_dialog.xml | 7+++++++
Aapp/src/test/java/com/github/cythara/PitchAdjusterTest.java | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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)); + } +}