fixed metronom to be more accurate
This commit is contained in:
6
android/ConductorsPhone/.idea/vcs.xml
generated
Normal file
6
android/ConductorsPhone/.idea/vcs.xml
generated
Normal 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>
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user