#887405 eyed3: setting more than two TCON frames fails

#887405#5
Date:
2018-01-16 00:21:36 UTC
From:
To:
Hi maintainer,

According to eyeD3 output setting multiple TCON frames seems to succeed:
…
Setting TPOS text frame to '1/1'
Setting TRCK text frame to '1/13'
Setting TCON text frame to 'Rock'
Setting TCON text frame to 'Dance'
Setting TCON text frame to 'Ballad'
Setting TDRC text frame to '2016'
…

Nevertheless, when looking with other tools one of them is gone, just
checked with hexdump and you can see that, surprisingly, the frame is
not saved to file and only two of the above three are present:
…
00015200  54 43 4f 4e 00 00 00 07  00 00 03 42 61 6c 6c 61  |TCON.......Balla|
00015210  64 54 43 4f 4e 00 00 00  05 00 00 03 52 6f 63 6b  |dTCON.......Rock|
00015220  54 44 52 43 00 00 00 05  00 00 00 32 30 31 36 54  |TDRC.......2016T|
00015230  44 52 4c 00 00 00 05 00  00 00 32 30 31 36 54 49  |DRL.......2016TI|
…

Trying again with a different set of TCON values on the same file:
…
Setting TCON text frame to 'Pop'
Setting TCON text frame to 'Eurodance'
Setting TCON text frame to 'Classic'
…

Gives even worse results:
…
00015200  54 43 4f 4e 00 00 00 08  00 00 03 43 6c 61 73 73  |TCON.......Class|
00015210  69 63 54 43 4f 4e 00 00  00 05 00 00 03 52 6f 63  |icTCON.......Roc|
00015220  6b 54 44 52 43 00 00 00  05 00 00 00 32 30 31 36  |kTDRC.......2016|
00015230  54 44 52 4c 00 00 00 05  00 00 00 32 30 31 36 54  |TDRL.......2016T|
…

Looks like the writting code it's limited to two TCON fields, but also
gives no warning about the ignored/lost parameter data.

Probably an upstream bug and nothing to do with debian packaging, so feel
free to forward this upstream.

thanks in advance and best regards,

#887405#10
Date:
2018-01-18 23:15:10 UTC
From:
To:
Hi and thank you for reporting.

In a clean file eyeD3 just sets the last TCON:

$ eyeD3 --text-frame=TCON:Rock --text-frame=TCON:Ballad \
     --text-frame=TCON:Pop /tmp/1.mp3
…
Setting b'TCON' text frame to 'Rock'
Setting b'TCON' text frame to 'Ballad'
Setting b'TCON' text frame to 'Pop'
…

1.mp3 will have only `Pop`, checked both with hexdump and eyed3 himself.
(the logging is misleading)

Looking at your output I guess eyeD3 overwrites only first met TCON frame
(with the last new value requested) and leave the second TCON frame alone.

If you can confirm this I'll retitle and change priority accordingly.


Regards,

 Gaetano

#887405#15
Date:
2018-01-18 23:15:10 UTC
From:
To:
Hi and thank you for reporting.

In a clean file eyeD3 just sets the last TCON:

$ eyeD3 --text-frame=TCON:Rock --text-frame=TCON:Ballad \
     --text-frame=TCON:Pop /tmp/1.mp3
…
Setting b'TCON' text frame to 'Rock'
Setting b'TCON' text frame to 'Ballad'
Setting b'TCON' text frame to 'Pop'
…

1.mp3 will have only `Pop`, checked both with hexdump and eyed3 himself.
(the logging is misleading)

Looking at your output I guess eyeD3 overwrites only first met TCON frame
(with the last new value requested) and leave the second TCON frame alone.

If you can confirm this I'll retitle and change priority accordingly.


Regards,

 Gaetano

#887405#20
Date:
2018-01-22 09:45:32 UTC
From:
To:
control: tags -1 upstream

Hi Gaetano,

Thanks for your quick response!
[…]

I think your analysis is correct and I've tagged this upstream.

I've also noticed that the "standard" for multiple values on text frames
(on id3 v2.4) is to set several nul-separated values in a single frame.
Since specifiying a nul char in bash command line is probably impossible
I guess some support for this has to be written by upstream, either
accumulating the option values passed in command line or supporting some
user-friendly separator for multiple values in a single option.

I've not checked but maybe this bug is affecting more (all?) text frames
and not only the TCON frame.

best regards,