From 8643d09bc93b6ffe280a2ccee63df4e56f6b8455 Mon Sep 17 00:00:00 2001 From: Weronika Pecio Date: Thu, 24 Oct 2024 21:50:46 +0200 Subject: [PATCH] Use mp3spi library for mp3 file handling --- README.md | 3 +- .../soundlibs/jlayer/1.0.1/jlayer-1.0.1.jar | Bin 106702 -> 0 bytes pom.xml | 92 +++++++++++------- .../nianna/karedi/audio/AudioFileLoader.java | 6 +- .../github/nianna/karedi/audio/Mp3File.java | 69 ------------- .../nianna/karedi/audio/Mp3FilePlayTask.java | 53 ---------- .../audio/PreloadedAudioFilePlayer.java | 3 - .../nianna/karedi/audio/SamplesPerFrame.java | 55 ----------- .../karedi/audio/SourceDataLineAudioFile.java | 13 ++- src/main/java/module-info.java | 3 +- src/main/resources/messages.properties | 3 - src/main/resources/messages_en_GB.properties | 3 - src/main/resources/messages_pl_PL.properties | 3 - 13 files changed, 74 insertions(+), 232 deletions(-) delete mode 100644 lib/com/googlecode/soundlibs/jlayer/1.0.1/jlayer-1.0.1.jar delete mode 100644 src/main/java/com/github/nianna/karedi/audio/Mp3File.java delete mode 100644 src/main/java/com/github/nianna/karedi/audio/Mp3FilePlayTask.java delete mode 100644 src/main/java/com/github/nianna/karedi/audio/SamplesPerFrame.java diff --git a/README.md b/README.md index 377fd7e..17b23a3 100644 --- a/README.md +++ b/README.md @@ -52,11 +52,10 @@ You can found the newest version in the [Releases](https://github.com/Nianna/Kar Karedi uses the following libraries: * [JavaFX](https://github.com/openjdk/jfx) with [ControlsFX](https://github.com/controlsfx/controlsfx) & [RichTextFx](https://github.com/TomasMikula/RichTextFX) for GUI, -* [mp3agic](https://github.com/mpatric/mp3agic) for reading mp3 info, -* [jLayer](http://www.javazoom.net/javalayer/javalayer.html) for playing mp3 files, * [jFugue](http://www.jfugue.org) to simplify the process of creating MIDI sequences, * [hyphenator](https://github.com/Nianna/hyphenator) for syllabification, * [javasound-aac](https://github.com/Tianscar/javasound-aac) for m4a files support, +* mp3spi for mp3 files support, * [java-vorbis-support](https://github.com/Trilarion/java-vorbis-support) for Ogg Vorbis support. ## License diff --git a/lib/com/googlecode/soundlibs/jlayer/1.0.1/jlayer-1.0.1.jar b/lib/com/googlecode/soundlibs/jlayer/1.0.1/jlayer-1.0.1.jar deleted file mode 100644 index 22dce61aef3fc5714589ee01bd7f57d8c39de155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106702 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

(H>r|Sz$es;n6q4t!9osGU^)b#AiEhi^s}TD` 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

V9tGlFsZj^`(DL{HnU3X7WyIj#yI^_4b_h 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.9.8 0.1.3 1.2.1 - 1.0.1 + 1.9.5.4 5.11.0 - 0.8.1 0.11.0 1.0.1 @@ -117,23 +116,6 @@ true ${project.jars.outputDirectory} - - - com.googlecode.soundlibs - jlayer - ${jlayer.version} - - - module jlayer { - requires transitive java.desktop; - - exports javazoom.jl.converter; - exports javazoom.jl.decoder; - exports javazoom.jl.player; - exports javazoom.jl.player.advanced; - } - - jfugue @@ -207,13 +189,57 @@ - com.mpatric - mp3agic - ${mp3agic.version} + com.googlecode.soundlibs + mp3spi + ${mp3spi.version} - module mp3agic { - exports com.mpatric.mp3agic; + module mp3spi { + requires java.desktop; + requires java.logging; + requires tritonus.share; + requires jlayer; + + exports javazoom.spi.mpeg.sampled.convert; + exports javazoom.spi.mpeg.sampled.file; + + provides javax.sound.sampled.spi.AudioFileReader + with javazoom.spi.mpeg.sampled.file.MpegAudioFileReader; + provides javax.sound.sampled.spi.FormatConversionProvider + with javazoom.spi.mpeg.sampled.convert.MpegFormatConversionProvider; + } + + + + + com.googlecode.soundlibs + tritonus-share + 0.3.7.4 + + + module tritonus.share { + requires java.desktop; + requires java.logging; + + exports org.tritonus.share.sampled.file; + exports org.tritonus.share.sampled.convert; + exports org.tritonus.share.sampled; + exports org.tritonus.share; + } + + + + + com.googlecode.soundlibs + jlayer + 1.0.1.4 + + + module jlayer { + requires transitive java.desktop; + + exports javazoom.jl.converter; + exports javazoom.jl.decoder; } @@ -402,12 +428,6 @@ ${hyphenator.version} - - com.googlecode.soundlibs - jlayer - ${jlayer.version} - - jfugue jfugue @@ -432,16 +452,18 @@ ${java-vorbis-support.version} + + com.googlecode.soundlibs + mp3spi + ${mp3spi.version} + + org.controlsfx controlsfx ${controlsfx.version} - - com.mpatric - mp3agic - ${mp3agic.version} - + org.fxmisc.richtext richtextfx diff --git a/src/main/java/com/github/nianna/karedi/audio/AudioFileLoader.java b/src/main/java/com/github/nianna/karedi/audio/AudioFileLoader.java index 27e372e..4febf9f 100644 --- a/src/main/java/com/github/nianna/karedi/audio/AudioFileLoader.java +++ b/src/main/java/com/github/nianna/karedi/audio/AudioFileLoader.java @@ -24,7 +24,7 @@ private AudioFileLoader() { } /** - * Loads the specified mp3 file on a background thread and passes the + * Loads the specified audio file on a background thread and passes the * optional result to the given consumer. * * @param file @@ -57,10 +57,10 @@ private static class LoadAudioFileTask extends Task { } @Override - protected PreloadedAudioFile call() throws Exception { + protected PreloadedAudioFile call() { String extension = Utils.getFileExtension(file); if (MP3_EXT.contains(extension)) { - return new Mp3File(file); + return SourceDataLineAudioFile.mp3File(file); } if (WAV_EXT.contains(extension)) { return SourceDataLineAudioFile.wavFile(file); diff --git a/src/main/java/com/github/nianna/karedi/audio/Mp3File.java b/src/main/java/com/github/nianna/karedi/audio/Mp3File.java deleted file mode 100644 index cd9cce2..0000000 --- a/src/main/java/com/github/nianna/karedi/audio/Mp3File.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.github.nianna.karedi.audio; - -import com.github.nianna.karedi.I18N; -import com.mpatric.mp3agic.InvalidDataException; -import com.mpatric.mp3agic.UnsupportedTagException; - -import java.io.File; -import java.io.IOException; -import java.util.logging.Logger; - -public class Mp3File extends PreloadedAudioFile { - private static final Logger LOGGER = Logger.getLogger(Mp3File.class.getName()); - private byte[] cache; - - private long duration; - private Double fps; - - public Mp3File(File file) throws IOException { - super(file); - reload(); - } - - private void cache() { - try { - cache = new FileLoader(getFile()).load(); - } catch (Exception e) { - LOGGER.severe(I18N.get("mp3file.cache.fail")); - e.printStackTrace(); - } - } - - public void reload() throws IOException { - loadInfo(); - cache(); - } - - private void loadInfo() throws IOException { - com.mpatric.mp3agic.Mp3File mp3file = null; - try { - mp3file = new com.mpatric.mp3agic.Mp3File(getFile().getAbsolutePath()); - } catch (UnsupportedTagException | InvalidDataException e) { - LOGGER.warning(I18N.get("mp3file.invalid_source")); - e.printStackTrace(); - } catch (IOException e) { - throw (e); - } - double spr = SamplesPerFrame.get(mp3file.getVersion(), mp3file.getLayer()); - fps = (double) (mp3file.getSampleRate() / spr); - duration = mp3file.getLengthInMilliseconds(); - } - - public byte[] getCache() { - return cache; - } - - public Double getFPS() { - return fps; - } - - @Override - public long getDuration() { - return duration; - } - - @Override - public void releaseResources() { - // no resources to be released - } -} diff --git a/src/main/java/com/github/nianna/karedi/audio/Mp3FilePlayTask.java b/src/main/java/com/github/nianna/karedi/audio/Mp3FilePlayTask.java deleted file mode 100644 index 0bb67f0..0000000 --- a/src/main/java/com/github/nianna/karedi/audio/Mp3FilePlayTask.java +++ /dev/null @@ -1,53 +0,0 @@ -package com.github.nianna.karedi.audio; - -import com.github.nianna.karedi.I18N; -import javafx.concurrent.Task; -import javazoom.jl.decoder.JavaLayerException; -import javazoom.jl.player.advanced.AdvancedPlayer; - -import java.io.ByteArrayInputStream; -import java.util.logging.Logger; - -class Mp3FilePlayTask extends Task { - private static final Logger LOGGER = Logger.getLogger(Mp3FilePlayTask.class.getName()); - - private int startFrame; - private int endFrame; - private AdvancedPlayer player; - - Mp3FilePlayTask(Mp3File file, long startMillis, long endMillis) { - super(); - startFrame = getFrameForMillis(file.getFPS(), startMillis); - endFrame = Math.max(getFrameForMillis(file.getFPS(), endMillis), startFrame + 1); - ByteArrayInputStream bis = new ByteArrayInputStream(file.getCache()); - try { - player = new AdvancedPlayer(bis); - player.setVolume(file.getVolume().floatValue()); - } catch (JavaLayerException e) { - LOGGER.severe(I18N.get("player.mp3.fail")); - e.printStackTrace(); - } - } - - @Override - protected Long call() throws Exception { - if (player != null) { - player.play(startFrame, endFrame); - } - return null; - } - - @Override - public boolean cancel(boolean mayInterruptIfRunning) { - if (player != null) { - player.close(); - } - return super.cancel(mayInterruptIfRunning); - } - - private int getFrameForMillis(double fps, long millis) { - return (int) (fps * (millis / 1000.0)); - } - -} - diff --git a/src/main/java/com/github/nianna/karedi/audio/PreloadedAudioFilePlayer.java b/src/main/java/com/github/nianna/karedi/audio/PreloadedAudioFilePlayer.java index 979daf4..91c62fb 100644 --- a/src/main/java/com/github/nianna/karedi/audio/PreloadedAudioFilePlayer.java +++ b/src/main/java/com/github/nianna/karedi/audio/PreloadedAudioFilePlayer.java @@ -26,9 +26,6 @@ void play(long startMillis, long endMillis) { } private static Task createPlayTask(PreloadedAudioFile file, Long startMillis, Long endMillis) { - if (file instanceof Mp3File) { - return new Mp3FilePlayTask((Mp3File) file, startMillis, endMillis); - } if (file instanceof SourceDataLineAudioFile) { return new SourceDataLineAudioFilePlayTask((SourceDataLineAudioFile) file, startMillis, endMillis); } diff --git a/src/main/java/com/github/nianna/karedi/audio/SamplesPerFrame.java b/src/main/java/com/github/nianna/karedi/audio/SamplesPerFrame.java deleted file mode 100644 index 8ff368f..0000000 --- a/src/main/java/com/github/nianna/karedi/audio/SamplesPerFrame.java +++ /dev/null @@ -1,55 +0,0 @@ -package com.github.nianna.karedi.audio; - -import com.mpatric.mp3agic.MpegFrame; - -/** - * Contains standard SPF (samples per frame) values for - * different versions and layers of MPEG. - * - */ -public final class SamplesPerFrame { - public static final int DEFAULT = 1152; - - private SamplesPerFrame() { - } - - private static final int[][] SAMPLES_PER_FRAME = new int[][] { - { // MPEG Version 1 - 384, // Layer1 - 1152, // Layer2 - 1152 // Layer3 - }, - { // MPEG Version 2 & 2.5 - 384, // Layer1 - 1152, // Layer2 - 576 // Layer3 - } - }; - - public static int get(String version, String layer) { - if (version != null && layer != null) { - switch (version) { - case MpegFrame.MPEG_VERSION_1_0: - return get(SAMPLES_PER_FRAME[0], layer); - case MpegFrame.MPEG_VERSION_2_0: - return get(SAMPLES_PER_FRAME[1], layer); - case MpegFrame.MPEG_VERSION_2_5: - return get(SAMPLES_PER_FRAME[1], layer); - } - } - return DEFAULT; - } - - private static int get(int[] spfForVersion, String layer) { - switch (layer) { - case MpegFrame.MPEG_LAYER_1: - return spfForVersion[0]; - case MpegFrame.MPEG_LAYER_2: - return spfForVersion[1]; - case MpegFrame.MPEG_LAYER_3: - return spfForVersion[2]; - default: - return DEFAULT; - } - } -} diff --git a/src/main/java/com/github/nianna/karedi/audio/SourceDataLineAudioFile.java b/src/main/java/com/github/nianna/karedi/audio/SourceDataLineAudioFile.java index 534d2f4..019c581 100644 --- a/src/main/java/com/github/nianna/karedi/audio/SourceDataLineAudioFile.java +++ b/src/main/java/com/github/nianna/karedi/audio/SourceDataLineAudioFile.java @@ -1,5 +1,7 @@ package com.github.nianna.karedi.audio; +import net.sourceforge.jaad.spi.javasound.AACAudioFileReader; + import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; @@ -46,7 +48,7 @@ public void releaseResources() { public static SourceDataLineAudioFile aacFile(File file) { try { - AudioInputStream in = AudioSystem.getAudioInputStream(file); + AudioInputStream in = new AACAudioFileReader().getAudioInputStream(file); AudioFormat inAudioFormat = in.getFormat(); AudioFormat decodedAudioFormat = new AudioFormat( AudioSystem.NOT_SPECIFIED, @@ -71,6 +73,15 @@ public static PreloadedAudioFile vorbisFile(File file) { } } + public static PreloadedAudioFile mp3File(File file) { + try { + AudioInputStream in = AudioSystem.getAudioInputStream(file); + return convertAndLoadAudio(file, in); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + public static PreloadedAudioFile wavFile(File file) { try { AudioInputStream in = AudioSystem.getAudioInputStream(file); diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index 6644c58..727f789 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -2,10 +2,8 @@ requires javafx.controls; requires javafx.fxml; requires org.controlsfx.controls; - requires jlayer; requires java.logging; requires java.desktop; - requires mp3agic; requires java.prefs; requires jfugue; requires org.fxmisc.richtext; @@ -14,6 +12,7 @@ requires wellbehavedfx; requires com.github.trilarion.sound; requires nianna.hyphenator; + requires mp3spi; opens com.github.nianna.karedi to javafx.graphics; opens com.github.nianna.karedi.controller to javafx.fxml; diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index e938621..215dacd 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -273,9 +273,6 @@ syllabizer.init_failed=Failed to initialize auto-syllabizer player.midi.unavailable=Midi sequencer unavailable player.midi.invalid_data=Invalid midi sequence requested -player.mp3.fail=Playback failed -mp3file.invalid_source=Non-standard mp3 file -mp3file.cache.fail=Caching failed, please reload the audio file note.tooltip.tone=Tone: note.tooltip.length=Length: diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index e938621..215dacd 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -273,9 +273,6 @@ syllabizer.init_failed=Failed to initialize auto-syllabizer player.midi.unavailable=Midi sequencer unavailable player.midi.invalid_data=Invalid midi sequence requested -player.mp3.fail=Playback failed -mp3file.invalid_source=Non-standard mp3 file -mp3file.cache.fail=Caching failed, please reload the audio file note.tooltip.tone=Tone: note.tooltip.length=Length: diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index a14e7ea..12830fd 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -276,9 +276,6 @@ syllabizer.init_failed=Inicjalizacja sylabizatora nie powiod\u0142a si\u0119 player.midi.unavailable=Sekwencera midi niedost\u0119pny player.midi.invalid_data=B\u0142edna sekwencja midi -player.mp3.fail=B\u0142\u0105d odtwarzania -mp3file.invalid_source=Niestandardowy plik mp3 -mp3file.cache.fail=Cachowanie nie powiod\u0142o si\u0119, spróbuj ponownie za\u0142adowa\u0107 plik muzyczny note.tooltip.tone=Ton: note.tooltip.length=D\u0142ugo\u015B\u0107: