From e5bc16a6a402407ba6c9b61059fadc141bab54f7 Mon Sep 17 00:00:00 2001 From: Andrew Lalis Date: Mon, 9 Nov 2020 13:55:54 +0100 Subject: [PATCH] Added finish sound and countdown in title. --- .../control/export/BookExporter.java | 9 ++++++++- src/main/resources/application.properties | 1 + src/main/resources/sound/LOZFDS_Fanfare.wav | Bin 0 -> 49144 bytes 3 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/sound/LOZFDS_Fanfare.wav diff --git a/src/main/java/nl/andrewlalis/blockbookbinder/control/export/BookExporter.java b/src/main/java/nl/andrewlalis/blockbookbinder/control/export/BookExporter.java index c6c859d..563b85a 100644 --- a/src/main/java/nl/andrewlalis/blockbookbinder/control/export/BookExporter.java +++ b/src/main/java/nl/andrewlalis/blockbookbinder/control/export/BookExporter.java @@ -15,6 +15,7 @@ import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; +import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.util.logging.Level; @@ -48,6 +49,7 @@ public class BookExporter implements Runnable { // Some sound clips to play as user feedback. private final Clip beepClip; private final Clip beginningExportClip; + private final Clip finishClip; public BookExporter(ExportToBookDialog dialog, ExportStatusPanel exportStatusPanel, Book book, boolean autoPaste, int autoPasteDelay) { this.dialog = dialog; @@ -57,6 +59,7 @@ public class BookExporter implements Runnable { this.autoPasteDelay = autoPasteDelay; this.beepClip = this.loadAudioClip(ApplicationProperties.getProp("export_dialog.beep_sound")); this.beginningExportClip = this.loadAudioClip(ApplicationProperties.getProp("export_dialog.beginning_export")); + this.finishClip = this.loadAudioClip(ApplicationProperties.getProp("export_dialog.finish_sound")); this.clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); this.pagePasteListener = new PagePasteListener(this); if (this.autoPaste) { // Only initialize the robot if we'll need it. @@ -83,6 +86,8 @@ public class BookExporter implements Runnable { if (inStartPhase && currentTime - lastAudioPlayedAt > 1000) { this.playAudioClip(this.beepClip); lastAudioPlayedAt = currentTime; + int secondsLeft = (START_DELAY) - (int) (currentTime - startTime) / 1000; + this.updateStatusLabel("Starting in " + secondsLeft + " seconds."); } // Otherwise, export one page. if (!inStartPhase && this.nextPageRequested) { @@ -90,6 +95,7 @@ public class BookExporter implements Runnable { // If this is the first time we're exporting, play a sound. if (lastPageExportedAt == 0) { this.initStatusPanel(); + this.updateStatusLabel("Exporting."); this.initNativeListener(); this.playAudioClip(this.beginningExportClip); } @@ -103,6 +109,7 @@ public class BookExporter implements Runnable { this.updateStatusProgressBar(nextPageToExport); // If we've reached the end of the book, stop the exporter. if (nextPageToExport >= this.book.getPageCount()) { + this.playAudioClip(this.finishClip); this.addStatusMessage("Export finished: " + this.book.getPageCount() + " pages exported."); if (!this.autoPaste) { this.stopNativeListener(); @@ -215,7 +222,7 @@ public class BookExporter implements Runnable { if (fileInputStream == null) { return null; } - AudioInputStream ais = AudioSystem.getAudioInputStream(fileInputStream); + AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(fileInputStream)); clip.open(ais); return clip; } catch (LineUnavailableException | IOException | UnsupportedAudioFileException e) { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 31ed87a..7264766 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,6 +7,7 @@ export_dialog.min_width=400 export_dialog.min_height=300 export_dialog.beep_sound=sound/andrew_beep.wav export_dialog.beginning_export=sound/beginning_export.wav +export_dialog.finish_sound=sound/LOZFDS_Fanfare.wav about_dialog.min_width=600 about_dialog.min_height=800 diff --git a/src/main/resources/sound/LOZFDS_Fanfare.wav b/src/main/resources/sound/LOZFDS_Fanfare.wav new file mode 100644 index 0000000000000000000000000000000000000000..54647d480c75d4975d4fad8fb38ce111ff611cb5 GIT binary patch literal 49144 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 bPtD@bA3q8FB=D2KPXa#){3P)IDuMq6@hkO1 literal 0 HcmV?d00001