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");
         }


Reply via email to