You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2015/03/31 15:21:14 UTC

svn commit: r1670330 - in /tika/trunk: ./ tika-parsers/src/main/java/org/apache/tika/parser/mp3/ tika-parsers/src/test/java/org/apache/tika/parser/mp3/ tika-parsers/src/test/resources/test-documents/

Author: nick
Date: Tue Mar 31 13:21:14 2015
New Revision: 1670330

URL: http://svn.apache.org/r1670330
Log:
TIKA-1589 - Patch from Max Daniline to extract MP3 duration from files with no ID3 tags. This closes #38 from github

Added:
    tika/trunk/tika-parsers/src/test/resources/test-documents/testMP3noid3.mp3   (with props)
Modified:
    tika/trunk/CHANGES.txt
    tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
    tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java

Modified: tika/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/tika/trunk/CHANGES.txt?rev=1670330&r1=1670329&r2=1670330&view=diff
==============================================================================
--- tika/trunk/CHANGES.txt (original)
+++ tika/trunk/CHANGES.txt Tue Mar 31 13:21:14 2015
@@ -1,4 +1,6 @@
 Release 1.8 - Current Development
+  * Duration extracted from MP3s with no ID3 tags (TIKA-1589)
+
   * Upgraded to PDFBox 1.8.9 (TIKA-1575).
 
   * Tika now supports the IsaTab data standard for bioinformatics

Modified: tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java?rev=1670330&r1=1670329&r2=1670330&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java (original)
+++ tika/trunk/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java Tue Mar 31 13:21:14 2015
@@ -70,6 +70,7 @@ public class Mp3Parser extends AbstractP
         // Create handlers for the various kinds of ID3 tags
         ID3TagsAndAudio audioAndTags = getAllTagHandlers(stream, handler);
 
+        // Process tags metadata if the file has supported tags
         if (audioAndTags.tags.length > 0) {
            CompositeTagHandler tag = new CompositeTagHandler(audioAndTags.tags);
 
@@ -82,7 +83,6 @@ public class Mp3Parser extends AbstractP
            metadata.set(XMPDM.COMPILATION, tag.getCompilation());
            metadata.set(XMPDM.RELEASE_DATE, tag.getYear());
            metadata.set(XMPDM.GENRE, tag.getGenre());
-           metadata.set(XMPDM.DURATION, audioAndTags.duration);
 
            List<String> comments = new ArrayList<String>();
            for (ID3Comment comment : tag.getComments()) {
@@ -128,6 +128,9 @@ public class Mp3Parser extends AbstractP
                xhtml.element("p", comment);
             }
         }
+        if (audioAndTags.duration > 0) {
+            metadata.set(XMPDM.DURATION, audioAndTags.duration);
+        }
         if (audioAndTags.audio != null) {
             metadata.set("samplerate", String.valueOf(audioAndTags.audio.getSampleRate()));
             metadata.set("channels", String.valueOf(audioAndTags.audio.getChannels()));

Modified: tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java?rev=1670330&r1=1670329&r2=1670330&view=diff
==============================================================================
--- tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java (original)
+++ tika/trunk/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java Tue Mar 31 13:21:14 2015
@@ -328,6 +328,23 @@ public class Mp3ParserTest {
        assertEquals("", ID3v2Frame.getTagString(new byte[] {0,0,0,0}, 0, 3));
        assertEquals("A", ID3v2Frame.getTagString(new byte[] {(byte)'A',0,0,0}, 0, 3));
     }
+
+    @Test
+    public void testTIKA1589_noId3ReturnsDurationCorrectly() throws Exception {
+        Parser parser = new AutoDetectParser(); // Should auto-detect!
+        ContentHandler handler = new BodyContentHandler();
+        Metadata metadata = new Metadata();
+
+        InputStream stream = Mp3ParserTest.class.getResourceAsStream(
+                "/test-documents/testMP3noid3.mp3");
+        try {
+            parser.parse(stream, handler, metadata, new ParseContext());
+        } finally {
+            stream.close();
+        }
+
+        assertEquals("2455.510986328125", metadata.get(XMPDM.DURATION));
+    }
     
     /**
      * This test will do nothing, unless you've downloaded the

Added: tika/trunk/tika-parsers/src/test/resources/test-documents/testMP3noid3.mp3
URL: http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/resources/test-documents/testMP3noid3.mp3?rev=1670330&view=auto
==============================================================================
Binary file - no diff available.

Propchange: tika/trunk/tika-parsers/src/test/resources/test-documents/testMP3noid3.mp3
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream