Author: jukka
Date: Sun Sep 14 04:31:08 2008
New Revision: 695194
URL: http://svn.apache.org/viewvc?rev=695194&view=rev
Log:
TIKA-120: Add support for retrieving ID3 tags from MP3 files
Support for the ID3v1.1 track addition.
Modified:
incubator/tika/trunk/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
Modified:
incubator/tika/trunk/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
URL:
http://svn.apache.org/viewvc/incubator/tika/trunk/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java?rev=695194&r1=695193&r2=695194&view=diff
==============================================================================
---
incubator/tika/trunk/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
(original)
+++
incubator/tika/trunk/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
Sun Sep 14 04:31:08 2008
@@ -178,29 +178,42 @@
XHTMLContentHandler xhtml = new XHTMLContentHandler(handler, metadata);
xhtml.startDocument();
- byte[] buffer = getSuffix(stream, 128);
- if (buffer.length == 128
- && buffer[0] == 'T' && buffer[1] == 'A' && buffer[2] == 'G') {
- String title = getString(buffer, 3, 33);
- String artist = getString(buffer, 33, 63);
- String album = getString(buffer, 63, 93);
- String year = getString(buffer, 93, 97);
- String comment = getString(buffer, 97, 127);
- int genre = (int) buffer[127] & 0xff; // unsigned byte
+ byte[] tag = getSuffix(stream, 128);
+ if (tag.length == 128
+ && tag[0] == 'T' && tag[1] == 'A' && tag[2] == 'G') {
+ String title = getString(tag, 3, 33);
+ String artist = getString(tag, 33, 63);
+ String album = getString(tag, 63, 93);
+ String year = getString(tag, 93, 97);
+ String comment = getString(tag, 97, 127);
+ int genre = (int) tag[127] & 0xff; // unsigned byte
metadata.set(Metadata.TITLE, title);
metadata.set(Metadata.AUTHOR, artist);
xhtml.element("h1", title);
xhtml.characters("\n");
+
xhtml.element("p", artist);
xhtml.characters("\n");
- xhtml.element("p", album);
+
+ // ID3v1.1 Track addition
+ // If the last two bytes of the comment field are zero and
+ // non-zero, then the last byte is the track number
+ if (tag[125] == 0 && tag[126] != 0) {
+ int track = (int) tag[126] & 0xff;
+ xhtml.element("p", album + ", track " + track);
+ } else {
+ xhtml.element("p", album);
+ }
xhtml.characters("\n");
+
xhtml.element("p", year);
xhtml.characters("\n");
+
xhtml.element("p", comment);
xhtml.characters("\n");
+
xhtml.element("p", GENRES[Math.min(genre, GENRES.length - 1)]);
xhtml.characters("\n");
}