Improved filename tokens and added LibriVox export option
This commit is contained in:
@@ -1645,7 +1645,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
|
||||
ProgressDialog ed = new ProgressDialog("Exporting " + chap.getName());
|
||||
|
||||
ExportThread t = new ExportThread(chap, ed, "%t - %02n");
|
||||
ExportThread t = new ExportThread(chap, ed, "{book.title} - {chapter.number}");
|
||||
Thread nt = new Thread(t);
|
||||
nt.start();
|
||||
ed.setVisible(true);
|
||||
@@ -1660,7 +1660,22 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
|
||||
ProgressDialog ed = new ProgressDialog("Exporting " + chap.getName());
|
||||
|
||||
ExportThread t = new ExportThread(chap, ed, "%I_%03i");
|
||||
ExportThread t = new ExportThread(chap, ed, "{book.isbn}_{chapter.number}");
|
||||
Thread nt = new Thread(t);
|
||||
nt.start();
|
||||
ed.setVisible(true);
|
||||
}
|
||||
});
|
||||
|
||||
JMenuObject exportChapterLibri = new JMenuObject("For LibriVox.org", c, new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Debug.trace();
|
||||
JMenuObject o = (JMenuObject)e.getSource();
|
||||
Chapter chap = (Chapter)o.getObject();
|
||||
|
||||
ProgressDialog ed = new ProgressDialog("Exporting " + chap.getName());
|
||||
|
||||
ExportThread t = new ExportThread(chap, ed, "{chapter.name:lower}_{book.author:lower}_{narrator.initials:lower}_{file.bitrate.kb}kb");
|
||||
Thread nt = new Thread(t);
|
||||
nt.start();
|
||||
ed.setVisible(true);
|
||||
@@ -1772,6 +1787,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
menu.add(exportChapter);
|
||||
exportChapter.add(exportChapterACX);
|
||||
exportChapter.add(exportChapterABU);
|
||||
exportChapter.add(exportChapterLibri);
|
||||
menu.addSeparator();
|
||||
menu.add(deleteChapter);
|
||||
menu.addSeparator();
|
||||
@@ -1833,7 +1849,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
Debug.trace();
|
||||
JMenuObject src = (JMenuObject)(e.getSource());
|
||||
Book thisBook = (Book)(src.getObject());
|
||||
exportAudio(thisBook, "%t - %n");
|
||||
exportAudio(thisBook, "{book.title} - {chapter.number}");
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -1842,7 +1858,16 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
Debug.trace();
|
||||
JMenuObject src = (JMenuObject)(e.getSource());
|
||||
Book thisBook = (Book)(src.getObject());
|
||||
exportAudio(thisBook, "%I_%03i");
|
||||
exportAudio(thisBook, "{book.isbn}_{chapter.number}");
|
||||
}
|
||||
}));
|
||||
|
||||
exportAll.add(new JMenuObject("For LibriVox.org", book, new ActionListener() {
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
Debug.trace();
|
||||
JMenuObject src = (JMenuObject)(e.getSource());
|
||||
Book thisBook = (Book)(src.getObject());
|
||||
exportAudio(thisBook, "{chapter.name:lower}_{book.author:lower}_{narrator.initials:lower}_{file.bitrate.kb}kb");
|
||||
}
|
||||
}));
|
||||
|
||||
@@ -2462,13 +2487,15 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
sampleWaveform.setPlayMarker(pos / format.getFrameSize());
|
||||
int l = data.length - pos;
|
||||
if (l > blockSize) l = blockSize;
|
||||
play.write(data, pos, l);
|
||||
System.out.println(play.write(data, pos, l));
|
||||
}
|
||||
|
||||
System.out.println("Closing...");
|
||||
play.drain();
|
||||
play.stop();
|
||||
play.close();
|
||||
play = null;
|
||||
System.out.println("Closed");
|
||||
playing = null;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
@@ -2718,8 +2745,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
public void stopPlaying() {
|
||||
Debug.trace();
|
||||
if (play != null) {
|
||||
System.out.println("Forcing close");
|
||||
play.close();
|
||||
play = null;
|
||||
System.out.println("Closed!!!");
|
||||
}
|
||||
playing = null;
|
||||
}
|
||||
@@ -3623,8 +3652,9 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
||||
|
||||
i = defEff.getSelectedIndex();
|
||||
KVPair<String, String> de = defEff.getItemAt(i);
|
||||
book.setDefaultEffect(de.getKey());
|
||||
|
||||
if (de != null) {
|
||||
book.setDefaultEffect(de.getKey());
|
||||
}
|
||||
book.setTitle(tit);
|
||||
book.setAuthor(aut);
|
||||
book.setGenre(gen);
|
||||
|
||||
@@ -592,7 +592,7 @@ public class Book extends BookTreeNode {
|
||||
Debug.trace();
|
||||
roomNoise.stopRecording();
|
||||
}
|
||||
}, 5000); // 5 seconds of recording
|
||||
}, 10000); // 10 seconds of recording
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ import java.io.FileOutputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Enumeration;
|
||||
import javax.swing.tree.DefaultTreeModel;
|
||||
import javax.swing.tree.DefaultMutableTreeNode;
|
||||
@@ -190,77 +192,25 @@ public class Chapter extends BookTreeNode {
|
||||
|
||||
Book book = getBook();
|
||||
|
||||
for (char c : chars) {
|
||||
switch (mode) {
|
||||
case 0:
|
||||
switch (c) {
|
||||
case '%': {
|
||||
mode = 1;
|
||||
len = 0;
|
||||
zeros = false;
|
||||
first = true;
|
||||
}
|
||||
break;
|
||||
default: out += c; break;
|
||||
}
|
||||
break;
|
||||
HashMap<String, String> tokens = new HashMap<String, String>();
|
||||
|
||||
case 1:
|
||||
switch (c) {
|
||||
case '0': len = len * 10; first = false; break;
|
||||
case '1': len = len * 10 + 1; first = false; break;
|
||||
case '2': len = len * 10 + 2; first = false; break;
|
||||
case '3': len = len * 10 + 3; first = false; break;
|
||||
case '4': len = len * 10 + 4; first = false; break;
|
||||
case '5': len = len * 10 + 5; first = false; break;
|
||||
case '6': len = len * 10 + 6; first = false; break;
|
||||
case '7': len = len * 10 + 7; first = false; break;
|
||||
case '8': len = len * 10 + 8; first = false; break;
|
||||
case '9': len = len * 10 + 9; first = false; break;
|
||||
case 't':
|
||||
if (len > 0)
|
||||
out += String.format("%" + len + "s", book.getTitle());
|
||||
else
|
||||
out += book.getTitle();
|
||||
mode = 0;
|
||||
break;
|
||||
case 'n':
|
||||
if (len > 0)
|
||||
out += String.format("%" + len + "s", name);
|
||||
else
|
||||
out += name;
|
||||
mode = 0;
|
||||
break;
|
||||
tokens.put("chapter.name", name);
|
||||
tokens.put("chapter.number", Integer.toString(getSequenceNumber()));
|
||||
tokens.put("chapter.id", getId());
|
||||
tokens.put("book.title", book.getTitle());
|
||||
tokens.put("book.author", book.getAuthor());
|
||||
tokens.put("book.isbn", book.getISBN());
|
||||
tokens.put("book.acx", book.getACX());
|
||||
tokens.put("narrator.name", Options.get("narrator.name"));
|
||||
tokens.put("narrator.initials", Options.get("narrator.initials"));
|
||||
tokens.put("file.bitrate", Integer.toString(Options.getInteger("audio.export.bitrate")));
|
||||
tokens.put("file.bitrate.kb", Integer.toString(Options.getInteger("audio.export.bitrate") / 1000));
|
||||
|
||||
case '%':
|
||||
out += '%';
|
||||
mode = 0;
|
||||
break;
|
||||
case 'I':
|
||||
if (len > 0)
|
||||
out += String.format("%" + len + "s", book.getISBN());
|
||||
else
|
||||
out += book.getISBN();
|
||||
mode = 0;
|
||||
break;
|
||||
case 'A':
|
||||
if (len > 0)
|
||||
out += String.format("%" + len + "s", book.getACX());
|
||||
else
|
||||
out += book.getACX();
|
||||
mode = 0;
|
||||
break;
|
||||
case 'i':
|
||||
if (len > 0)
|
||||
out += String.format("%0" + len + "d", getSequenceNumber());
|
||||
else
|
||||
out += getId();
|
||||
mode = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return out;
|
||||
for(Map.Entry<String, String> entry : tokens.entrySet()) {
|
||||
format = format.replace("{" + entry.getKey() + ":lower}", entry.getValue().toLowerCase());
|
||||
format = format.replace("{" + entry.getKey() + "}", entry.getValue());
|
||||
}
|
||||
return format;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
||||
@@ -85,6 +85,9 @@ public class Options extends JDialog {
|
||||
|
||||
ArrayList<JTextField[]> processorList;
|
||||
|
||||
JTextField narratorName;
|
||||
JTextField narratorInitials;
|
||||
|
||||
static HashMap<String, String> defaultPrefs;
|
||||
static Preferences prefs = null;
|
||||
|
||||
@@ -387,6 +390,11 @@ public class Options extends JDialog {
|
||||
bitRate = addDropdown(optionsPanel, "Export bitrate:", getBitrates(), get("audio.export.bitrate"), "The MP3 bitrate to produce");
|
||||
channels = addDropdown(optionsPanel, "Export channels:", getChannelCountList(), get("audio.export.channels"), "Mono or stereo MP3 production");
|
||||
exportRate = addDropdown(optionsPanel, "Export sample rate:", getSampleRateList(), get("audio.export.samplerate"), "Sample frequency of the produced MP3");
|
||||
|
||||
addSeparator(optionsPanel);
|
||||
|
||||
narratorName = addTextField(optionsPanel, "Narrator Name:", get("narrator.name"), "The name of the narrator for use in the exported file tags");
|
||||
narratorInitials = addTextField(optionsPanel, "Narrator Initials:", get("narrator.initials"), "The initials of the narrator");
|
||||
|
||||
|
||||
addSeparator(optionsPanel);
|
||||
@@ -736,6 +744,8 @@ public class Options extends JDialog {
|
||||
if (bitRate.getSelectedItem() != null) set("audio.export.bitrate", ((KVPair)bitRate.getSelectedItem()).key);
|
||||
if (channels.getSelectedItem() != null) set("audio.export.channels", ((KVPair)channels.getSelectedItem()).key);
|
||||
if (exportRate.getSelectedItem() != null) set("audio.export.samplerate", ((KVPair)exportRate.getSelectedItem()).key);
|
||||
set("narrator.name", narratorName.getText());
|
||||
set("narrator.initials", narratorInitials.getText());
|
||||
set("process.sphinx", enableParsing.isSelected());
|
||||
set("process.command", speechCommand.getText());
|
||||
set("process.threads", workerThreads.getValue());
|
||||
|
||||
Reference in New Issue
Block a user