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());
|
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);
|
Thread nt = new Thread(t);
|
||||||
nt.start();
|
nt.start();
|
||||||
ed.setVisible(true);
|
ed.setVisible(true);
|
||||||
@@ -1660,7 +1660,22 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
|||||||
|
|
||||||
ProgressDialog ed = new ProgressDialog("Exporting " + chap.getName());
|
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);
|
Thread nt = new Thread(t);
|
||||||
nt.start();
|
nt.start();
|
||||||
ed.setVisible(true);
|
ed.setVisible(true);
|
||||||
@@ -1772,6 +1787,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
|||||||
menu.add(exportChapter);
|
menu.add(exportChapter);
|
||||||
exportChapter.add(exportChapterACX);
|
exportChapter.add(exportChapterACX);
|
||||||
exportChapter.add(exportChapterABU);
|
exportChapter.add(exportChapterABU);
|
||||||
|
exportChapter.add(exportChapterLibri);
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
menu.add(deleteChapter);
|
menu.add(deleteChapter);
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
@@ -1833,7 +1849,7 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
|||||||
Debug.trace();
|
Debug.trace();
|
||||||
JMenuObject src = (JMenuObject)(e.getSource());
|
JMenuObject src = (JMenuObject)(e.getSource());
|
||||||
Book thisBook = (Book)(src.getObject());
|
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();
|
Debug.trace();
|
||||||
JMenuObject src = (JMenuObject)(e.getSource());
|
JMenuObject src = (JMenuObject)(e.getSource());
|
||||||
Book thisBook = (Book)(src.getObject());
|
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());
|
sampleWaveform.setPlayMarker(pos / format.getFrameSize());
|
||||||
int l = data.length - pos;
|
int l = data.length - pos;
|
||||||
if (l > blockSize) l = blockSize;
|
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.drain();
|
||||||
play.stop();
|
play.stop();
|
||||||
play.close();
|
play.close();
|
||||||
play = null;
|
play = null;
|
||||||
|
System.out.println("Closed");
|
||||||
playing = null;
|
playing = null;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@@ -2718,8 +2745,10 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
|||||||
public void stopPlaying() {
|
public void stopPlaying() {
|
||||||
Debug.trace();
|
Debug.trace();
|
||||||
if (play != null) {
|
if (play != null) {
|
||||||
|
System.out.println("Forcing close");
|
||||||
play.close();
|
play.close();
|
||||||
play = null;
|
play = null;
|
||||||
|
System.out.println("Closed!!!");
|
||||||
}
|
}
|
||||||
playing = null;
|
playing = null;
|
||||||
}
|
}
|
||||||
@@ -3623,8 +3652,9 @@ public class AudiobookRecorder extends JFrame implements DocumentListener {
|
|||||||
|
|
||||||
i = defEff.getSelectedIndex();
|
i = defEff.getSelectedIndex();
|
||||||
KVPair<String, String> de = defEff.getItemAt(i);
|
KVPair<String, String> de = defEff.getItemAt(i);
|
||||||
book.setDefaultEffect(de.getKey());
|
if (de != null) {
|
||||||
|
book.setDefaultEffect(de.getKey());
|
||||||
|
}
|
||||||
book.setTitle(tit);
|
book.setTitle(tit);
|
||||||
book.setAuthor(aut);
|
book.setAuthor(aut);
|
||||||
book.setGenre(gen);
|
book.setGenre(gen);
|
||||||
|
|||||||
@@ -592,7 +592,7 @@ public class Book extends BookTreeNode {
|
|||||||
Debug.trace();
|
Debug.trace();
|
||||||
roomNoise.stopRecording();
|
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.FileNotFoundException;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Enumeration;
|
import java.util.Enumeration;
|
||||||
import javax.swing.tree.DefaultTreeModel;
|
import javax.swing.tree.DefaultTreeModel;
|
||||||
import javax.swing.tree.DefaultMutableTreeNode;
|
import javax.swing.tree.DefaultMutableTreeNode;
|
||||||
@@ -190,77 +192,25 @@ public class Chapter extends BookTreeNode {
|
|||||||
|
|
||||||
Book book = getBook();
|
Book book = getBook();
|
||||||
|
|
||||||
for (char c : chars) {
|
HashMap<String, String> tokens = new HashMap<String, String>();
|
||||||
switch (mode) {
|
|
||||||
case 0:
|
|
||||||
switch (c) {
|
|
||||||
case '%': {
|
|
||||||
mode = 1;
|
|
||||||
len = 0;
|
|
||||||
zeros = false;
|
|
||||||
first = true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default: out += c; break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 1:
|
tokens.put("chapter.name", name);
|
||||||
switch (c) {
|
tokens.put("chapter.number", Integer.toString(getSequenceNumber()));
|
||||||
case '0': len = len * 10; first = false; break;
|
tokens.put("chapter.id", getId());
|
||||||
case '1': len = len * 10 + 1; first = false; break;
|
tokens.put("book.title", book.getTitle());
|
||||||
case '2': len = len * 10 + 2; first = false; break;
|
tokens.put("book.author", book.getAuthor());
|
||||||
case '3': len = len * 10 + 3; first = false; break;
|
tokens.put("book.isbn", book.getISBN());
|
||||||
case '4': len = len * 10 + 4; first = false; break;
|
tokens.put("book.acx", book.getACX());
|
||||||
case '5': len = len * 10 + 5; first = false; break;
|
tokens.put("narrator.name", Options.get("narrator.name"));
|
||||||
case '6': len = len * 10 + 6; first = false; break;
|
tokens.put("narrator.initials", Options.get("narrator.initials"));
|
||||||
case '7': len = len * 10 + 7; first = false; break;
|
tokens.put("file.bitrate", Integer.toString(Options.getInteger("audio.export.bitrate")));
|
||||||
case '8': len = len * 10 + 8; first = false; break;
|
tokens.put("file.bitrate.kb", Integer.toString(Options.getInteger("audio.export.bitrate") / 1000));
|
||||||
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;
|
|
||||||
|
|
||||||
case '%':
|
for(Map.Entry<String, String> entry : tokens.entrySet()) {
|
||||||
out += '%';
|
format = format.replace("{" + entry.getKey() + ":lower}", entry.getValue().toLowerCase());
|
||||||
mode = 0;
|
format = format.replace("{" + entry.getKey() + "}", entry.getValue());
|
||||||
break;
|
}
|
||||||
case 'I':
|
return format;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
|
|||||||
@@ -85,6 +85,9 @@ public class Options extends JDialog {
|
|||||||
|
|
||||||
ArrayList<JTextField[]> processorList;
|
ArrayList<JTextField[]> processorList;
|
||||||
|
|
||||||
|
JTextField narratorName;
|
||||||
|
JTextField narratorInitials;
|
||||||
|
|
||||||
static HashMap<String, String> defaultPrefs;
|
static HashMap<String, String> defaultPrefs;
|
||||||
static Preferences prefs = null;
|
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");
|
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");
|
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");
|
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);
|
addSeparator(optionsPanel);
|
||||||
@@ -736,6 +744,8 @@ public class Options extends JDialog {
|
|||||||
if (bitRate.getSelectedItem() != null) set("audio.export.bitrate", ((KVPair)bitRate.getSelectedItem()).key);
|
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 (channels.getSelectedItem() != null) set("audio.export.channels", ((KVPair)channels.getSelectedItem()).key);
|
||||||
if (exportRate.getSelectedItem() != null) set("audio.export.samplerate", ((KVPair)exportRate.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.sphinx", enableParsing.isSelected());
|
||||||
set("process.command", speechCommand.getText());
|
set("process.command", speechCommand.getText());
|
||||||
set("process.threads", workerThreads.getValue());
|
set("process.threads", workerThreads.getValue());
|
||||||
|
|||||||
Reference in New Issue
Block a user