Hi Urs,
(please refer ticket context to this thread post i've found while investigating for this issue https://sourceforge.net/p/kid3/discussion/241228/thread/deeec343e8/?limit=25#880b)
I've found this post relating to the Arranger/Performer tag. I am experiencing similar problem with setting up an ID3v2.3 Arranger tag in a WAV file.
I am currently using kid3 (in particular kid3-cli) to test ways to mass tagg WAV files with both RIFF and ID3v2.3 simultaneously with kid3-cli and I've found problems specifically with the Arranger tag in the WAV files. It seems if the arranger tag is set with a single entry and this entry is specified without the '|' character, upon saving the data is lost. If instead I add it with with a '|'in the end then the data is saved successfully. This problem doesn't happen with the performer tag though.
It seems there is at least some inconsistencies verified on how kid3 handles and sets data for the Arranger/Performer tag (being translated to the same ID2v2.3 frame) in WAV files.
To demonstrate this I will use your example exactly and other variations, but instead into a WAV file:
FAIL: Trying to set both Performer and Arranger simultaneously with a single entry:
$ kid3-cli -c "set Title Test" -c "set Performer 'Test Performer'" -c "set Arranger 'Test Arranger'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav $ kid3-cli -c get SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav File: WAV 96000 Hz 2 Channels 1:55 Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav Tag 2: ID3v2.3.0 Title Test Arranger
PASS: Trying to set both Performer and Arranger simultaneously with multiple entries:
$ kid3-cli -c "set Title Test" -c "set Performer 'Chorus Master|Ernst Dunshirn|Soprano Vocals|Anna Netrebko'" -c "set Arranger 'Orchestra|Boston Symphony Orchestra'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav $ kid3-cli -c get SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav File: WAV 96000 Hz 2 Channels 1:55 Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav Tag 2: ID3v2.3.0 Title Test Arranger Chorus Master|Ernst Dunshirn|Soprano Vocals|Anna Netrebko|Orchestra|Boston Symphony Orchestra
FAIL: Setting only Arranger with a single entry:
$ kid3-cli -c "set Title Test" -c "set Arranger 'Test Arranger'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav kid3-cli -c get SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav File: WAV 96000 Hz 2 Channels 1:55 Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav Tag 2: ID3v2.3.0 Title Test Arranger
PASS: Setting only Arranger with a single entry with an ending '|':
$ kid3-cli -c "set Title Test" -c "set Arranger 'Test Arranger|'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav $ kid3-cli -c get SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav File: WAV 96000 Hz 2 Channels 1:55 Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav Tag 2: ID3v2.3.0 Title Test Arranger Test Arranger
PASS: Setting only Perfomer with a single entry:
$ kid3-cli -c "set Title Test" -c "set Perfomer 'Test Perfomer'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav
$ kid3-cli -cget SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav
File: WAV 96000 Hz 2 Channels 1:55
Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav
Tag 2: ID3v2.3.0
Title Test
Perfomer Test Perfomer
FAIL: Setting only Perfomer with multiple entry and Arranger with single entry. Arranger input data is lost:
$ kid3-cli -c "set Title Test" -c "set Performer 'Chorus Master|Ernst Dunshirn|Soprano Vocals|Anna Netrebko'" -c "set Arranger 'Orchestra'" SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav $ kid3-cli -c get SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav File: WAV 96000 Hz 2 Channels 1:55 Name: SG-ACT0001_FV_MIXLA_STR_96K_24B_MSTRG.wav Tag 2: ID3v2.3.0 Title Test Arranger Chorus Master|Ernst Dunshirn|Soprano Vocals|Anna Netrebko
This issue is also experienced similarly with the kid3 GUI. I am using the following version:
kid3-cli 3.7.0 (c) 2018 Urs Fleisch
I hope this helps to pinpoint the issue. If you need my support to do any further testing let me know. I am glad to help.
Thank you,
Artur
Discussion: mp3 files - performer data lost empty arranger added
Thanks for the clarification. I was able to reproduce and fix the problem (in Git). The reason why I could not reproduce it with MP3 (in the discussion linked at the top of the bug report) was that I used ID3v2.4.0 in my test MP3 file, but the problem only occurs with ID3v2.3.0. TagLib originally only supported ID3v2.4.0 and internally it uses ID3v2.4.0 frames. In order to write ID3v2.3.0 frames, it downgrades some frames which are only available for ID3v2.4.0 to a corresponding ID3v2.3.0 frame. This is also done in this case, where TMCL (mapped to "Performer" in Kid3) and TIPL (mapped to "Arranger") are both converted to IPLS (mapped to "Arranger", that's why both "Performer" and "Arranger" end up as "Arranger" when using ID3v2.3.0 frames in Kid3). This conversion only works when the TMCL and TIPL frames contain a string list with at least two elements. Kid3 uses '|' as the separator for string lists, therefore adding such a pipe symbol at the end of the value results in a string list with a second empty element.
I have now fixed this by automatically adding a second empty element when such a frame is set with only a single element. Note however, that an IPLS frame with a single element is still invalid. The ID3 specification requires a list containing "involvement 1|involvee 1|involvement 2|involvee 2|..." for IPLS, TIPL and TMCL. Kid3 will mark such frame valued red in the GUI with a tooltip "Must be list of strings separated by '|'".
Hi Urs,
That's awesome that you figured out the issued! Thanks. :)
Just curious, although ID3 requires a list separated with '| how does ID3 defines if you have a only a single involvee set? Should it always be set with a '|' in the end (e.g. involvee 1|)
Also, what does the ID3 defines as involvement vs involvee ? Care to give an example?
Cheers,
Artur
As the standard requires a list with involvement, involvee pairs, also a single involvee will be a list with two elements (starting with the involvment). The ID3 standard just mentions in section 4.2.2. "instruments" for TMCL and "functions, like producer" for TIPL.
I have put a development snapshot kid3-git20190303 into the development folder, which includes the arranger fix.
Fixed in version 3.7.1.