plectrum

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

commit b56f8337ef72c9313a2632f9c6626e18ec2d950d
parent 0ae6104e50f0b3cdc09be46ed3e3835fe3a43b10
Author: gstraube <gstraube@mailbox.org>
Date:   Sun, 11 Feb 2018 11:11:18 +0100

Enable selection of reference pitch (issue #14)

Diffstat:
Mapp/src/main/java/com/github/cythara/ListenerFragment.java | 5+++--
Mapp/src/main/java/com/github/cythara/MainActivity.java | 48+++++++++++++++++++++++++++++++++++++++++++++++-
Aapp/src/main/java/com/github/cythara/NumberPickerDialog.java | 50++++++++++++++++++++++++++++++++++++++++++++++++++
Dapp/src/main/res/layout/set_reference_pitch_dialog.xml | 7-------
Mapp/src/main/res/menu/toolbar_menu.xml | 5+++++
Mapp/src/main/res/values-pt-rBR/strings.xml | 1+
Mapp/src/main/res/values/strings.xml | 1+
7 files changed, 107 insertions(+), 10 deletions(-)

diff --git a/app/src/main/java/com/github/cythara/ListenerFragment.java b/app/src/main/java/com/github/cythara/ListenerFragment.java @@ -18,6 +18,7 @@ import be.tarsos.dsp.pitch.PitchProcessor; import static be.tarsos.dsp.io.android.AudioDispatcherFactory.fromDefaultMicrophone; import static be.tarsos.dsp.pitch.PitchProcessor.PitchEstimationAlgorithm.FFT_YIN; +import static com.github.cythara.PitchComparator.*; public class ListenerFragment extends Fragment { @@ -114,8 +115,8 @@ public class ListenerFragment extends Fragment { float pitch = pitchDetectionResult.getPitch(); if (pitch != -1) { - PitchDifference pitchDifference = PitchComparator.retrieveNote(pitch); - + float adjustedPitch = MainActivity.adjustPitch(pitch); + PitchDifference pitchDifference = retrieveNote(adjustedPitch); pitchDifferences.add(pitchDifference); diff --git a/app/src/main/java/com/github/cythara/MainActivity.java b/app/src/main/java/com/github/cythara/MainActivity.java @@ -20,6 +20,7 @@ import android.view.ContextThemeWrapper; import android.view.Menu; import android.view.MenuItem; import android.view.WindowManager; +import android.widget.NumberPicker; import com.jaredrummler.materialspinner.MaterialSpinner; import com.jaredrummler.materialspinner.MaterialSpinnerAdapter; @@ -29,7 +30,7 @@ import java.util.Arrays; import static com.github.cythara.TuningMapper.getTuningFromPosition; public class MainActivity extends AppCompatActivity implements ListenerFragment.TaskCallbacks, - MaterialSpinner.OnItemSelectedListener { + MaterialSpinner.OnItemSelectedListener, NumberPicker.OnValueChangeListener { public static final int RECORD_AUDIO_PERMISSION = 0; public static final String PREFS_FILE = "prefs_file"; @@ -37,8 +38,10 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. public static final String CURRENT_TUNING = "current_tuning"; private static final String TAG_LISTENER_FRAGMENT = "listener_fragment"; private static final String USE_DARK_MODE = "use_dark_mode"; + private static final String REFERENCE_PITCH = "reference_pitch"; private static int tuningPosition = 0; private static boolean isDarkModeEnabled; + private static PitchAdjuster pitchAdjuster; public static Tuning getCurrentTuning() { return getTuningFromPosition(tuningPosition); @@ -48,6 +51,10 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. return isDarkModeEnabled; } + public static float adjustPitch(float pitch) { + return pitchAdjuster.adjustPitch(pitch); + } + @Override protected void onCreate(Bundle savedInstanceState) { int permissionCheck = ContextCompat.checkSelfPermission(this, @@ -66,6 +73,7 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. setContentView(R.layout.activity_main); setTuning(); + setPitchAdjuster(); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); @@ -127,6 +135,24 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. editor.apply(); recreate(); + + break; + } + case R.id.set_reference_pitch: { + final SharedPreferences preferences = getSharedPreferences(PREFS_FILE, + MODE_PRIVATE); + int referencePitch = preferences.getInt(REFERENCE_PITCH, 440); + + NumberPickerDialog dialog = new NumberPickerDialog(); + + Bundle bundle = new Bundle(); + bundle.putInt("current_value", referencePitch); + dialog.setArguments(bundle); + + dialog.setValueChangeListener(this); + dialog.show(getFragmentManager(), "number_picker"); + + break; } } @@ -187,6 +213,18 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. tuningPosition = position; } + @Override + public void onValueChange(NumberPicker picker, int oldValue, int newValue) { + final SharedPreferences preferences = getSharedPreferences(PREFS_FILE, + MODE_PRIVATE); + + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(REFERENCE_PITCH, newValue); + editor.apply(); + + setPitchAdjuster(); + } + private void startRecording() { FragmentManager fragmentManager = getFragmentManager(); ListenerFragment listenerFragment = (ListenerFragment) @@ -236,4 +274,12 @@ public class MainActivity extends AppCompatActivity implements ListenerFragment. AppCompatDelegate.setDefaultNightMode(mode); } + + private void setPitchAdjuster() { + final SharedPreferences preferences = getSharedPreferences(PREFS_FILE, + MODE_PRIVATE); + int referencePitch = preferences.getInt(REFERENCE_PITCH, 440); + + pitchAdjuster = new PitchAdjuster(referencePitch); + } } diff --git a/app/src/main/java/com/github/cythara/NumberPickerDialog.java b/app/src/main/java/com/github/cythara/NumberPickerDialog.java @@ -0,0 +1,50 @@ +package com.github.cythara; + + +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.content.DialogInterface; +import android.os.Bundle; +import android.widget.NumberPicker; + +public class NumberPickerDialog extends DialogFragment { + + private NumberPicker.OnValueChangeListener valueChangeListener; + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final NumberPicker numberPicker = new NumberPicker(getActivity()); + + Bundle arguments = getArguments(); + int currentValue = arguments.getInt("current_value", 440); + + numberPicker.setMinValue(300); + numberPicker.setMaxValue(500); + numberPicker.setValue(currentValue); + + AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); + builder.setTitle("Set reference pitch"); + builder.setMessage("Choose a frequency:"); + + builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + valueChangeListener.onValueChange(numberPicker, + numberPicker.getValue(), numberPicker.getValue()); + } + }); + + builder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { } + }); + + builder.setView(numberPicker); + return builder.create(); + } + + public void setValueChangeListener(NumberPicker.OnValueChangeListener valueChangeListener) { + this.valueChangeListener = valueChangeListener; + } +} diff --git a/app/src/main/res/layout/set_reference_pitch_dialog.xml b/app/src/main/res/layout/set_reference_pitch_dialog.xml @@ -1,6 +0,0 @@ -<?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/main/res/menu/toolbar_menu.xml b/app/src/main/res/menu/toolbar_menu.xml @@ -8,6 +8,11 @@ app:showAsAction="never" /> <item + android:id="@+id/set_reference_pitch" + android:title="@string/set_reference_pitch" + app:showAsAction="never" /> + + <item android:id="@+id/show_privacy_policy" android:title="@string/privacy_policy" app:showAsAction="never" /> diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml @@ -21,4 +21,5 @@ <item name="sol">Solfège</item> </string-array> <string name="toggle_dark_mode">Alternar modo escuro</string> + <string name="set_reference_pitch">Definir o passo de referência</string> </resources> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml @@ -5,6 +5,7 @@ <string name="toggle_dark_mode">Toggle dark mode</string> <string name="choose_notation">Choose notation</string> <string name="permission_required">Permission required</string> + <string name="set_reference_pitch">Set reference pitch</string> <string-array name="tunings"> <item>Guitar (standard)</item> <item>Guitar (Drop D)</item>