fixed metronom to be more accurate

This commit is contained in:
toni
2019-01-29 17:11:27 +01:00
parent a438813233
commit 72a672a80b
6 changed files with 26 additions and 40 deletions

6
android/ConductorsPhone/.idea/vcs.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
</component>
</project>

View File

@@ -1,8 +1,6 @@
package de.tonifetzer.conductorswatch; package de.tonifetzer.conductorswatch;
import android.content.Context; import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool; import android.media.SoundPool;
import java.util.TimerTask; import java.util.TimerTask;
@@ -18,7 +16,7 @@ public class Metronome extends TimerTask {
boolean loaded = false; boolean loaded = false;
private int soundID; private int soundID;
public Metronome(Context context){ public Metronome(Context ){
soundPool = new SoundPool.Builder().setMaxStreams(10).build(); soundPool = new SoundPool.Builder().setMaxStreams(10).build();
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override @Override

View File

@@ -7,7 +7,7 @@ buildscript {
jcenter() jcenter()
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.2' classpath 'com.android.tools.build:gradle:3.3.0'
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong

View File

@@ -1,6 +1,6 @@
#Fri Apr 27 11:02:05 CEST 2018 #Tue Jan 29 16:48:07 CET 2019
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

View File

@@ -1,48 +1,32 @@
package de.tonifetzer.conductorswatch; package de.tonifetzer.conductorswatch;
import android.content.Context;
import android.os.Vibrator; import android.os.Vibrator;
import java.util.List; import java.util.List;
import java.util.TimerTask;
import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArrayList;
/** /**
* Created by toni on 13/11/17. * Created by toni on 13/11/17.
*/ */
//TODO: implement the metronome similar to phone. since thread sleeping is no accurate enough public class Metronome extends TimerTask {
public class Metronome implements Runnable{
private volatile boolean mRunning = true; private Vibrator mVibrator;
private int mBPM;
public Metronome(int bpm){ Metronome(Context context){
mBPM = bpm; mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
} }
@Override @Override
public void run() { public void run() {
while(mRunning){
for (OnMetronomeListener listener:listeners) { mVibrator.vibrate(10);
listener.onNewClick();
}
try { for (OnMetronomeListener listener:listeners) {
if(mBPM > 0){ listener.onNewClick();
Thread.sleep(60000 / mBPM);
} else {
Thread.sleep(60000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
}
public void stop() {
mRunning = false;
} }
/** /**

View File

@@ -9,6 +9,8 @@ import android.util.Log;
import android.view.View; import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.TextView; import android.widget.TextView;
import java.util.Timer;
import java.util.Vector; import java.util.Vector;
import de.tonifetzer.conductorswatch.ui.Croller; import de.tonifetzer.conductorswatch.ui.Croller;
@@ -27,8 +29,7 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis
private boolean mWorkerRunning = false; private boolean mWorkerRunning = false;
private Estimator mEstimator; private Estimator mEstimator;
private Metronome mMetronome; private Timer mTimer;
private Thread mMetronomeThread;
private TextView mTextView; private TextView mTextView;
private Croller mCroller; private Croller mCroller;
@@ -55,15 +56,12 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
// init bpm estimator and listener // init bpm estimator and listener
//TODO: hier ein Thread draus machen?
mEstimator = new Estimator(getContext()); mEstimator = new Estimator(getContext());
mEstimator.add(this); mEstimator.add(this);
mBpmList = new Vector<Double>(); mBpmList = new Vector<Double>();
// init metronome and listener // init metronome and listener
mMetronome = new Metronome(getArguments().getInt("bpm")); mTimer = new Timer();
mMetronome.add(this);
mMetronomeThread = new Thread(mMetronome, "metronomThread");
//keep screen always on //keep screen always on
this.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); this.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
@@ -94,8 +92,8 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis
// start the worker thread for bpm estimator // start the worker thread for bpm estimator
mEstimator.start(); mEstimator.start();
// start the worker thread for metronom // start the timer for metronom based on the predefined bpm
mMetronomeThread.start(); mTimer.scheduleAtFixedRate(new Metronome(getContext()), 0, 60000 / getArguments().getInt("bpm"));
// everything is running // everything is running
mWorkerRunning = true; mWorkerRunning = true;
@@ -111,7 +109,7 @@ public class WorkerFragment extends Fragment implements Metronome.OnMetronomeLis
mEstimator.stop(); mEstimator.stop();
// stop the worker thread for metronom // stop the worker thread for metronom
mMetronome.stop(); mTimer.cancel();
//private listener with list of all estimated bpm //private listener with list of all estimated bpm
if (mListener != null) { if (mListener != null) {