commit 1ea24f06ecd77e9a0e52655c54838df2858de660
parent d1f110acc6b4ddae6880820a9ed0f9f810793253
Author: gstraube <gstraube@mailbox.org>
Date: Sat, 14 Oct 2017 18:46:28 +0200
Enable switching between tunings
Diffstat:
8 files changed, 102 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/com/github/cythara/MainActivity.java b/app/src/main/java/com/github/cythara/MainActivity.java
@@ -11,11 +11,20 @@ import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
-public class MainActivity extends AppCompatActivity implements ListenerFragment.TaskCallbacks {
+import static android.widget.ArrayAdapter.*;
+import static com.github.cythara.TuningMapper.getTuningFromPosition;
+
+public class MainActivity extends AppCompatActivity implements ListenerFragment.TaskCallbacks,
+ AdapterView.OnItemSelectedListener {
public static final int RECORD_AUDIO_PERMISSION = 0;
private static final String TAG_LISTENER_FRAGMENT = "listener_fragment";
+ static Tuning tuning = new GuitarTuning();
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -31,6 +40,13 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+
+ Spinner spinner = findViewById(R.id.tuning);
+ ArrayAdapter<CharSequence> adapter = createFromResource(this,
+ R.array.tunings, android.R.layout.simple_spinner_item);
+ adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+ spinner.setAdapter(adapter);
+ spinner.setOnItemSelectedListener(this);
}
@Override
@@ -88,4 +104,14 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment.
.commit();
}
}
+
+ @Override
+ public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
+ tuning = getTuningFromPosition(position);
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> adapterView) {
+
+ }
}
diff --git a/app/src/main/java/com/github/cythara/PitchComparator.java b/app/src/main/java/com/github/cythara/PitchComparator.java
@@ -6,7 +6,7 @@ import java.util.Comparator;
class PitchComparator {
static PitchDifference retrieveNote(float pitch) {
- Tuning tuning = new GuitarTuning();
+ Tuning tuning = MainActivity.tuning;
Note[] notes = tuning.getNotes();
Arrays.sort(notes, new Comparator<Note>() {
diff --git a/app/src/main/java/com/github/cythara/PitchDifference.java b/app/src/main/java/com/github/cythara/PitchDifference.java
@@ -7,7 +7,6 @@ class PitchDifference implements Parcelable {
final Note closest;
final double deviation;
- private final Tuning tuning = new GuitarTuning();
PitchDifference(Note closest, double deviation) {
this.closest = closest;
@@ -15,6 +14,7 @@ class PitchDifference implements Parcelable {
}
private PitchDifference(Parcel in) {
+ Tuning tuning = MainActivity.tuning;
closest = tuning.findNote(in.readString());
deviation = in.readDouble();
}
diff --git a/app/src/main/java/com/github/cythara/TuningMapper.java b/app/src/main/java/com/github/cythara/TuningMapper.java
@@ -0,0 +1,21 @@
+package com.github.cythara;
+
+import android.util.Log;
+
+class TuningMapper {
+
+ private static final int GUITAR_TUNING_POSITION = 0;
+ private static final int UKULELE_TUNING_POSITION = 1;
+
+ static Tuning getTuningFromPosition(int position) {
+ switch (position) {
+ case GUITAR_TUNING_POSITION:
+ return new GuitarTuning();
+ case UKULELE_TUNING_POSITION:
+ return new UkuleleTuning();
+ default:
+ Log.w("com.github.cythara", "Unknown position for tuning dropdown list");
+ return new GuitarTuning();
+ }
+ }
+}
diff --git a/app/src/main/java/com/github/cythara/UkuleleString.java b/app/src/main/java/com/github/cythara/UkuleleString.java
@@ -0,0 +1,23 @@
+package com.github.cythara;
+
+enum UkuleleString implements Note {
+
+ G(391.995f),
+ C(261.626f),
+ E(329.628f),
+ A(440f);
+
+ private final float frequency;
+
+ UkuleleString(float frequency) {
+ this.frequency = frequency;
+ }
+
+ public String getName() {
+ return this.name();
+ }
+
+ public float getFrequency() {
+ return frequency;
+ }
+}
diff --git a/app/src/main/java/com/github/cythara/UkuleleTuning.java b/app/src/main/java/com/github/cythara/UkuleleTuning.java
@@ -0,0 +1,14 @@
+package com.github.cythara;
+
+class UkuleleTuning implements Tuning {
+
+ @Override
+ public Note[] getNotes() {
+ return UkuleleString.values();
+ }
+
+ @Override
+ public Note findNote(String name) {
+ return UkuleleString.valueOf(name);
+ }
+}
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
@@ -3,11 +3,19 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:orientation="vertical"
tools:context="com.github.cythara.MainActivity">
+ <Spinner
+ android:id="@+id/tuning"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@android:drawable/btn_dropdown"
+ android:spinnerMode="dropdown" />
+
<com.github.cythara.TunerView
android:id="@+id/pitch"
- android:layout_width="match_parent"
- android:layout_height="match_parent" />
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
@@ -1,3 +1,8 @@
<resources>
<string name="app_name">Cythara</string>
+ <string-array name="tunings">
+ <item>Standard guitar tuning</item>
+ <item>Ukulele</item>
+ </string-array>
+
</resources>