From 180346963cfd8d0eaa10926178e966b1a4541caf Mon Sep 17 00:00:00 2001 From: yutou Date: Fri, 23 Oct 2020 17:55:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E5=85=83=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E8=AF=BB=E5=8F=96=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 5 ++ .../com/yutou/tools/ToolsApplication.java | 3 +- .../yutou/tools/home/nas/Data/MusicData.java | 19 ++++--- .../yutou/tools/home/nas/MusicController.java | 8 +-- .../com/yutou/tools/utils/MusicTools.java | 47 +++++++++++----- web/html/body/nas/music.html | 53 +++++++++++++------ 6 files changed, 91 insertions(+), 44 deletions(-) diff --git a/pom.xml b/pom.xml index 8fe2612..0e8d7e4 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,11 @@ jaudiotagger 2.2.3 + + com.ealva + ealvatag + 0.4.3 + diff --git a/src/main/java/com/yutou/tools/ToolsApplication.java b/src/main/java/com/yutou/tools/ToolsApplication.java index 93aea68..58dbd82 100644 --- a/src/main/java/com/yutou/tools/ToolsApplication.java +++ b/src/main/java/com/yutou/tools/ToolsApplication.java @@ -11,8 +11,7 @@ public class ToolsApplication { public static void main(String[] args) { SpringApplication.run(ToolsApplication.class, args); RedisTools.initRedisPoolSub(); - MusicTools.getInstance().setMusicPath("Z:\\音乐\\Aimer - ARIA STRINGS"); - MusicTools.getInstance().scanMusic(); + MusicTools.getInstance().setMusicPath("C:\\Users\\admin\\Music\\"); } } diff --git a/src/main/java/com/yutou/tools/home/nas/Data/MusicData.java b/src/main/java/com/yutou/tools/home/nas/Data/MusicData.java index bc2ef53..7a640d2 100644 --- a/src/main/java/com/yutou/tools/home/nas/Data/MusicData.java +++ b/src/main/java/com/yutou/tools/home/nas/Data/MusicData.java @@ -1,13 +1,11 @@ package com.yutou.tools.home.nas.Data; +import ealvatag.audio.AudioFile; +import ealvatag.audio.AudioFileIO; +import ealvatag.tag.NullTag; +import ealvatag.tag.Tag; +import ealvatag.tag.images.NullArtwork; import lombok.Data; -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.AudioFileIO; -import org.jaudiotagger.audio.exceptions.CannotReadException; -import org.jaudiotagger.audio.exceptions.InvalidAudioFrameException; -import org.jaudiotagger.audio.exceptions.ReadOnlyFileException; -import org.jaudiotagger.tag.Tag; -import org.jaudiotagger.tag.TagException; import java.io.*; import java.nio.file.Files; @@ -29,11 +27,12 @@ public class MusicData { public byte[] readImage() throws Exception { AudioFile audioFile = null; audioFile = AudioFileIO.read(file); - Tag tag = audioFile.getTag(); - if (tag.getFirstArtwork() == null) { + Tag tag = audioFile.getTag().or(NullTag.INSTANCE); + byte[] bytes=tag.getFirstArtwork().or(NullArtwork.INSTANCE).getBinaryData(); + if (bytes.length==0) { return readImageFile(); } - return tag.getFirstArtwork().getBinaryData(); + return bytes; } private byte[] readImageFile() throws Exception { diff --git a/src/main/java/com/yutou/tools/home/nas/MusicController.java b/src/main/java/com/yutou/tools/home/nas/MusicController.java index 474ffda..7f81b2a 100644 --- a/src/main/java/com/yutou/tools/home/nas/MusicController.java +++ b/src/main/java/com/yutou/tools/home/nas/MusicController.java @@ -43,15 +43,17 @@ public class MusicController { if(StringUtils.isEmpty(path)){ return getAllMusicList(); } - path=path.replace(defaultMusicPath+File.separator,""); + if(path.equals("root")){ + return getAllMusicList(); + } + //path=path.replace(defaultMusicPath+File.separator,""); JSONObject json=new JSONObject(); JSONObject data = new JSONObject(); json.put("code", 1); MusicTools tools = MusicTools.getInstance(); - tools.setMusicPath(defaultMusicPath+File.separator+path); data.put("scan", tools.isScan()); data.put("size", tools.getLength()); - data.put("list", JSONArray.toJSON(tools.getMusicPath())); + data.put("list", JSONArray.toJSON(tools.getPath(path))); json.put("data", data); return json.toJSONString(); diff --git a/src/main/java/com/yutou/tools/utils/MusicTools.java b/src/main/java/com/yutou/tools/utils/MusicTools.java index fbe3fb6..835da82 100644 --- a/src/main/java/com/yutou/tools/utils/MusicTools.java +++ b/src/main/java/com/yutou/tools/utils/MusicTools.java @@ -1,18 +1,16 @@ package com.yutou.tools.utils; import com.yutou.tools.home.nas.Data.MusicData; -import org.jaudiotagger.audio.AudioFile; -import org.jaudiotagger.audio.AudioFileIO; -import org.jaudiotagger.audio.exceptions.CannotReadException; -import org.jaudiotagger.tag.FieldKey; -import org.jaudiotagger.tag.Tag; +import ealvatag.audio.AudioFile; +import ealvatag.audio.AudioFileIO; +import ealvatag.audio.exceptions.CannotReadException; +import ealvatag.tag.FieldKey; +import ealvatag.tag.NullTag; +import ealvatag.tag.Tag; import org.springframework.util.StringUtils; import java.io.*; -import java.util.ArrayList; -import java.util.Base64; -import java.util.List; -import java.util.Objects; +import java.util.*; public class MusicTools { public static final int FIND_TITLE = 1; @@ -21,6 +19,7 @@ public class MusicTools { private static MusicTools tools; private String musicPath = "C:\\Users\\admin\\Music"; private final List musicList = new ArrayList<>(); + private HashMap> musicMap=new HashMap>(); private boolean isScan = false; public static MusicTools getInstance() { @@ -29,8 +28,14 @@ public class MusicTools { } return tools; } + private MusicTools(){ + scanMusic(); + } public synchronized void scanMusic() { + if(isScan){ + return; + } System.out.println("执行扫描"); musicList.clear(); new Thread(() -> { @@ -70,11 +75,26 @@ public class MusicTools { } } } + public List getPath(String path){ + if(musicMap.containsKey(path)){ + return musicMap.get(path); + } + return new ArrayList<>(); + } private void add(File file) { MusicData data = getMetadata(file); if (data != null) { musicList.add(data); + String path=file.getAbsolutePath().replace(file.getName(),""); + List list; + if(musicMap.containsKey(path)){ + list=musicMap.get(path); + }else{ + list=new ArrayList<>(); + } + list.add(data); + musicMap.put(path,list); } } @@ -84,7 +104,7 @@ public class MusicTools { return null; } AudioFile audioFile = AudioFileIO.read(file); - Tag tag = audioFile.getTag(); + Tag tag = audioFile.getTag().or(NullTag.INSTANCE); MusicData data = new MusicData(); try { data.setAlbum(tag.getFirst(FieldKey.ALBUM)); @@ -197,9 +217,10 @@ public class MusicTools { } } - public static void main(String[] args) { - String base = "Wjpc6Z-z5LmQXOOAkOmbqOWuruWkqeOAkU1PUkEg5YWo5aWXMTHlvKBIaXJlc-S4k-i-kVxbMjAyMDA5MDJdIOmbqOWuruWkqSAzcmTjgqLjg6vjg5Djg6DjgIxQYWludCBpdCwgQkxVReOAjVs5NmtIejI0Yml0XVtGTEFDXVwwMDMtRGVmaWFuY2UuZmxhYw=="; - System.out.println(new String(Base64.getDecoder().decode(base))); + public static void main(String[] args) throws Exception{ + String base = "bXVzaWMuaHRtbDo2MyBaOlzpn7PkuZBc55m75bGx5bCR5aWzXFtzM11bRURd6Imy6YGV44GE44Gu57%2B8XDAyLiAwMiDoibLpgZXjgYTjga7nv7wgKOOBguOBiuOBhOODkOODvOOCuOODp%2BODsykud2F2Cg%3D%3D"; + byte[] bytes=getInstance().getMetadata(new File("Z:\\音乐\\BanG Dream!\\Poppin'on!\\B.O.F.flac")).readImage(); + System.out.println(bytes.length); } diff --git a/web/html/body/nas/music.html b/web/html/body/nas/music.html index d1b9c69..4ba2b58 100644 --- a/web/html/body/nas/music.html +++ b/web/html/body/nas/music.html @@ -11,6 +11,7 @@
+
@@ -19,20 +20,29 @@
-
title
-
by
-
album
-
composer
+
标题:
+
艺术家:
+
专辑:
+
作曲家
-
+ +
+ @@ -42,13 +52,14 @@