Я пытаюсь скопировать все теги ID3v2 из одного файла в другой. Но мой код не работает (теги остаются неизменными), и я не знаю почему.
ID3_Tag sFile, tFile;
sFile.Link("source.mp3", ID3TT_ID3V2);
tFile.Link("target.mp3");
tFile.Strip();
ID3_Tag::Iterator* sFrItr = sFile.CreateIterator();
ID3_Frame* sFrame = NULL;
while (NULL != (sFrame = sFrItr->GetNext()))
{
tFile.AddFrame(sFrame);
}
delete sFrItr;
tFile.Update();
Этот код в основном основан на Пример API id3lib. Раньше у меня не было ничего общего с id3, поэтому я просто не понимаю, как работают фреймы и поля.
Проблема в том, что когда Update()
срабатывает, ID3_Frame
добавлено в tFile
больше не существует Правильный способ заключается в создании указателей на копии ID3_Frame
и прикрепить их к ID3_Tag
:
while (NULL != (sFrame = sFrItr->GetNext()))
{
tFile.AttachFrame(new ID3_Frame(*sFrame));
}
AttachFrame()
заботится о памяти и впоследствии удаляет сами данные.
Других решений пока нет …