You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hi, I am implementing AudioDispatcher in my application, but I am not sure how to start and stop it properly, here is my code:
public class MyAudioFeatureRecorder {
private static final String TAG = "MyAudioFeatureRecorder";
Thread thread;
private boolean runThread;
private final AudioDispatcher dispatcher;
static int dataSourceId;
static SilenceDetector silenceDetector;
MyAudioProcessor mainProcessor;
SharedPreferences configPrefs;
Context context;
public static long PREVIOUS_TIME;
// endregion
public MyAudioFeatureRecorder(Context context) {
this.context = context;
configPrefs = context.getSharedPreferences("Configurations", Context.MODE_PRIVATE);
if (DbMgr.getDB() == null)
DbMgr.init(context);
PREVIOUS_TIME = 0;
int SAMPLING_RATE = 11025;
int AUDIO_BUFFER_SIZE = 1024;
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(SAMPLING_RATE, AUDIO_BUFFER_SIZE, 512);
double SILENCE_THRESHOLD = -65.0D;
silenceDetector = new SilenceDetector(SILENCE_THRESHOLD, false);
dataSourceId = configPrefs.getInt("SOUND_DATA", -1);
Log.d(TAG, "MyAudioFeatureRecorder: Service is Running...");
mainProcessor = new MyAudioProcessor(configPrefs);
if (dispatcher != null) {
dispatcher.addAudioProcessor(silenceDetector);
dispatcher.addAudioProcessor(mainProcessor);
}
}
public void start() {
thread = new Thread(() -> {
while (runThread) {
Log.e(TAG, "start: waiting");
dispatcher.run();
}
});
runThread = true;
thread.start();
}
public void stop() {
if (runThread) {
runThread = false;
thread.interrupt();
try {
dispatcher.stop()
Log.e(TAG, "stop: dispatcher stop");
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.e("TAG", "stop: DeviceModel Stop");
}
}
private static class MyAudioProcessor implements be.tarsos.dsp.AudioProcessor {
SharedPreferences confPrefs;
public MyAudioProcessor(SharedPreferences confPrefs) {
this.confPrefs = confPrefs;
}
@Override
public boolean process(AudioEvent audioEvent) {
long nowTime = System.currentTimeMillis();
if (silenceDetector.currentSPL() >= -110.0D) {
if (dataSourceId != -1 && nowTime >= PREVIOUS_TIME + 10 * 1000) {
Log.e(TAG, "process: SoundData is saving");
DbMgr.saveMixedData(dataSourceId, nowTime, 1.0f, nowTime, silenceDetector.currentSPL(), "ENERGY");
PREVIOUS_TIME = System.currentTimeMillis();
}
}
return true;
}
@Override
public void processingFinished() {
}
}
}
In my Android application, the current SPL should be saved only once in 10 seconds, it is working correctly but when I call the stop() function (interrupts the running thread) UI is freezing and I know that UI is freezing because of improper use of dispatcher.stop(). Where exactly should I call dispatcher.stop() to properly stop the dispatcher?
Thank you
The text was updated successfully, but these errors were encountered:
Hi, I am implementing AudioDispatcher in my application, but I am not sure how to start and stop it properly, here is my code:
public class MyAudioFeatureRecorder {
private static final String TAG = "MyAudioFeatureRecorder";
Thread thread;
private boolean runThread;
private final AudioDispatcher dispatcher;
static int dataSourceId;
static SilenceDetector silenceDetector;
MyAudioProcessor mainProcessor;
SharedPreferences configPrefs;
Context context;
public static long PREVIOUS_TIME;
// endregion
}
In my Android application, the current SPL should be saved only once in 10 seconds, it is working correctly but when I call the stop() function (interrupts the running thread) UI is freezing and I know that UI is freezing because of improper use of dispatcher.stop(). Where exactly should I call dispatcher.stop() to properly stop the dispatcher?
Thank you
The text was updated successfully, but these errors were encountered: