From f86aaa37823e2de557e147982e1af0e51899681b Mon Sep 17 00:00:00 2001 From: Matt Jenkins Date: Sun, 2 Feb 2020 00:36:29 +0000 Subject: [PATCH] Delay and batch waveform updates --- .../audiobookrecorder/AudiobookRecorder.java | 59 +++++++++++++------ 1 file changed, 42 insertions(+), 17 deletions(-) diff --git a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java index d3fc1fe..a22062d 100644 --- a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java +++ b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java @@ -11,6 +11,7 @@ import java.util.Enumeration; import java.util.Properties; import java.util.Queue; import java.util.Random; +import java.util.Timer; import java.util.TimerTask; import java.util.TreeMap; import java.util.UUID; @@ -177,6 +178,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { JSpinner postSentenceGap; JSpinner gainPercent; + Timer waveformUpdater = new Timer(); JCheckBox locked; JCheckBox attention; JCheckBox rawAudio; @@ -203,7 +205,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { public static AudiobookRecorder window; - public QueuespeechProcessQueue = null; + public QueueprocessQueue = null; void buildToolbar(Container ob) { Debug.trace(); @@ -419,7 +421,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { Debug.debugEnabled = CLI.isSet("debug"); Debug.traceEnabled = CLI.isSet("trace"); - speechProcessQueue = new ArrayDeque(); + processQueue = new ArrayDeque(); try { @@ -445,7 +447,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { Options.loadPreferences(); for (int i = 0; i < Options.getInteger("process.threads"); i++) { - WorkerThread worker = new WorkerThread(speechProcessQueue); + WorkerThread worker = new WorkerThread(processQueue); worker.start(); } @@ -1039,6 +1041,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { public static void main(String args[]) { Debug.trace(); + Properties props = System.getProperties(); + props.setProperty("sun.java2d.opengl", "true"); try { config.load(AudiobookRecorder.class.getResourceAsStream("config.txt")); } catch (Exception e) { @@ -1193,8 +1197,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { if (snt.getId().equals(snt.getText())) { Runnable r = snt.getRecognitionRunnable(); snt.setQueued(); - speechProcessQueue.add(r); - speechProcessQueue.notify(); + queueJob(r); } } } @@ -1659,12 +1662,9 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { if (!snt.isLocked()) { if (!snt.beenDetected()) { Debug.d("Queueing recognition of", snt.getId()); - synchronized(speechProcessQueue) { - Runnable r = snt.getRecognitionRunnable(); - snt.setQueued(); - speechProcessQueue.add(r); - speechProcessQueue.notify(); - } + Runnable r = snt.getRecognitionRunnable(); + snt.setQueued(); + queueJob(r); } } } @@ -3516,16 +3516,35 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { updateWaveform(false); } - public void updateWaveform(boolean force) { + TimerTask waveformUpdaterTask = null; + + synchronized public void updateWaveform(boolean force) { Debug.trace(); if (selectedSentence != null) { if ((!force) && (sampleWaveform.getId() != null) && (sampleWaveform.getId().equals(selectedSentence.getId()))) return; - sampleWaveform.setId(selectedSentence.getId()); - if (rawAudio.isSelected()) { - sampleWaveform.setData(selectedSentence.getRawAudioData()); - } else { - sampleWaveform.setData(selectedSentence.getDoubleAudioData(effectsEnabled)); + + synchronized (waveformUpdater) { + try { + if (waveformUpdaterTask != null) { + waveformUpdaterTask.cancel(); + } + } catch (Exception ex) { + } + + waveformUpdaterTask = new TimerTask() { + public void run() { + sampleWaveform.setId(selectedSentence.getId()); + if (rawAudio.isSelected()) { + sampleWaveform.setData(selectedSentence.getRawAudioData()); + } else { + sampleWaveform.setData(selectedSentence.getDoubleAudioData(effectsEnabled)); + } + } + }; + + waveformUpdater.schedule(waveformUpdaterTask, 20); } + } } @@ -4185,4 +4204,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener { return null; } + public void queueJob(Runnable r) { + synchronized(processQueue) { + processQueue.add(r); + processQueue.notify(); + } + } }