Dominik Schmidt created TIKA-4779:
-------------------------------------

             Summary: Audio parsers do not expose total track count (trackCount)
                 Key: TIKA-4779
                 URL: https://issues.apache.org/jira/browse/TIKA-4779
             Project: Tika
          Issue Type: Improvement
            Reporter: Dominik Schmidt


Tika does not expose the "total number of tracks on the album" for audio files, 
even though all common audio container formats carry this information and the 
parsers partially already read it.

*Background*

Audio metadata is mapped onto the XMP Dynamic Media schema ({{{}XMPDM{}}}), 
which defines {{xmpDM:trackNumber}} but has no property for the total track 
count. Since XMPDM cannot be extended upstream, Tika never picked up the value 
- but the information is present in the files:
 * *MP4/M4A:* the {{trkn}} atom contains two integers, track number and total 
track count. {{TikaUserDataBox.processIList()}} reads *both* values but only 
sets the first one and silently discards the second ({{{}numB{}}} is read and 
never used):
{code:java}
} else if ("trkn".equals(fieldName)) {
    if (toRead == 8) {
        long numA = reader.getUInt32();
        long numB = reader.getUInt32();   // total track count — discarded
        metadata.set(XMPDM.TRACK_NUMBER, (int)numA);
    }
{code}
(tika-parser-audiovideo-module, 
{{{}org.apache.tika.parser.mp4.boxes.TikaUserDataBox{}}})

 * *MP3/ID3v2:* the {{TRCK}} frame commonly has the form {{{}"3/12"{}}}. All 
ID3 handlers 
({{{}ID3v22Handler{}}}/{{{}ID3v23Handler{}}}/{{{}ID3v24Handler{}}}) pass the 
raw string through, so the total ends up *embedded* in {{xmpDM:trackNumber}} as 
{{"3/12"}} — even though that property is declared {{{}externalInteger{}}}. The 
same applies to {{TPOS}} → {{xmpDM:discNumber}} (see {{{}Mp3ParserTest{}}}, 
which asserts {{"1/1"}} for discNumber). So for MP3 the value leaks through 
unstructured instead of being exposed as a proper field.

 * *OGG/FLAC:* the Vorbis comment {{TRACKTOTAL}} is not mapped at all 
({{{}OggAudioParser{}}} only sets {{{}XMPDM.TRACK_NUMBER{}}}).

*Proposal*
 # Introduce a property for the total track count. Since {{xmpDM}} has no such 
field, either a Tika-owned property (e.g. in a {{tika:}} namespace) or a 
documented non-standard extension.
 # Populate it in the three parsers: MP4 ({{{}numB{}}} from {{{}trkn{}}}), MP3 
(split {{TRCK}} on {{{}"/"{}}}), OGG/FLAC ({{{}TRACKTOTAL{}}}).
 # While at it, consider normalizing {{xmpDM:trackNumber}} / 
{{xmpDM:discNumber}} to the plain number so the values actually conform to 
their declared integer type (possibly keeping the raw value elsewhere for 
backwards compatibility).

The analogous question applies to the disc count ({{{}TPOS{}}} total, MP4 
{{disk}} atom second value).

Willing to work on this, just let me know, how you would like to have it 
solved. Especially the property name. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to