Removed pointless garbage collection calls. Massive speedup

This commit is contained in:
2019-09-05 00:20:29 +01:00
parent fa287305eb
commit cd24beb8a6
4 changed files with 110 additions and 39 deletions

View File

@@ -1165,26 +1165,28 @@ public class AudiobookRecorder extends JFrame {
JMenuObject peak = new JMenuObject("Auto-trim all (Peak)", c, new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuObject o = (JMenuObject)e.getSource();
Chapter c = (Chapter)o.getObject();
for (Enumeration s = c.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement();
if (!snt.isLocked()) {
snt.autoTrimSamplePeak();
}
}
Chapter chap = (Chapter)o.getObject();
ProgressDialog ed = new ProgressDialog("Auto-trimming " + chap.getName());
AutoTrimThread t = new AutoTrimThread(chap, ed, AutoTrimThread.Peak);
Thread nt = new Thread(t);
nt.start();
ed.setVisible(true);
}
});
JMenuObject fft = new JMenuObject("Auto-trim all (FFT)", c, new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuObject o = (JMenuObject)e.getSource();
Chapter c = (Chapter)o.getObject();
for (Enumeration s = c.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement();
if (!snt.isLocked()) {
snt.autoTrimSampleFFT();
}
}
Chapter chap = (Chapter)o.getObject();
ProgressDialog ed = new ProgressDialog("Auto-trimming " + chap.getName());
AutoTrimThread t = new AutoTrimThread(chap, ed, AutoTrimThread.FFT);
Thread nt = new Thread(t);
nt.start();
ed.setVisible(true);
}
});
@@ -1329,12 +1331,16 @@ public class AudiobookRecorder extends JFrame {
JMenuObject normalizeAll = new JMenuObject("Normalize chapter", c, new ActionListener() {
public void actionPerformed(ActionEvent e) {
JMenuObject o = (JMenuObject)e.getSource();
Chapter c = (Chapter)o.getObject();
for (Enumeration s = c.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement();
snt.normalize();
}
Chapter chap = (Chapter)o.getObject();
ProgressDialog ed = new ProgressDialog("Normalizing " + chap.getName());
NormalizeThread t = new NormalizeThread(chap, ed);
Thread nt = new Thread(t);
nt.start();
ed.setVisible(true);
}
});
@@ -2215,6 +2221,72 @@ public class AudiobookRecorder extends JFrame {
playingThread.start();
}
class NormalizeThread implements Runnable {
ProgressDialog dialog;
Chapter chapter;
public NormalizeThread(Chapter c, ProgressDialog e) {
super();
dialog = e;
chapter = c;
}
@SuppressWarnings("unchecked")
public void run() {
int numKids = chapter.getChildCount();
int kidCount = 0;
for (Enumeration s = chapter.children(); s.hasMoreElements();) {
kidCount++;
dialog.setProgress(kidCount * 2000 / numKids);
Sentence snt = (Sentence)s.nextElement();
snt.normalize();
}
dialog.closeDialog();
}
}
class AutoTrimThread implements Runnable {
ProgressDialog dialog;
Chapter chapter;
int type;
public final static int FFT = 0;
public final static int Peak = 1;
public AutoTrimThread(Chapter c, ProgressDialog e, int t) {
super();
dialog = e;
chapter = c;
type = t;
}
@SuppressWarnings("unchecked")
public void run() {
int numKids = chapter.getChildCount();
int kidCount = 0;
for (Enumeration s = chapter.children(); s.hasMoreElements();) {
kidCount++;
dialog.setProgress(kidCount * 2000 / numKids);
Sentence snt = (Sentence)s.nextElement();
switch (type) {
case FFT:
snt.autoTrimSampleFFT();
break;
case Peak:
snt.autoTrimSamplePeak();
break;
}
}
dialog.closeDialog();
}
}
class ExportThread implements Runnable {
ProgressDialog exportDialog;
Chapter chapter;
@@ -2398,6 +2470,12 @@ public class AudiobookRecorder extends JFrame {
play.write(data, 0, data.length);
playing = null;
} else {
play.drain();
play.stop();
play.close();
play.open(format);
play.start();
play.drain();
data = getRoomNoise(s.getPostGap());
play.write(data, 0, data.length);
}

View File

@@ -15,15 +15,12 @@ public class CacheManager {
} else {
if (ob instanceof Sentence) {
Sentence s = (Sentence)ob;
s.debug("Normal removal from cache");
}
ob.clearCache();
}
}
cache.add(c);
System.gc();
}
public static void setCacheSize(int c) {
@@ -33,7 +30,6 @@ public class CacheManager {
public static void removeFromCache(Cacheable c) {
if (c instanceof Sentence) {
Sentence s = (Sentence)c;
s.debug("Manual removal from cache");
}
cache.remove(c);
c.clearCache();

View File

@@ -0,0 +1,12 @@
package uk.co.majenko.audiobookrecorder;
public class Debug {
static long timestamp;
static void debug(String msg) {
long now = System.currentTimeMillis();
long diff = now - timestamp;
timestamp = now;
System.err.println(String.format("%8d - %s", diff, msg));
}
}

View File

@@ -161,7 +161,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
return false;
}
debug("Start recording based purge");
CacheManager.removeFromCache(this);
recordingThread = new RecordingThread(getTempFile(), getFile(), Options.getAudioFormat());
@@ -183,7 +182,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
}
}
debug("Stop recording based purge");
CacheManager.removeFromCache(this);
if (!id.equals("room-noise")) {
@@ -224,7 +222,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
samples = getProcessedAudioData();
}
if (samples == null) {
debug("Error: loading data failed!");
return;
}
@@ -306,7 +303,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
updateCrossings(useRaw);
intens = null;
samples = null;
System.gc();
}
@@ -587,7 +583,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
}
public void clearCache() {
debug("Clearing cached data");
audioData = null;
processedAudio = null;
storedFormat = null;
@@ -723,7 +718,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
int gint = (int)(g * 100d);
int gainint = (int)(gain * 100d);
if (gint != gainint) {
debug("Gain based purge");
CacheManager.removeFromCache(this);
}
gain = g;
@@ -770,7 +764,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
proc.waitFor();
} catch (Exception e) {
}
debug("External editor based purge");
CacheManager.removeFromCache(Sentence.this);
AudiobookRecorder.window.updateWaveform();
}
@@ -861,7 +854,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
}
}
debug("External processor based purge");
CacheManager.removeFromCache(Sentence.this);
AudiobookRecorder.window.updateWaveform();
}
@@ -905,7 +897,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
e.printStackTrace();
}
debug("Undo based purge");
CacheManager.removeFromCache(this);
AudiobookRecorder.window.updateWaveform();
}
@@ -1080,7 +1071,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
break;
}
debug("Write based purge");
CacheManager.removeFromCache(this);
}
@@ -1169,7 +1159,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
synchronized public double[][] getProcessedAudioData(boolean effectsEnabled) {
loadFile();
if (processedAudio != null) {
debug("Returning cached data");
return processedAudio;
}
@@ -1186,7 +1175,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
Effect eff = AudiobookRecorder.window.effects.get(def);
if (effectsEnabled) {
debug("Processing audio effects");
if (eff != null) {
eff.init(getAudioFormat().getFrameRate());
eff.process(processedAudio);
@@ -1204,7 +1192,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
}
}
debug("Processing done");
// Add final master gain stage
for (int i = 0; i < processedAudio.length; i++) {
@@ -1212,7 +1199,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
processedAudio[i][RIGHT] *= gain;
}
debug("Gain applied");
return processedAudio;
}
@@ -1272,7 +1258,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
public void setEffectChain(String key) {
if ((effectChain != null) && (!effectChain.equals(key))) {
debug("Effects chain based purge");
CacheManager.removeFromCache(this);
}
effectChain = key;
@@ -1321,6 +1306,6 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable {
}
public void debug(String txt) {
System.err.println(id + ": " + txt);
Debug.debug(String.format("%s: %s", id, txt));
}
}