Improved filename tokens and added LibriVox export option

This commit is contained in:
2024-04-06 14:13:42 +01:00
parent 091a62be2f
commit 81d436dcf5
4 changed files with 67 additions and 77 deletions

View File

@@ -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);

View File

@@ -592,7 +592,7 @@ public class Book extends BookTreeNode {
Debug.trace();
roomNoise.stopRecording();
}
}, 5000); // 5 seconds of recording
}, 10000); // 10 seconds of recording
}
}

View File

@@ -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")

View File

@@ -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());