package com.pugh.sockso.music.tag;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.jaudiotagger.tag.FieldKey;
import org.jaudiotagger.tag.mp4.Mp4FieldKey;
import org.jaudiotagger.tag.mp4.Mp4Tag;
import org.jaudiotagger.tag.mp4.field.Mp4TrackField;
public class AACTag extends AudioTag {
/**
* Alternate method, calls external faad program and parses
* stderr (which for some reason faad uses instead of stdout) to
* retrieve tag information.
*
* @param file
* @throws IOException
*/
public void faad( File file ) throws IOException {
ProcessBuilder pb = new ProcessBuilder(new String[]{ "sh", "scripts/unix/aactag.sh", file.getAbsolutePath() });
Process proc = pb.start();
InputStream inputstream = proc.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
String line;
while ( (line = bufferedreader.readLine()) != null ) {
}
bufferedreader = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
while ( (line = bufferedreader.readLine()) != null ) {
if ( line.startsWith("title: ") ) {
this.trackTitle = line.substring("title: ".length());
} else if ( line.startsWith("track: ") ) {
try {
this.trackNumber = Integer.parseInt(line.substring("track: ".length()));
} catch (NumberFormatException nfe) {
}
} else if ( line.startsWith("album: ") ) {
this.albumTitle = line.substring("album: ".length());
} else if ( line.startsWith("artist: ") ) {
this.artistTitle = line.substring("artist: ".length());
} else if ( line.startsWith("genre: ") ) {
this.genre = line.substring("genre: ".length());
}
}
try {
if ( proc.waitFor() != 0 ) {
}
} catch (InterruptedException e) {
}
}
public void parse( File file ) throws IOException {
try {
AudioFile f = AudioFileIO.read(file);
Mp4Tag mp4tag = (Mp4Tag) f.getTag();
this.artistTitle = mp4tag.getFirst(Mp4FieldKey.ARTIST);
this.albumTitle = mp4tag.getFirst(Mp4FieldKey.ALBUM);
this.albumArtist = mp4tag.getFirst(Mp4FieldKey.ALBUM_ARTIST);
this.trackTitle = mp4tag.getFirst(FieldKey.TITLE);
this.genre = mp4tag.getFirst(FieldKey.GENRE);
this.trackNumber = ((Mp4TrackField) mp4tag.getFirstField(Mp4FieldKey.TRACK)).getTrackNo();
} catch ( Exception e) {
throw new IOException("Unable to read file: " + file.getName(), e);
}
}
}