/** * Uses jaudiotagger to read mp3 v1 & v2 tags * */ package com.pugh.sockso.music.tag; import java.io.File; import java.io.IOException; import org.apache.log4j.Logger; import org.jaudiotagger.audio.AudioFileIO; import org.jaudiotagger.audio.mp3.MP3File; import org.jaudiotagger.tag.FieldKey; import org.jaudiotagger.tag.datatype.Artwork; import org.jaudiotagger.tag.id3.ID3v1Tag; import org.jaudiotagger.tag.id3.ID3v24Frames; import org.jaudiotagger.tag.id3.ID3v24Tag; public class Mp3Tag extends AudioTag { private static final Logger log = Logger.getLogger( AudioTag.class ); /** * Returns ID3Data for the file. * * We would prefer to use ID3V2 tags, so we try to parse the ID3V2 * tags first, and then v1 to get any missing tags. * */ public void parse( final File file ) { try { MP3File f = (MP3File) AudioFileIO.read( file ); if ( f.hasID3v2Tag() ) parseID3v2Tag( f ); if ( f.hasID3v1Tag() ) parseID3v1Tag( f ); } catch ( Exception e ) { log.error( "Error parsing MP3 tag: " + e.getMessage() ); } } private void parseID3v2Tag( MP3File f ) { ID3v24Tag v2tag = f.getID3v2TagAsv24(); artistTitle = v2tag.getFirst( ID3v24Frames.FRAME_ID_ARTIST ); albumArtist = v2tag.getFirst( FieldKey.ALBUM_ARTIST ); albumTitle = v2tag.getFirst( ID3v24Frames.FRAME_ID_ALBUM ); trackTitle = v2tag.getFirst( ID3v24Frames.FRAME_ID_TITLE ); albumYear = v2tag.getFirst( ID3v24Frames.FRAME_ID_YEAR ); genre = v2tag.getFirst( ID3v24Frames.FRAME_ID_GENRE ); String trackN = v2tag.getFirst( ID3v24Frames.FRAME_ID_TRACK ); if ( ! trackN.equals("") ) { try { trackNumber = Integer.parseInt(trackN); } catch (final NumberFormatException e) { log.warn("Could not parse track number: " + trackN, e); } } Artwork artwork = v2tag.getFirstArtwork(); if ( artwork != null ) { try { coverArt = artwork.getImage(); } catch (final IOException ioe) { log.warn("Could not read cover art from tag", ioe); } } } private void parseID3v1Tag( MP3File f ) { ID3v1Tag tag = f.getID3v1Tag(); try { artistTitle = tag.getArtist().get(0).toString(); albumTitle = tag.getAlbum().get(0).toString(); trackTitle = tag.getTitle().get(0).toString(); albumYear = tag.getYear().get(0).toString(); genre = tag.getGenre().get(0).toString(); String trackN = tag.getTrack().get(0).toString(); if ( ! trackN.equals("") ) { try { trackNumber = Integer.parseInt(trackN); } catch (final NumberFormatException e) { log.warn("Could not parse track number " + trackN, e); } } } catch ( final Exception e ) {} } }