Wrote a wrapper around the id3 tag program.
git-svn-id: https://samskivert.googlecode.com/svn/trunk@618 6335cc39-0255-0410-8fd6-9bcaacd3b74c
This commit is contained in:
@@ -0,0 +1,77 @@
|
|||||||
|
//
|
||||||
|
// $Id: ID3Tagger.java,v 1.1 2002/03/03 05:25:09 mdb Exp $
|
||||||
|
|
||||||
|
package robodj.convert;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import org.apache.commons.util.StreamUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A tagger implementation that uses 'id3' to do it's job.
|
||||||
|
*/
|
||||||
|
public class ID3Tagger
|
||||||
|
{
|
||||||
|
// documentation inherited
|
||||||
|
public void idTrack (String target, String artist, String album,
|
||||||
|
String title, int trackNo)
|
||||||
|
throws ConvertException
|
||||||
|
{
|
||||||
|
String[] cmdarray = new String[] {
|
||||||
|
"id3", "-t", title, "-a", artist, "-A", album,
|
||||||
|
"-T", Integer.toString(trackNo), target };
|
||||||
|
|
||||||
|
try {
|
||||||
|
Runtime rt = Runtime.getRuntime();
|
||||||
|
Process ripproc = rt.exec(cmdarray);
|
||||||
|
|
||||||
|
InputStream in = ripproc.getErrorStream();
|
||||||
|
String output = StreamUtils.streamAsString(in);
|
||||||
|
|
||||||
|
// check the return value of the process
|
||||||
|
try {
|
||||||
|
int retval = ripproc.waitFor();
|
||||||
|
if (retval != 0) {
|
||||||
|
// ship off the error output from id3
|
||||||
|
throw new ConvertException(
|
||||||
|
"id3 failed: " + output);
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
// why we were interrupted I can only speculate, but we'll
|
||||||
|
// go ahead and freak out anyway
|
||||||
|
throw new ConvertException("Interrupted while waiting for " +
|
||||||
|
"encoder process to exit.");
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
throw new ConvertException(
|
||||||
|
"Error communicating with encoder:\n" + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main (String[] args)
|
||||||
|
{
|
||||||
|
ID3Tagger tagger = new ID3Tagger();
|
||||||
|
if (args.length < 5) {
|
||||||
|
System.err.println("Usage: ID3Tagger target artist album " +
|
||||||
|
"title trackNo");
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
int trackNo = 0;
|
||||||
|
try {
|
||||||
|
trackNo = Integer.parseInt(args[4]);
|
||||||
|
} catch (NumberFormatException nfe) {
|
||||||
|
System.err.println("Invalid track number: " + args[4]);
|
||||||
|
System.exit(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
tagger.idTrack(args[0], args[1], args[2], args[3], trackNo);
|
||||||
|
} catch (ConvertException ce) {
|
||||||
|
ce.printStackTrace(System.err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
//
|
||||||
|
// $Id: Tagger.java,v 1.1 2002/03/03 05:25:10 mdb Exp $
|
||||||
|
|
||||||
|
package robodj.convert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The tagger interface is used to set the ID3 tags in MP3 files.
|
||||||
|
*/
|
||||||
|
public interface Tagger
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Sets the ID3 tags for the specified target MP3 file for the
|
||||||
|
* supplied information: artist, album name, track title and track
|
||||||
|
* number.
|
||||||
|
*/
|
||||||
|
public void idTrack (String target, String artist, String album,
|
||||||
|
String title, int trackNo)
|
||||||
|
throws ConvertException;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user