Improved recognition display

This commit is contained in:
2020-02-01 01:03:02 +00:00
parent 4c25fccc86
commit 7d2b11473b
4 changed files with 123 additions and 59 deletions

View File

@@ -1012,16 +1012,17 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
newbook.setComment(info.getComment().trim());
newbook.setACX(info.getACX().trim());
Chapter caud = new Chapter("audition", "Audition");
Chapter copen = new Chapter("open", "Opening Credits");
Chapter cone = new Chapter("0001", "Chapter 1");
Chapter cclose = new Chapter("close", "Closing Credits");
Chapter caud = new Chapter(UUID.randomUUID().toString(), "Audition");
Chapter copen = new Chapter(UUID.randomUUID().toString(), "Opening Credits");
Chapter cclose = new Chapter(UUID.randomUUID().toString(), "Closing Credits");
Chapter cone = new Chapter(UUID.randomUUID().toString(), "Chapter 1");
newbook.add(caud);
newbook.add(copen);
newbook.add(cone);
newbook.add(cclose);
newbook.add(cone);
File bookRoot = new File(Options.get("path.storage"), newbook.getName());
if (!bookRoot.exists()) {
bookRoot.mkdirs();
@@ -1030,6 +1031,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
File xml = new File(bookRoot, "audiobook.abx");
Document doc = newbook.buildDocument();
File backup = new File(bookRoot, "audiobook.bak");
if (xml.exists()) {
xml.renameTo(backup);
}
// write the content into xml file
TransformerFactory transformerFactory = TransformerFactory.newInstance();
@@ -1127,7 +1132,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
Sentence snt = (Sentence)s.nextElement();
if (!snt.isLocked()) {
if (snt.getId().equals(snt.getText())) {
snt.doRecognition();
Runnable r = snt.getRecognitionRunnable();
snt.setQueued();
speechProcessQueue.add(r);
speechProcessQueue.notify();
}
}
}
@@ -1477,20 +1485,11 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
Chapter chap = (Chapter)o.getObject();
int pos = bookTreeModel.getIndexOfChild(book, chap);
if (pos > 0) pos--;
int id = Utils.s2i(chap.getId());
if (id > 0) {
Chapter prevChap = (Chapter)bookTreeModel.getChild(book, pos);
id = Utils.s2i(prevChap.getId());
if (id > 0) {
bookTreeModel.removeNodeFromParent(chap);
bookTreeModel.insertNodeInto(chap, book, pos);
}
}
book.renumberChapters();
Chapter prevChap = (Chapter)bookTreeModel.getChild(book, pos);
bookTreeModel.removeNodeFromParent(chap);
bookTreeModel.insertNodeInto(chap, book, pos);
}
});
moveUp.setEnabled(idNumber > 0);
JMenuObject moveDown = new JMenuObject("Move Down", c, new ActionListener() {
public void actionPerformed(ActionEvent e) {
@@ -1499,21 +1498,13 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
Chapter chap = (Chapter)o.getObject();
int pos = bookTreeModel.getIndexOfChild(book, chap);
pos++;
int id = Utils.s2i(chap.getId());
if (id > 0) {
Chapter nextChap = (Chapter)bookTreeModel.getChild(book, pos);
if (nextChap != null) {
id = Utils.s2i(nextChap.getId());
if (id > 0) {
bookTreeModel.removeNodeFromParent(chap);
bookTreeModel.insertNodeInto(chap, book, pos);
}
}
Chapter nextChap = (Chapter)bookTreeModel.getChild(book, pos);
if (nextChap != null) {
bookTreeModel.removeNodeFromParent(chap);
bookTreeModel.insertNodeInto(chap, book, pos);
}
book.renumberChapters();
}
});
moveDown.setEnabled(idNumber > 0);
JMenu mergeWith = new JMenu("Merge chapter with");
for (Enumeration bc = book.children(); bc.hasMoreElements();) {
@@ -1607,10 +1598,11 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
for (Enumeration s = c.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement();
if (!snt.isLocked()) {
if (snt.getId().equals(snt.getText())) {
if (!snt.beenDetected()) {
Debug.d("Queueing recognition of", snt.getId());
synchronized(speechProcessQueue) {
Runnable r = snt.getRecognitionRunnable();
snt.setQueued();
speechProcessQueue.add(r);
speechProcessQueue.notify();
}
@@ -2241,6 +2233,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} catch (Exception ex) {
ex.printStackTrace();
}
gatherOrphans();
}
public void loadBookStructure(File f) {
@@ -4089,4 +4083,47 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
// DocumentListener *//
public boolean sentenceIdExists(String id) {
for (Enumeration c = book.children(); c.hasMoreElements();) {
Chapter chp = (Chapter)c.nextElement();
for (Enumeration s = chp.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement();
if (snt.getId().equals(id)) return true;
}
}
return false;
}
public void gatherOrphans() {
Chapter orphans = getChapterById("orphans");
if (orphans == null) {
orphans = new Chapter("orphans", "Orphan Files");
bookTreeModel.insertNodeInto(orphans, book, book.getChildCount());
}
File bookRoot = new File(Options.get("path.storage"), book.getName());
File[] files = new File(bookRoot, "files").listFiles();
for (File f : files) {
String filename = f.getName();
if (filename.startsWith(".")) continue;
if (filename.startsWith("backup")) continue;
if (filename.equals("room-noise")) continue;
if (filename.endsWith(".wav")) {
String id = filename.substring(0, filename.length() - 4);
Debug.d("Testing orphanicity of", id);
if (!sentenceIdExists(id)) {
Sentence newSentence = new Sentence(id, id);
bookTreeModel.insertNodeInto(newSentence, orphans, orphans.getChildCount());
}
}
}
}
public Chapter getChapterById(String id) {
for (Enumeration c = book.children(); c.hasMoreElements();) {
Chapter chp = (Chapter)c.nextElement();
if (chp.getId().equals(id)) return chp;
}
return null;
}
}

View File

@@ -168,18 +168,8 @@ public class Book extends BookTreeNode {
public Chapter addChapter() {
Debug.trace();
Chapter lc = getLastChapter();
if (lc == null) return new Chapter("1", "Chapter 1");
try {
int lcid = Integer.parseInt(lc.getId());
lcid++;
Chapter nc = new Chapter(String.format("%04d", lcid), "Chapter " + lcid);
return nc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
String uuid = UUID.randomUUID().toString();
return new Chapter(uuid, uuid);
}
public String getName() {

View File

@@ -81,29 +81,37 @@ public class BookTreeRenderer extends DefaultTreeCellRenderer {
ctx.gridx = 0;
ctx.gridy = 0;
ctx.weightx = 1.0d;
ctx.fill = GridBagConstraints.HORIZONTAL;
ctx.anchor = GridBagConstraints.LINE_START;
p.add(ret, ctx);
String effectChain = s.getEffectChain();
if ((effectChain == null) || (effectChain.equals("none"))) {
ctx.weightx = 1.0d;
ctx.gridwidth = 2;
p.add(ret, ctx);
} else {
ctx.weightx = 1.0d;
ctx.gridwidth = 1;
p.add(ret, ctx);
Effect e = AudiobookRecorder.window.effects.get(effectChain);
JLabel eff = new JLabel(e.toString() + " ");
if (s.isDetecting()) {
JLabel eff = new JLabel(" recognising... ");
ctx.weightx = 0.0d;
ctx.gridwidth = 1;
ctx.gridx = 1;
p.add(eff);
} else if (s.isQueued()) {
JLabel eff = new JLabel(" queued ");
ctx.weightx = 0.0d;
ctx.gridx = 1;
p.add(eff);
} else if (s.isQueued()) {
}
String effectChain = s.getEffectChain();
if ((effectChain != null) && (!effectChain.equals("none"))) {
Effect e = AudiobookRecorder.window.effects.get(effectChain);
if (e != null) {
JLabel eff = new JLabel(e.toString() + " ");
ctx.weightx = 0.0d;
ctx.gridx = 2;
p.add(eff);
}
}
ctx.gridwidth = 1;
ctx.weightx = 0.0d;
ctx.gridx = 2;
ctx.gridx = 3;
ctx.anchor = GridBagConstraints.LINE_END;
int peak = s.getPeakDB();
JLabel peakLabel = new JLabel(peak + "dB ");
@@ -113,7 +121,7 @@ public class BookTreeRenderer extends DefaultTreeCellRenderer {
p.add(peakLabel, ctx);
ctx.weightx = 0.0d;
ctx.gridx = 3;
ctx.gridx = 4;
ctx.anchor = GridBagConstraints.LINE_END;
p.add(time, ctx);

View File

@@ -59,6 +59,9 @@ public class Sentence extends BookTreeNode implements Cacheable {
boolean inSample;
boolean attention = false;
boolean processed = false;
boolean isDetected = false;
boolean detecting = false;
boolean queued = false;
String effectChain = null;
@@ -204,6 +207,10 @@ public class Sentence extends BookTreeNode implements Cacheable {
processed = Utils.s2b(Book.getTextNode(root, "processed"));
runtime = Utils.s2d(Book.getTextNode(root, "time", "-1.000"));
peak = Utils.s2d(Book.getTextNode(root, "peak", "-1.000"));
isDetected = Utils.s2b(Book.getTextNode(root, "detected"));
if (text == null) text = id;
if (text.equals("")) text = id;
if ((crossStartOffset == -1) || (crossEndOffset == -1)) {
updateCrossings(true);
@@ -497,6 +504,7 @@ public class Sentence extends BookTreeNode implements Cacheable {
public String getText() {
Debug.trace();
if (text == null) return id;
return text;
}
@@ -693,8 +701,9 @@ public class Sentence extends BookTreeNode implements Cacheable {
public void doRecognition() {
Debug.trace();
detecting = true;
queued = false;
try {
setText("[recognising...]");
reloadTree();
String command = Options.get("process.command");
@@ -712,10 +721,13 @@ public class Sentence extends BookTreeNode implements Cacheable {
}
setText(res);
isDetected = true;
detecting = false;
reloadTree();
} catch (Exception e) {
e.printStackTrace();
}
detecting = false;
}
public void recognise() {
@@ -1502,6 +1514,7 @@ public class Sentence extends BookTreeNode implements Cacheable {
public void setEffectChain(String key) {
Debug.trace();
if (key == null) key = "none";
if ((effectChain != null) && (effectChain.equals(key))) {
return;
}
@@ -1618,6 +1631,7 @@ public class Sentence extends BookTreeNode implements Cacheable {
sentenceNode.appendChild(Book.makeTextNode(doc, "notes", getNotes()));
sentenceNode.appendChild(Book.makeTextNode(doc, "time", getLength()));
sentenceNode.appendChild(Book.makeTextNode(doc, "peak", getPeak()));
sentenceNode.appendChild(Book.makeTextNode(doc, "detected", beenDetected()));
return sentenceNode;
}
@@ -1688,5 +1702,20 @@ public class Sentence extends BookTreeNode implements Cacheable {
return (int)db;
}
public boolean isDetecting() {
return detecting;
}
public boolean beenDetected() {
return isDetected;
}
public boolean isQueued() {
return queued;
}
public void setQueued() {
queued = true;
}
}