Visual Studio 2013 — taglib, C ++, модификации тегов

Я фанат классической музыки. Моя музыкальная коллекция (mp3) была тщательно классифицирована с использованием «composer» (например, «Фамилия (DOB-DOD»)). Я часто получаю «Artist» от импорта музыки, копирования или какой-либо онлайн-базы данных. Потому что моя мобильная музыка плеер (Xbox) заказывает только по «исполнителю», хотелось бы «поменять»:
album_artist = исполнитель
исполнитель = композитор
и композитор просто остался бы таким же (и таким же, как артист). (Visual Studio 2013, W7, taglib1.9.1):

TagLib::PropertyMap tags = f.file()->properties();

unsigned int longest = 0;
for (TagLib::PropertyMap::ConstIterator i = tags.begin(); i != tags.end(); ++i) {
if (i->first.size() > longest) {
longest = i->first.size();
}
}

cout << "-- TAG (properties) --" << endl;

for (TagLib::PropertyMap::Iterator i = tags.begin(); i != tags.end(); ++i) {
if (i->first == "COMPOSER") {
composer = i->second;
composer_key = i->first;
}
if (i->first == "ARTIST") {
artist.append(i->second);
artist_key = i->first;
}
if (i->first == "ALBUMARTIST") {
album_artist.append(i->second);
album_artist_key = i->first;
}
cout << left << std::setw(longest) << i->first << " - " << '"' << i->second << '"' << endl;
}

if (!tags.replace(album_artist_key, artist))
cout << "album_artist_key is wrong";
else
cout << "replacing " << album_artist_key << " with " << artist << endl;

if (!tags.replace(artist_key, composer))
cout << "artist is wrong";
else
cout << "replacing " << artist_key << " with " << composer << endl;
tag->setArtist(composer.toString());
f.save();

ПРИМЕЧАНИЕ: этот код был изменен, начиная с кода tagreader.cpp, найденного в примерах библиотеки.
Это компилируется, но после выполнения вся информация тегов ID3 ​​исчезает (коррупция?), Как видно из проводника Windows. Итак, я провел эксперимент и прокомментировал все, что вносит какие-либо изменения в тег. По сути, просто откройте файл (FileRef) и выполните f.save (). Это само по себе приводит к исчезновению тегов.
Два вопроса (думаю, я понял это неправильно …)

  1. Любая причина, почему f.save может привести к повреждению метаданных?
  2. Правильна ли идея, которой я следую (tags.replace и f.save)?

2

Решение

Это не коррупция; Windows Explorer просто еще не может читать теги ID3v2.4, стандарт, который вышел 15 лет назад и является по умолчанию в TagLib. Однако TagLib также может писать теги ID3v2.3.

0

Другие решения


По вопросам рекламы [email protected]