Added new paragraph recording keymap
This commit is contained in:
@@ -24,6 +24,7 @@ From here on much is controlled by key presses.
|
|||||||
|
|
||||||
* Press and hold "R" to record a new phrase - the screen flashes red while it's recording. The phrase is
|
* Press and hold "R" to record a new phrase - the screen flashes red while it's recording. The phrase is
|
||||||
appended to the currently selected chapter, or to the last chapter if none is selected.
|
appended to the currently selected chapter, or to the last chapter if none is selected.
|
||||||
|
* Press and hold "T" to record a new phrase that is the start of a new paragraph. This adds the "post paragraph" gap to the previous sentence. Otherwise it does the same as "R".
|
||||||
* Press "D" to delete the last phrase you recorded.
|
* Press "D" to delete the last phrase you recorded.
|
||||||
* Press "E" to re-record the currently selected phrase.
|
* Press "E" to re-record the currently selected phrase.
|
||||||
|
|
||||||
|
|||||||
BIN
resources/uk/co/majenko/audiobookrecorder/icons/appIcon.png
Normal file
BIN
resources/uk/co/majenko/audiobookrecorder/icons/appIcon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
@@ -464,6 +464,9 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("R"), "startRecord");
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("R"), "startRecord");
|
||||||
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released R"), "stopRecord");
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released R"), "stopRecord");
|
||||||
|
|
||||||
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("T"), "startRecordNewPara");
|
||||||
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released T"), "stopRecord");
|
||||||
|
|
||||||
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released D"), "deleteLast");
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("released D"), "deleteLast");
|
||||||
|
|
||||||
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("SPACE"), "startPlayback");
|
centralPanel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("SPACE"), "startPlayback");
|
||||||
@@ -477,6 +480,12 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
startRecording();
|
startRecording();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
centralPanel.getActionMap().put("startRecordNewPara", new AbstractAction() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
if (bookTree.isEditing()) return;
|
||||||
|
startRecordingNewParagraph();
|
||||||
|
}
|
||||||
|
});
|
||||||
centralPanel.getActionMap().put("startRerecord", new AbstractAction() {
|
centralPanel.getActionMap().put("startRerecord", new AbstractAction() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
if (bookTree.isEditing()) return;
|
if (bookTree.isEditing()) return;
|
||||||
@@ -699,6 +708,53 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startRecordingNewParagraph() {
|
||||||
|
|
||||||
|
if (recording != null) return;
|
||||||
|
if (book == null) return;
|
||||||
|
|
||||||
|
toolBar.disableBook();
|
||||||
|
toolBar.disableSentence();
|
||||||
|
|
||||||
|
DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode)bookTree.getLastSelectedPathComponent();
|
||||||
|
|
||||||
|
if (selectedNode == null) {
|
||||||
|
selectedNode = book.getLastChapter();
|
||||||
|
bookTree.setSelectionPath(new TreePath(selectedNode.getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedNode instanceof Book) {
|
||||||
|
selectedNode = book.getLastChapter();
|
||||||
|
bookTree.setSelectionPath(new TreePath(selectedNode.getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectedNode instanceof Sentence) {
|
||||||
|
selectedNode = (DefaultMutableTreeNode)selectedNode.getParent();
|
||||||
|
bookTree.setSelectionPath(new TreePath(selectedNode.getPath()));
|
||||||
|
}
|
||||||
|
|
||||||
|
Chapter c = (Chapter)selectedNode;
|
||||||
|
|
||||||
|
DefaultMutableTreeNode lastLeaf = c.getLastLeaf();
|
||||||
|
|
||||||
|
if (lastLeaf instanceof Sentence) {
|
||||||
|
Sentence lastSentence = (Sentence)lastLeaf;
|
||||||
|
lastSentence.setPostGap(Options.getInteger("catenation.post-paragraph"));
|
||||||
|
}
|
||||||
|
|
||||||
|
Sentence s = new Sentence();
|
||||||
|
bookTreeModel.insertNodeInto(s, c, c.getChildCount());
|
||||||
|
|
||||||
|
bookTree.expandPath(new TreePath(c.getPath()));
|
||||||
|
bookTree.setSelectionPath(new TreePath(s.getPath()));
|
||||||
|
bookTree.scrollPathToVisible(new TreePath(s.getPath()));
|
||||||
|
|
||||||
|
if (s.startRecording()) {
|
||||||
|
recording = s;
|
||||||
|
centralPanel.setFlash(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void startRecording() {
|
public void startRecording() {
|
||||||
|
|
||||||
if (recording != null) return;
|
if (recording != null) return;
|
||||||
@@ -1248,6 +1304,7 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
|
|
||||||
tags.setTrack(Integer.toString(s2i(c.getId()) - 0));
|
tags.setTrack(Integer.toString(s2i(c.getId()) - 0));
|
||||||
tags.setTitle(c.getName());
|
tags.setTitle(c.getName());
|
||||||
|
tags.setAlbum(book.getName());
|
||||||
tags.setArtist(book.getAuthor());
|
tags.setArtist(book.getAuthor());
|
||||||
|
|
||||||
// ID3v2TextFrameData g = new ID3v2TextFrameData(false, new EncodedText(book.getGenre()));
|
// ID3v2TextFrameData g = new ID3v2TextFrameData(false, new EncodedText(book.getGenre()));
|
||||||
@@ -1325,7 +1382,6 @@ public class AudiobookRecorder extends JFrame {
|
|||||||
bookTree.setSelectionPath(new TreePath(s.getPath()));
|
bookTree.setSelectionPath(new TreePath(s.getPath()));
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
|
||||||
playing = null;
|
playing = null;
|
||||||
}
|
}
|
||||||
toolBar.enableSentence();
|
toolBar.enableSentence();
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ public class Options extends JDialog {
|
|||||||
JSpinner preChapterGap;
|
JSpinner preChapterGap;
|
||||||
JSpinner postChapterGap;
|
JSpinner postChapterGap;
|
||||||
JSpinner postSentenceGap;
|
JSpinner postSentenceGap;
|
||||||
|
JSpinner postParagraphGap;
|
||||||
JTextField ffmpegLocation;
|
JTextField ffmpegLocation;
|
||||||
JComboBox<KVPair> bitRate;
|
JComboBox<KVPair> bitRate;
|
||||||
JComboBox<KVPair> exportRate;
|
JComboBox<KVPair> exportRate;
|
||||||
@@ -190,6 +191,7 @@ public class Options extends JDialog {
|
|||||||
preChapterGap = addSpinner("Default pre-chapter gap:", 0, 5000, 100, getInteger("catenation.pre-chapter"), "ms");
|
preChapterGap = addSpinner("Default pre-chapter gap:", 0, 5000, 100, getInteger("catenation.pre-chapter"), "ms");
|
||||||
postChapterGap = addSpinner("Default post-chapter gap:", 0, 5000, 100, getInteger("catenation.post-chapter"), "ms");
|
postChapterGap = addSpinner("Default post-chapter gap:", 0, 5000, 100, getInteger("catenation.post-chapter"), "ms");
|
||||||
postSentenceGap = addSpinner("Default post-sentence gap:", 0, 5000, 100, getInteger("catenation.post-sentence"), "ms");
|
postSentenceGap = addSpinner("Default post-sentence gap:", 0, 5000, 100, getInteger("catenation.post-sentence"), "ms");
|
||||||
|
postParagraphGap = addSpinner("Default post-paragraph gap:", 0, 5000, 100, getInteger("catenation.post-paragraph"), "ms");
|
||||||
|
|
||||||
addSeparator();
|
addSeparator();
|
||||||
|
|
||||||
@@ -361,6 +363,7 @@ public class Options extends JDialog {
|
|||||||
defaultPrefs.put("catenation.pre-chapter", "2000");
|
defaultPrefs.put("catenation.pre-chapter", "2000");
|
||||||
defaultPrefs.put("catenation.post-chapter", "2000");
|
defaultPrefs.put("catenation.post-chapter", "2000");
|
||||||
defaultPrefs.put("catenation.post-sentence", "1000");
|
defaultPrefs.put("catenation.post-sentence", "1000");
|
||||||
|
defaultPrefs.put("catenation.post-paragraph", "2000");
|
||||||
|
|
||||||
defaultPrefs.put("path.storage", (new File(System.getProperty("user.home"), "Recordings")).toString());
|
defaultPrefs.put("path.storage", (new File(System.getProperty("user.home"), "Recordings")).toString());
|
||||||
defaultPrefs.put("path.ffmpeg", "");
|
defaultPrefs.put("path.ffmpeg", "");
|
||||||
@@ -426,6 +429,7 @@ public class Options extends JDialog {
|
|||||||
set("catenation.pre-chapter", "" + preChapterGap.getValue());
|
set("catenation.pre-chapter", "" + preChapterGap.getValue());
|
||||||
set("catenation.post-chapter", "" + postChapterGap.getValue());
|
set("catenation.post-chapter", "" + postChapterGap.getValue());
|
||||||
set("catenation.post-sentence", "" + postSentenceGap.getValue());
|
set("catenation.post-sentence", "" + postSentenceGap.getValue());
|
||||||
|
set("catenation.post-paragraph", "" + postParagraphGap.getValue());
|
||||||
set("audio.export.bitrate", ((KVPair)bitRate.getSelectedItem()).key);
|
set("audio.export.bitrate", ((KVPair)bitRate.getSelectedItem()).key);
|
||||||
set("audio.export.samplerate", ((KVPair)exportRate.getSelectedItem()).key);
|
set("audio.export.samplerate", ((KVPair)exportRate.getSelectedItem()).key);
|
||||||
set("process.sphinx", enableParsing.isSelected() ? "true" : "false");
|
set("process.sphinx", enableParsing.isSelected() ? "true" : "false");
|
||||||
|
|||||||
@@ -222,6 +222,8 @@ public class Sentence extends DefaultMutableTreeNode {
|
|||||||
startOffset = 0;
|
startOffset = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
startOffset -= 4096;
|
||||||
|
|
||||||
for (int i = samples.length-1; i >= 0; i--) {
|
for (int i = samples.length-1; i >= 0; i--) {
|
||||||
endOffset = i;
|
endOffset = i;
|
||||||
if (Math.abs(samples[i]) > noiseFloor) {
|
if (Math.abs(samples[i]) > noiseFloor) {
|
||||||
@@ -230,10 +232,16 @@ public class Sentence extends DefaultMutableTreeNode {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
endOffset += 4096;
|
||||||
|
|
||||||
if (endOffset <= startOffset) endOffset = startOffset + 4096;
|
if (endOffset <= startOffset) endOffset = startOffset + 4096;
|
||||||
if (endOffset <= 0) {
|
if (endOffset <= 0) {
|
||||||
endOffset = samples.length-1;
|
endOffset = samples.length-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (startOffset < 0) startOffset = 0;
|
||||||
|
if (endOffset >= samples.length) endOffset = samples.length-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
|
|||||||
Reference in New Issue
Block a user