From 38e7434730ec7d748b15ab8f5a4be32494a323dd Mon Sep 17 00:00:00 2001 From: Matt Jenkins Date: Sun, 30 Sep 2018 02:00:16 +0100 Subject: [PATCH] Added playback marker for single phrase play --- .../majenko/audiobookrecorder/AudiobookRecorder.java | 8 +++++++- src/uk/co/majenko/audiobookrecorder/Sentence.java | 10 +++++++++- src/uk/co/majenko/audiobookrecorder/Waveform.java | 11 +++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java index 77ae62b..980cd87 100644 --- a/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java +++ b/src/uk/co/majenko/audiobookrecorder/AudiobookRecorder.java @@ -65,7 +65,7 @@ public class AudiobookRecorder extends JFrame { Sentence selectedSentence = null; JPanel sampleControl; - Waveform sampleWaveform; + public Waveform sampleWaveform; JScrollBar sampleScroll; JSpinner postSentenceGap; @@ -388,9 +388,12 @@ public class AudiobookRecorder extends JFrame { controlsTop.add(locked); + controlsTop.add(Box.createHorizontalGlue()); controlsTop.add(new JLabel("Post gap:")); controlsTop.add(postSentenceGap); controlsTop.add(new JLabel("ms")); + controlsTop.add(Box.createHorizontalGlue()); + JButton zoomIn = new JButton(Icons.zoomIn); zoomIn.setToolTipText("Zoom In"); @@ -1654,6 +1657,9 @@ public class AudiobookRecorder extends JFrame { play = null; } playing = null; + if (selectedSentence != null) { + selectedSentence.stopPlaying(); + } } public void alertNoRoomNoise() { diff --git a/src/uk/co/majenko/audiobookrecorder/Sentence.java b/src/uk/co/majenko/audiobookrecorder/Sentence.java index 02f80ea..5eb4bb0 100644 --- a/src/uk/co/majenko/audiobookrecorder/Sentence.java +++ b/src/uk/co/majenko/audiobookrecorder/Sentence.java @@ -30,6 +30,7 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { boolean locked; boolean recording; + boolean playing; boolean inSample; @@ -555,10 +556,13 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { eq.skip(pos); - while (pos < crossEndOffset * frameSize) { + playing = true; + while ((pos < crossEndOffset * frameSize) && playing) { int nr = eq.read(buffer); pos += nr; + AudiobookRecorder.window.sampleWaveform.setPlayMarker(pos / frameSize); + play.write(buffer, 0, nr); }; play.drain(); @@ -568,6 +572,10 @@ public class Sentence extends DefaultMutableTreeNode implements Cacheable { } } + public void stopPlaying() { + playing = false; + } + public byte[] getRawAudioData() { File f = getFile(); try { diff --git a/src/uk/co/majenko/audiobookrecorder/Waveform.java b/src/uk/co/majenko/audiobookrecorder/Waveform.java index 8820cd2..91694c2 100644 --- a/src/uk/co/majenko/audiobookrecorder/Waveform.java +++ b/src/uk/co/majenko/audiobookrecorder/Waveform.java @@ -16,6 +16,8 @@ public class Waveform extends JPanel implements MouseListener, MouseMotionListen int leftMarkerSaved = 0; int rightMarkerSaved = 0; + int playMarker = 0; + int leftAltMarker = 0; int rightAltMarker = 0; @@ -126,6 +128,10 @@ public class Waveform extends JPanel implements MouseListener, MouseMotionListen g.drawLine((leftMarker - offset)/step, 0, (leftMarker - offset)/step, h); g.drawLine((rightMarker - offset)/step, 0, (rightMarker - offset)/step, h); + g.setColor(new Color(0, 255, 255)); + for (int i = 0; i < h; i += 2) { + g.drawLine((playMarker - offset) / step, i, (playMarker - offset) / step, i); + } } } @@ -168,6 +174,7 @@ public class Waveform extends JPanel implements MouseListener, MouseMotionListen public void setData(int[] s) { samples = s; + playMarker = 0; repaint(); } @@ -271,4 +278,8 @@ public class Waveform extends JPanel implements MouseListener, MouseMotionListen repaint(); } + public void setPlayMarker(int m) { + playMarker = m; + repaint(); + } }