<div dir="ltr"><div>I'm trying to figure out how to write multiple values to an ID3v2.4 tag.  ID3v2.4 spec is to have a single frame where all values are joined together with a null character.  (By contrast, ID3v2.3 uses a backslash instead of null.  XiphComment uses multiple frames instead of a single frame with a delimiting character.)  I couldn't find any code examples for ID3v2.4, so I tried two approaches which failed.</div>
<div><br></div><div>Approach 1:  add a new frame for each value</div><div>> // for each string {</div><div>> TagLib::ID3v2::TextIdentificationFrame *frame = new TagLib::ID3v2::TextIdentificationFrame(keyStr, TagLib::String::UTF8);</div>
<div>> id3v2->addFrame(frame);</div><div>> frame->setText(str);</div><div>> // } close for loop</div><div>Result 1:  incorrect - multiple frames instead of a single frame.</div><div><br></div><div>Approach 2:  manually separate the values with the null character</div>
<div>> TagLib::StringList values;</div><div>> // { for each string, append the string to "values" }</div><div>
<div>> TagLib::ID3v2::TextIdentificationFrame *frame = new TagLib::ID3v2::TextIdentificationFrame(keyStr, TagLib::String::UTF8);</div><div>> id3v2->addFrame(frame);</div><div>> frame->setText(values.toString('\0'));</div>

 </div><div>Result 2: wrong and inconsistent behaviors:</div><div>- All values can be read by foobar2000</div><div>- The last value can't be read by Mp3tag, apparently because the text encoding size is double what Mp3tag would write with the same input</div>
<div>- All values except the first can't be read by TagLib when the file is opened again with code similar to <a href="https://gist.github.com/Horrendus/622816">https://gist.github.com/Horrendus/622816</a> .</div><div>
<br></div><div>I'm not sure if I'm using the null character correctly in Approach 2 given how many apps it breaks (although foobar2000 handles it).   I'm hoping there's an easy way to write multiple values to ID3v2.4 that I missed.  What is the correct way to do this?</div>
</div>