Completely remove book and tools menus

This commit is contained in:
2020-02-09 12:05:26 +00:00
parent f6af5ce2e7
commit 43b0ccd96d
3 changed files with 131 additions and 156 deletions

View File

@@ -121,7 +121,6 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
JMenuBar menuBar; JMenuBar menuBar;
JMenu fileMenu; JMenu fileMenu;
JMenu bookMenu;
JMenu toolsMenu; JMenu toolsMenu;
JMenu helpMenu; JMenu helpMenu;
@@ -130,17 +129,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
JMenuItem fileSave; JMenuItem fileSave;
JMenuItem fileExit; JMenuItem fileExit;
JMenuItem fileOpenArchive; JMenuItem fileOpenArchive;
JMenuItem fileOptions;
JMenuItem bookExportAudio;
JMenu bookVisitACX;
JMenuItem bookVisitTitle;
JMenuItem bookVisitAudition;
JMenuItem bookVisitProduce;
JMenuItem toolsArchive;
JMenuItem toolsCoverArt; JMenuItem toolsCoverArt;
JMenuItem toolsManuscript; JMenuItem toolsManuscript;
JMenuItem toolsOptions;
FlashPanel centralPanel; FlashPanel centralPanel;
@@ -252,6 +244,14 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
}); });
fileOptions = new JMenuItem("Options");
fileOptions.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
new Options(AudiobookRecorder.this);
}
});
fileExit = new JMenuItem("Exit"); fileExit = new JMenuItem("Exit");
fileExit.addActionListener(new ActionListener() { fileExit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
@@ -263,102 +263,15 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
fileMenu.add(fileNewBook); fileMenu.add(fileNewBook);
fileMenu.add(fileOpenBook); fileMenu.add(fileOpenBook);
fileMenu.add(fileOpenArchive);
fileMenu.add(fileSave); fileMenu.add(fileSave);
fileMenu.addSeparator(); fileMenu.addSeparator();
fileMenu.add(fileOpenArchive); fileMenu.add(fileOptions);
fileMenu.addSeparator(); fileMenu.addSeparator();
fileMenu.add(fileExit); fileMenu.add(fileExit);
menuBar.add(fileMenu); menuBar.add(fileMenu);
bookMenu = new JMenu("Book");
bookExportAudio = new JMenuItem("Export Audio");
bookExportAudio.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
exportAudio();
}
});
bookMenu.add(bookExportAudio);
bookVisitACX = new JMenu("Visit ACX");
bookMenu.add(bookVisitACX);
bookVisitTitle = new JMenuItem("Title");
bookVisitTitle.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
Utils.browse("https://www.acx.com/titleview/" + getBook().getACX());
}
});
bookVisitACX.add(bookVisitTitle);
bookVisitAudition = new JMenuItem("Audition");
bookVisitAudition.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
Utils.browse("https://www.acx.com/titleview/" + getBook().getACX() + "?bucket=AUDITION_READY");
}
});
bookVisitACX.add(bookVisitAudition);
bookVisitProduce = new JMenuItem("Produce");
bookVisitProduce.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
Utils.browse("https://www.acx.com/titleview/" + getBook().getACX() + "?bucket=PRODUCE");
}
});
bookVisitACX.add(bookVisitProduce);
menuBar.add(bookMenu);
toolsMenu = new JMenu("Tools");
toolsArchive = new JMenuItem("Archive Book");
toolsArchive.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
archiveBook();
}
});
toolsCoverArt = new JMenuItem("Import Cover Art...");
toolsCoverArt.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
loadCoverArt();
}
});
toolsManuscript = new JMenuItem("Import Manuscript...");
toolsManuscript.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
loadManuscript();
}
});
toolsOptions = new JMenuItem("Options");
toolsOptions.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
new Options(AudiobookRecorder.this);
}
});
toolsMenu.add(toolsArchive);
toolsMenu.add(toolsCoverArt);
toolsMenu.add(toolsManuscript);
toolsMenu.addSeparator();
toolsMenu.add(toolsOptions);
menuBar.add(toolsMenu);
helpMenu = new JMenu("Help"); helpMenu = new JMenu("Help");
helpMenu.add(new JMenuObject("Website", null, new ActionListener() { helpMenu.add(new JMenuObject("Website", null, new ActionListener() {
@@ -1859,6 +1772,66 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
menu.addSeparator(); menu.addSeparator();
menu.add(new JMenuObject("Export All Audio", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
exportAudio(thisBook);
}
}));
JMenu visitACX = new JMenu("Visit ACX");
visitACX.add(new JMenuObject("Title", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
Utils.browse("https://www.acx.com/titleview/" + thisBook.getACX() + "?bucket=CREATIVE_BRIEF");
}
}));
visitACX.add(new JMenuObject("Audition", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
Utils.browse("https://www.acx.com/titleview/" + thisBook.getACX() + "?bucket=AUDITION_READY");
}
}));
visitACX.add(new JMenuObject("Produce", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
Utils.browse("https://www.acx.com/titleview/" + thisBook.getACX() + "?bucket=IN_PRODUCTION");
}
}));
menu.add(visitACX);
menu.add(new JMenuObject("Import Cover Art...", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
loadCoverArt(thisBook);
}
}));
menu.add(new JMenuObject("Import Manuscript...", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
loadManuscript(thisBook);
}
}));
menu.addSeparator();
menu.add(new JMenuObject("Scan for orphan files", book, new ActionListener() { menu.add(new JMenuObject("Scan for orphan files", book, new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
Debug.trace(); Debug.trace();
@@ -1888,6 +1861,16 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
menu.addSeparator(); menu.addSeparator();
menu.add(new JMenuObject("Archive book", book, new ActionListener() {
public void actionPerformed(ActionEvent e) {
Debug.trace();
JMenuObject src = (JMenuObject)(e.getSource());
Book thisBook = (Book)(src.getObject());
archiveBook(thisBook);
}
}));
menu.add(new JMenuObject("Close book", book, new ActionListener() { menu.add(new JMenuObject("Close book", book, new ActionListener() {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
Debug.trace(); Debug.trace();
@@ -2513,15 +2496,6 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
public File getBookFolder() {
Debug.trace();
File bf = new File(Options.get("path.storage"), getBook().getName());
if (!bf.exists()) {
bf.mkdirs();
}
return bf;
}
public void playSelectedSentence() { public void playSelectedSentence() {
Debug.trace(); Debug.trace();
if (selectedSentence == null) return; if (selectedSentence == null) return;
@@ -2643,12 +2617,12 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public void exportAudio() { public void exportAudio(Book book) {
Debug.trace(); Debug.trace();
for (Enumeration o = getBook().children(); o.hasMoreElements();) { for (Enumeration o = book.children(); o.hasMoreElements();) {
Chapter c = (Chapter)o.nextElement(); Chapter c = (Chapter)o.nextElement();
if (c.getChildCount() == 0) continue;
ProgressDialog ed = new ProgressDialog("Exporting " + c.getName()); ProgressDialog ed = new ProgressDialog("Exporting " + c.getName());
ExportThread t = new ExportThread(c, ed); ExportThread t = new ExportThread(c, ed);
@@ -2969,18 +2943,20 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
public class ArchiveBookThread implements Runnable { public class ArchiveBookThread implements Runnable {
ProgressDialog pd; ProgressDialog pd;
Book book;
public ArchiveBookThread(ProgressDialog p) { public ArchiveBookThread(ProgressDialog p, Book b) {
Debug.trace(); Debug.trace();
pd = p; pd = p;
book = b;
} }
public void run() { public void run() {
Debug.trace(); Debug.trace();
try { try {
String name = AudiobookRecorder.this.getBook().getName(); String name = book.getName();
File storageDir = new File(Options.get("path.storage")); File storageDir = new File(Options.get("path.storage"));
File bookDir = AudiobookRecorder.this.getBook().getLocation(); File bookDir = book.getLocation();
File archiveDir = new File(Options.get("path.archive")); File archiveDir = new File(Options.get("path.archive"));
ArrayList<File> fileList = gatherFiles(bookDir); ArrayList<File> fileList = gatherFiles(bookDir);
@@ -3004,7 +2980,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
int numFiles = fileList.size(); int numFiles = fileList.size();
int fileNo = 0; int fileNo = 0;
String prefix = storageDir.getAbsolutePath(); String prefix = bookDir.getParentFile().getAbsolutePath();
for (File f : fileList) { for (File f : fileList) {
fileNo++; fileNo++;
@@ -3035,7 +3011,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
// Now grab any used effects that aren't already part of the book folder // Now grab any used effects that aren't already part of the book folder
ArrayList<String> usedEffects = getBook().getUsedEffects(); ArrayList<String> usedEffects = book.getUsedEffects();
for (String ef : usedEffects) { for (String ef : usedEffects) {
File inBook = new File(bookDir, ef + ".eff"); File inBook = new File(bookDir, ef + ".eff");
if (!inBook.exists()) { if (!inBook.exists()) {
@@ -3075,21 +3051,20 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
} }
public void archiveBook() { public void archiveBook(Book book) {
Debug.trace(); Debug.trace();
if (getBook() == null) return;
int r = JOptionPane.showConfirmDialog(this, "This will stash the current book away\nin the archives folder in a compressed\nform. The existing book files will be deleted\nand the book closed.\n\nAre you sure you want to do this?", "Archive Book", JOptionPane.OK_CANCEL_OPTION); int r = JOptionPane.showConfirmDialog(this, "This will stash the current book away\nin the archives folder in a compressed\nform. The existing book files will be deleted\nand the book closed.\n\nAre you sure you want to do this?", "Archive Book", JOptionPane.OK_CANCEL_OPTION);
if (r == JOptionPane.OK_OPTION) { if (r == JOptionPane.OK_OPTION) {
ProgressDialog pd = new ProgressDialog("Archiving book..."); ProgressDialog pd = new ProgressDialog("Archiving book...");
saveBook(getBook()); saveBook(book);
ArchiveBookThread runnable = new ArchiveBookThread(pd); ArchiveBookThread runnable = new ArchiveBookThread(pd, book);
Thread t = new Thread(runnable); Thread t = new Thread(runnable);
t.start(); t.start();
pd.setVisible(true); pd.setVisible(true);
closeBook(getBook()); closeBook(book);
} }
} }
@@ -3197,9 +3172,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
} }
public void loadCoverArt() { public void loadCoverArt(Book book) {
Debug.trace(); Debug.trace();
if (getBook() == null) return;
JFileChooser jc = new JFileChooser(); JFileChooser jc = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "png", "jpg", "gif"); FileNameExtensionFilter filter = new FileNameExtensionFilter("Image Files", "png", "jpg", "gif");
@@ -3212,7 +3186,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
File src = jc.getSelectedFile(); File src = jc.getSelectedFile();
if (src.exists()) { if (src.exists()) {
File dest = null; File dest = null;
File bookFolder = new File(Options.get("path.storage"), getBook().getName()); File bookFolder = book.getLocation();
if (src.getName().endsWith(".png")) { if (src.getName().endsWith(".png")) {
dest = new File(bookFolder, "coverart.png"); dest = new File(bookFolder, "coverart.png");
} else if (src.getName().endsWith(".jpg")) { } else if (src.getName().endsWith(".jpg")) {
@@ -3235,8 +3209,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
ImageIcon i = new ImageIcon(dest.getAbsolutePath()); ImageIcon i = new ImageIcon(dest.getAbsolutePath());
Image ri = Utils.getScaledImage(i.getImage(), 22, 22); Image ri = Utils.getScaledImage(i.getImage(), 22, 22);
getBook().setIcon(new ImageIcon(ri)); book.setIcon(new ImageIcon(ri));
getBook().reloadTree(); book.reloadTree();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
@@ -3500,9 +3474,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
} }
public void loadManuscript() { public void loadManuscript(Book book) {
Debug.trace(); Debug.trace();
if (getBook() == null) return;
JFileChooser jc = new JFileChooser(); JFileChooser jc = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter("Document Files", "doc", "docx", "pdf", "odt"); FileNameExtensionFilter filter = new FileNameExtensionFilter("Document Files", "doc", "docx", "pdf", "odt");
@@ -3514,7 +3487,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
if (r == JFileChooser.APPROVE_OPTION) { if (r == JFileChooser.APPROVE_OPTION) {
File src = jc.getSelectedFile(); File src = jc.getSelectedFile();
if (src.exists()) { if (src.exists()) {
getBook().setManuscript(src); book.setManuscript(src);
} }
} }
} }
@@ -3594,8 +3567,8 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
// DocumentListener *// // DocumentListener *//
public boolean sentenceIdExists(String id) { public boolean sentenceIdExists(Book book, String id) {
for (Enumeration c = getBook().children(); c.hasMoreElements();) { for (Enumeration c = book.children(); c.hasMoreElements();) {
Chapter chp = (Chapter)c.nextElement(); Chapter chp = (Chapter)c.nextElement();
for (Enumeration s = chp.children(); s.hasMoreElements();) { for (Enumeration s = chp.children(); s.hasMoreElements();) {
Sentence snt = (Sentence)s.nextElement(); Sentence snt = (Sentence)s.nextElement();
@@ -3606,7 +3579,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
} }
public void findOrphans(Book book) { public void findOrphans(Book book) {
Chapter orphans = getChapterById("orphans"); Chapter orphans = book.getChapterById("orphans");
if (orphans == null) { if (orphans == null) {
orphans = new Chapter("orphans", "Orphan Files"); orphans = new Chapter("orphans", "Orphan Files");
orphans.setParentBook(book); orphans.setParentBook(book);
@@ -3622,7 +3595,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
if (filename.endsWith(".wav")) { if (filename.endsWith(".wav")) {
String id = filename.substring(0, filename.length() - 4); String id = filename.substring(0, filename.length() - 4);
Debug.d("Testing orphanicity of", id); Debug.d("Testing orphanicity of", id);
if (!sentenceIdExists(id)) { if (!sentenceIdExists(book, id)) {
Sentence newSentence = new Sentence(id, id); Sentence newSentence = new Sentence(id, id);
newSentence.setParentBook(book); newSentence.setParentBook(book);
orphans.add(newSentence); orphans.add(newSentence);
@@ -3639,14 +3612,6 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
}); });
} }
public Chapter getChapterById(String id) {
for (Enumeration c = getBook().children(); c.hasMoreElements();) {
Chapter chp = (Chapter)c.nextElement();
if (chp.getId().equals(id)) return chp;
}
return null;
}
public void queueJob(Runnable r) { public void queueJob(Runnable r) {
synchronized(processQueue) { synchronized(processQueue) {
processQueue.add(r); processQueue.add(r);

View File

@@ -45,27 +45,13 @@ public class DelayLine implements Effect {
for (int i = 0; i < subSamples[Sentence.LEFT].length; i++) { for (int i = 0; i < subSamples[Sentence.LEFT].length; i++) {
int off = i + d.getSamples(); int off = i + d.getSamples();
if ((off < samples[Sentence.LEFT].length) && (off > 0)) { if ((off < samples[Sentence.LEFT].length) && (off > 0)) {
samples[Sentence.LEFT][off] = mix(samples[Sentence.LEFT][off], subSamples[Sentence.LEFT][i]); samples[Sentence.LEFT][off] = Utils.mix(samples[Sentence.LEFT][off], subSamples[Sentence.LEFT][i]);
samples[Sentence.RIGHT][off] = mix(samples[Sentence.RIGHT][off], subSamples[Sentence.RIGHT][i]); samples[Sentence.RIGHT][off] = Utils.mix(samples[Sentence.RIGHT][off], subSamples[Sentence.RIGHT][i]);
} }
} }
} }
} }
double mix(double a, double b) {
double out;
if ((a < 0) && (b < 0)) {
out = (a + b) - (a * b);
} else if ((a > 0) && (b > 0)) {
out = (a + b) - (a * b);
} else {
out = a + b;
}
return out;
}
public DelayLineStore addDelayLine(int samples, double gain, double pan) { public DelayLineStore addDelayLine(int samples, double gain, double pan) {
DelayLineStore s = new DelayLineStore(samples, gain, pan); DelayLineStore s = new DelayLineStore(samples, gain, pan);
delayLines.add(s); delayLines.add(s);

View File

@@ -84,4 +84,28 @@ public class Utils {
String time = df.format(d); String time = df.format(d);
return time; return time;
} }
public static double[] stereoToMono(double[][] in) {
double[] out = new double[in[Sentence.LEFT].length];
for (int i = 0; i < in[Sentence.LEFT].length; i++) {
out[i] = mix(in[Sentence.LEFT][i], in[Sentence.RIGHT][i]);
}
return out;
}
public static double mix(double a, double b) {
double out;
if ((a < 0) && (b < 0)) {
out = (a + b) - (a * b);
} else if ((a > 0) && (b > 0)) {
out = (a + b) - (a * b);
} else {
out = a + b;
}
return out;
}
} }