import de.umass.lastfm.*; import org.farng.mp3.*; import org.farng.mp3.id3.*; import java.util.*; import java.util.regex.Pattern; import java.util.regex.Matcher; import java.text.*; import java.lang.Runtime; import java.lang.Process; import java.net.URL; import java.io.InputStream; import java.util.Scanner; import java.io.File; import java.awt.image.BufferedImage; import javax.imageio.ImageIO; import org.jmusixmatch.MusixMatch; import org.jmusixmatch.entity.lyrics.Lyrics; public class MP3FILE { public static String Fingerprint = "./FPclient"; public MP3File mp3_file; public String mp3_path; public ID3v1 id3v1tag; public AbstractMP3Tag id3v2tag; public Tag tag; public MP3FILE( File file ) throws Exception{ mp3_path = file.getAbsolutePath(); mp3_file = new MP3File(file); tag = new Tag(); int hasid3v2 = 0; int hasid3v1 = 0; //check and construct id3v2 tag if(mp3_file.hasID3v2Tag()){ hasid3v2 = 1; id3v2tag = mp3_file.getID3v2Tag(); }else{ //System.out.println("asdasdasd"); id3v2tag = new ID3v2_3(); load_ID3v2_tag(); mp3_file.setID3v2Tag(id3v1tag); mp3_file.save(); } //check or construct id3v1 tag if(mp3_file.hasID3v1Tag()){ hasid3v1 = 1; id3v1tag = mp3_file.getID3v1Tag(); }else{ id3v1tag = new ID3v1(); load_ID3v1_tag(); mp3_file.setID3v1Tag(id3v1tag); mp3_file.save(); } if( hasid3v2 == 1 ){ load_id3v2_tag(); }else if( hasid3v1 == 1 ){ load_id3v1_tag(); }else{ load_id3v2_tag(); } tag.track_mbid = null; tag.artist_mbid = null; tag.album_mbid = null; tag.track_url = null; tag.image_url = null; tag.cover = null; tag.album_tags = null; } public int load_ID3v1_tag(){ id3v1tag.setAlbumTitle(""); id3v1tag.setLeadArtist(""); id3v1tag.setSongComment(""); //id3v1tag.setSongGenre(""); //id3v1tag.setSongLyric(""); id3v1tag.setSongTitle(""); //id3v1tag.setTrackNumberOnAlbum(""); id3v1tag.setYearReleased(""); return 0; } public int load_ID3v2_tag(){ id3v2tag.setAlbumTitle(""); id3v2tag.setLeadArtist(""); id3v2tag.setSongComment(""); //id3v2tag.setSongGenre(""); //id3v2tag.setSongLyric(""); id3v2tag.setSongTitle(""); id3v2tag.setYearReleased(""); return 0; } public int load_id3v1_tag() throws Exception{ tag.title = id3v1tag.getSongTitle(); if( tag.title == null ) tag.title = ""; tag.artist = id3v1tag.getLeadArtist(); if( tag.artist == null ) tag.artist = ""; tag.album = id3v1tag.getAlbumTitle(); if( tag.album == null ) tag.album = ""; tag.release_Date = id3v1tag.getYearReleased(); if( tag.release_Date == null ) tag.release_Date = ""; tag.track_num = id3v1tag.getTrackNumberOnAlbum(); if( tag.track_num == null ) tag.track_num = ""; tag.comment = id3v1tag.getSongComment(); if( tag.comment == null ) tag.comment = ""; tag.lyrics = id3v1tag.getSongLyric(); if( tag.lyrics == null ) tag.lyrics = ""; tag.genre = id3v1tag.getSongGenre(); if( tag.genre == null ) tag.genre = ""; return 0; } public int load_id3v2_tag() throws Exception{ tag.title = id3v2tag.getSongTitle(); if( tag.title == null ) tag.title = ""; tag.artist = id3v2tag.getLeadArtist(); if( tag.artist == null ) tag.artist = ""; tag.album = id3v2tag.getAlbumTitle(); if( tag.album == null ) tag.album = ""; tag.release_Date = id3v2tag.getYearReleased(); if( tag.release_Date == null ) tag.release_Date = ""; tag.track_num = id3v2tag.getTrackNumberOnAlbum(); if( tag.track_num == null ) tag.track_num = ""; tag.comment = id3v2tag.getSongComment(); if( tag.comment == null ) tag.comment = ""; tag.lyrics = id3v2tag.getSongLyric(); if( tag.lyrics == null ) tag.lyrics = ""; tag.genre = id3v2tag.getSongGenre(); if( tag.genre == null ) tag.genre = ""; //tag.length = id3v2tag.get return 0; } public int save_id3v1_tag() throws Exception{ id3v1tag.setSongTitle(tag.title); id3v1tag.setLeadArtist(tag.artist); id3v1tag.setAlbumTitle(tag.album); id3v1tag.setYearReleased(tag.release_Date); //id3v1tag.setTrackNumberOnAlbum(tag.track_num); id3v1tag.setSongComment(tag.comment); //id3v1tag.setSongLyric(tag.lyrics); mp3_file.setID3v1Tag(id3v1tag); mp3_file.save(); return 0; } public int save_id3v2_tag() throws Exception{ id3v2tag.setSongTitle(tag.title); id3v2tag.setLeadArtist(tag.artist); id3v2tag.setAlbumTitle(tag.album); id3v2tag.setYearReleased(tag.release_Date); //id3v2tag.setTrackNumberOnAlbum(tag.track_num); id3v2tag.setSongComment(tag.comment); //id3v2tag.setSongGenre(tag.genre); //id3v2tag.setSongLyric(tag.lyrics); mp3_file.setID3v2Tag(id3v2tag); mp3_file.save(); return 0; } public int setTitle( String arg ){ if( arg == null ) return -1; tag.title = new String(arg); return 0; } public int setArtist( String arg ){ if( arg == null ) return -1; tag.artist = new String(arg); return 0; } public int setAlbum( String arg ){ if( arg == null ) return -1; tag.album = new String(arg); return 0; } public int setComment( String arg ){ if( arg == null ) return -1; tag.comment = new String(arg); return -1; } public int setYear( String arg ){ if( arg == null ) return -1; tag.release_Date = new String(arg); return 0; } public int setLyrics( String arg ){ if( arg == null ) return -1; tag.lyrics = new String(arg); return 0; } public int setGenre( String arg ){ if( arg == null ) return -1; tag.genre = new String(arg); return 0; } public int setTrackNum( String arg ){ if( arg == null ) return -1; tag.track_num = new String(arg); return 0; } public int get_correct_tag() throws Exception{ if( get_track_mbid() != 0 ) return -1; if( get_tags() != 0 ) return -1; return 0; } private int get_track_mbid() throws Exception{ if(!mp3_path.endsWith(".mp3")) return -1; String path = new String(mp3_path); path.replace(" ", "\\ "); //System.out.println(path); String cmd[] = {Fingerprint,path}; Process process = Runtime.getRuntime().exec( cmd ); int exitval = process.waitFor(); if(exitval != 0) return -1; InputStream in = process.getInputStream(); Scanner scanner = new Scanner(in); String regex = "\\<mbid\\>.*\\</mbid\\>"; Pattern pattern = Pattern.compile(regex); Matcher matcher; String line; boolean match = false; while(!match){ if( !scanner.hasNext()){ return -1; } line = scanner.nextLine(); matcher = pattern.matcher(line); //System.out.print(line); //System.out.println("====="); if( matcher.find() ){ match = true; int start = matcher.start(); int end = matcher.end(); tag.track_mbid = line.substring(start+6, end-7); } } scanner.close(); in.close(); return 0; } private int get_tags() throws Exception{ String key = "53c45c5411794035744f14e96ae64089"; Track track = Track.getInfo("asd", tag.track_mbid , key); tag.title = track.getName(); tag.artist = track.getArtist(); tag.artist_mbid = track.getArtistMbid(); tag.album = track.getAlbum(); tag.album_mbid = track.getAlbumMbid(); //ength = track.getDuration(); tag.track_url = track.getUrl(); //track_num = track.getUrl(); tag.image_url = track.getImageURL(ImageSize.EXTRALARGE); URL url = new URL(tag.image_url); tag.cover = ImageIO.read(url); //track.getDuration(); //Image[] images; //Artist.getImages(artist_mbid, key).getPageResults().toArray(images); Album album_t = Album.getInfo(tag.artist, tag.album_mbid, key); //album_tags = album_t.getTags().toString(); SimpleDateFormat simpleDateformat = new SimpleDateFormat("yyyy"); Date date = album_t.getReleaseDate(); if(date != null) tag.release_Date = simpleDateformat.format(date); else tag.release_Date = ""; String MusicMatchAPI = "21e1e64b9b33547ce146f673a5d5c677"; MusixMatch music_match = new MusixMatch(MusicMatchAPI); int trackID = music_match.getMatchingTrack(tag.title, tag.artist).getTrack().getTrackId(); Lyrics l = music_match.getLyrics(trackID); tag.lyrics = l.getLyricsBody(); return 0; } public int save_cover(){ return 0; } public int output_tags(){ System.out.println(mp3_path); System.out.println(tag.title); System.out.println(tag.artist); System.out.println(tag.album); System.out.println(tag.track_num); System.out.println(tag.release_Date); System.out.println(tag.comment); System.out.println(tag.genre); System.out.println(tag.lyrics); //System.out.println(); //System.out.println(tag.track_mbid); //System.out.println(tag.artist_mbid); //System.out.println(tag.album_mbid); //System.out.println(tag.track_url); //System.out.println(tag.image_url); return 0; } /* public static void main( String args[] ) throws Exception{ String filepath = "a.mp3"; MP3FILE mp3file = new MP3FILE(new File(filepath)); mp3file.get_correct_tag(); mp3file.output_tags(); //System.out.println(mp3file.getAlbum_tags()); } */ } class Tag{ public String title; public String artist; public String album; public String release_Date; public String track_num; public String comment; public String lyrics; public String genre; public int length; public String track_mbid; public String artist_mbid; public String album_mbid; public String track_url; public String image_url; public BufferedImage cover; public String album_tags; }