diff --git a/pom.xml b/pom.xml index 07b93ca..25b71a5 100644 --- a/pom.xml +++ b/pom.xml @@ -196,7 +196,7 @@ hibernate-entitymanager ${hibernate.version} - + org.hibernate @@ -317,11 +317,10 @@ 1.1.1 - - com.mpatric - mp3agic - 0.9.1 + net.jthink + jaudiotagger + 2.2.3 diff --git a/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadHandler.java b/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadHandler.java index ea5e7d1..96fe803 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadHandler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadHandler.java @@ -34,21 +34,22 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID; +import org.jaudiotagger.audio.AudioFile; +import org.jaudiotagger.audio.AudioFileIO; +import org.jaudiotagger.tag.Tag; import org.springframework.stereotype.Component; -import com.mpatric.mp3agic.ID3v2; -import com.mpatric.mp3agic.Mp3File; @Component public class Mp3UploadHandler { public Mp3UploadResults parse(Path file) throws IOException { InputStream is = Files.newInputStream(file); - return parse(is); + return parse(is, file.getFileName().toString()); } - public Mp3UploadResults parse(InputStream is) throws IOException { + public Mp3UploadResults parse(InputStream is, String fileName) throws IOException { byte[] data; - String id = null; + Path tmp = null; try(InputStream in = is; ByteArrayOutputStream baos = new ByteArrayOutputStream()) { int read = 0; byte[] buffer = new byte[1024 * 1024]; @@ -57,17 +58,21 @@ public class Mp3UploadHandler { } data = baos.toByteArray(); - id = UUID.nameUUIDFromBytes(data).toString(); - Files.write(Paths.get(id), data); - Mp3File mp3 = new Mp3File(Paths.get(id)); - ID3v2 tag = mp3.getId3v2Tag(); + String id = UUID.nameUUIDFromBytes(data).toString(); + + tmp = Paths.get(String.format("%s_%s", id, fileName)); + + Files.write(tmp, data); + + AudioFile f = AudioFileIO.read(tmp.toFile()); + Tag tag = f.getTag(); return new Mp3UploadResults(tag, data); } catch (Exception ex) { return new Mp3UploadResults(ex); } finally { - if (id != null) { - Files.deleteIfExists(Paths.get(id)); + if (tmp != null) { + Files.deleteIfExists(tmp); } } } diff --git a/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadResults.java b/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadResults.java index 8f22c7a..99bd9ce 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadResults.java +++ b/src/main/java/net/locusworks/discord/eighttrack/audio/Mp3UploadResults.java @@ -27,7 +27,8 @@ */ package net.locusworks.discord.eighttrack.audio; -import com.mpatric.mp3agic.ID3v2; +import org.jaudiotagger.tag.FieldKey; +import org.jaudiotagger.tag.Tag; public class Mp3UploadResults { @@ -43,7 +44,7 @@ public class Mp3UploadResults { private byte[] rawData; private Throwable err; - public Mp3UploadResults(ID3v2 tag, byte[] data) { + public Mp3UploadResults(Tag tag, byte[] data) { parseResults(tag); this.rawData = data; } @@ -52,15 +53,15 @@ public class Mp3UploadResults { this.err = err; } - private void parseResults(ID3v2 metadata) { - genre = metadata.getGenreDescription(); - composure = metadata.getComposer(); - album = metadata.getAlbum(); - trackNumber = metadata.getTrack(); - discNumber = metadata.getPartOfSet(); - artist = metadata.getArtist(); - title = metadata.getTitle(); - releaseDate = metadata.getDate(); + private void parseResults(Tag tag) { + genre = tag.getFirst(FieldKey.GENRE); + composure = tag.getFirst(FieldKey.COMPOSER); + album = tag.getFirst(FieldKey.ALBUM); + trackNumber = tag.getFirst(FieldKey.TRACK); + discNumber = tag.getFirst(FieldKey.DISC_NO); + artist = tag.getFirst(FieldKey.ARTIST); + title = tag.getFirst(FieldKey.TITLE); + releaseDate = tag.getFirst(FieldKey.ORIGINAL_YEAR); } public final byte[] getData() { diff --git a/src/main/java/net/locusworks/discord/eighttrack/events/main/handlers/UploadHandler.java b/src/main/java/net/locusworks/discord/eighttrack/events/main/handlers/UploadHandler.java index 003b3d5..fd6cb00 100644 --- a/src/main/java/net/locusworks/discord/eighttrack/events/main/handlers/UploadHandler.java +++ b/src/main/java/net/locusworks/discord/eighttrack/events/main/handlers/UploadHandler.java @@ -83,7 +83,7 @@ public class UploadHandler extends AbstractMainEventHandler { MessageEmbed embed = null; try { - res = uploadHandler.parse(in); + res = uploadHandler.parse(in, attachment.getFileName()); if (res.validFile()) { embed = persistSong(res, event, attachment.getFileName()); } else {