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 2021/03/14 20:21:42 UTC

[tika] 02/02: TIKA-3318 MP3 parser should output the xmpDM:duration metadata as seconds not milliseconds

This is an automated email from the ASF dual-hosted git repository.

nick pushed a commit to branch branch_1x
in repository https://gitbox.apache.org/repos/asf/tika.git

commit 21b3cf8b5a209ab6cf0176d8bc55e640fdc8c351
Author: Nick Burch <ni...@gagravarr.org>
AuthorDate: Sun Mar 14 20:20:14 2021 +0000

    TIKA-3318 MP3 parser should output the xmpDM:duration metadata as seconds not milliseconds
---
 .../src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java | 13 ++++++++-----
 .../test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java |  6 +++---
 2 files changed, 11 insertions(+), 8 deletions(-)

diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java b/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
index 52dad7c..c14b300 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/mp3/Mp3Parser.java
@@ -69,10 +69,10 @@ public class Mp3Parser extends AbstractParser {
         // Create handlers for the various kinds of ID3 tags
         ID3TagsAndAudio audioAndTags = getAllTagHandlers(stream, handler);
 
-        //process as much metadata as possible before
-        //writing to xhtml
+        // Before we start on the XHTML output, process and store
+        //  as much metadata as possible
         if (audioAndTags.duration > 0) {
-            metadata.set(XMPDM.DURATION, audioAndTags.duration);
+           metadata.set(XMPDM.DURATION, audioAndTags.durationSeconds());
         }
 
         if (audioAndTags.audio != null) {
@@ -151,7 +151,7 @@ public class Mp3Parser extends AbstractParser {
             xhtml.element("p", tag.getYear());
             xhtml.element("p", tag.getGenre());
         }
-        xhtml.element("p", String.valueOf(audioAndTags.duration));
+        xhtml.element("p", String.valueOf(audioAndTags.durationSeconds()));
         for (String comment : comments) {
             xhtml.element("p", comment);
         }
@@ -250,7 +250,10 @@ public class Mp3Parser extends AbstractParser {
         private ID3Tags[] tags;
         private AudioFrame audio;
         private LyricsHandler lyrics;
-        private float duration;
+        private float duration; // Milliseconds
+        private float durationSeconds() {
+           return duration / 1000;
+        }
     }
 
 }
diff --git a/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java b/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
index e670809..01fa4f7 100644
--- a/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
+++ b/tika-parsers/src/test/java/org/apache/tika/parser/mp3/Mp3ParserTest.java
@@ -39,7 +39,7 @@ public class Mp3ParserTest extends TikaTest {
      */
     private static void checkDuration(Metadata metadata, int expected) {
         assertEquals("Wrong duration", expected,
-                Math.round(Float.valueOf(metadata.get(XMPDM.DURATION)) / 1000));
+                Math.round(Float.valueOf(metadata.get(XMPDM.DURATION))));
     }
 
     /**
@@ -126,7 +126,7 @@ public class Mp3ParserTest extends TikaTest {
         String content = getXML("testMP3id3v1.mp3").xml;
         assertContains("<meta name=\"xmpDM:audioSampleRate\" content=\"44100\"",
                 content);
-        assertContains("<meta name=\"xmpDM:duration\" content=\"2455",
+        assertContains("<meta name=\"xmpDM:duration\" content=\"2.455",
                 content);
         assertContains("meta name=\"xmpDM:audioChannelType\" content=\"Mono\"", content);
     }
@@ -306,7 +306,7 @@ public class Mp3ParserTest extends TikaTest {
 
     @Test
     public void testTIKA1589_noId3ReturnsDurationCorrectly() throws Exception {
-        assertEquals("2455.510986328125",
+        assertEquals("2.4555110931396484",
                 getXML("testMP3noid3.mp3").metadata.get(XMPDM.DURATION));
     }