Как изменить поле «Исполнитель альбома» файла MP3 с библиотекой TagLib? Есть ли что-то подобное:taglib: как отредактировать Album Artist?
f.tag()->setArtist("blabla");
?
Как изменить поле «Исполнитель альбома» файла MP3 с библиотекой TagLib? Есть ли что-то подобное:taglib: как отредактировать Album Artist?
f.tag()->setArtist("blabla");
?
ID3v2 фактически не поддерживает поле под названием «художник альбома». ITunes использует кадр TPE2, который, как предполагается,:
TPE2
«Band/Оркестр/Аккомпанемент» кадра используется для получения дополнительной информации о исполнителях в записи.
Полный список фреймов см. http://id3.org/id3v2.3.0#Declared_ID3v2_frames.
Чтобы написать, что с TagLib, это будет делать трюк:
#include <mpegfile.h>
#include <id3v2tag.h>
#include <textidentificationframe.h>
int main()
{
TagLib::MPEG::File file("foo.mp3");
TagLib::ByteVector handle = "TPE2";
TagLib::String value = "bar";
TagLib::ID3v2::Tag *tag = file.ID3v2Tag(true);
if(!tag->frameList(handle).isEmpty())
{
tag->frameList(handle).front()->setText(value);
}
else
{
TagLib::ID3v2::TextIdentificationFrame *frame =
new TagLib::ID3v2::TextIdentificationFrame(handle, TagLib::String::UTF8);
tag->addFrame(frame);
frame->setText(value);
}
file.save();
return 0;
}
Если вы просто хотите, чтобы удалить кадры, вы можете просто сделать:
TagLib::MPEG::File file("foo.mp3");
TagLib::ID3v2::Tag *tag = file.ID3v2Tag();
if(tag)
{
tag->removeFrames("TPE2");
file.save();
}
Большое спасибо. Фактически, я просто хотел удалить поле «Исполнитель альбомов». (извините, мой вопрос не был точным). Есть ли более короткий способ удалить этот тег «Исполнитель альбома»? Лучше ли: a) удалить поле или b) 'setText (" ")'? – Basj
'removeFrames', похоже, не работает с' TagLib :: Tag': http://taglib.github.io/api/classTagLib_1_1Tag.html – Basj
Вам нужно использовать 'TagLib :: ID3v2 :: Tag', как это было в моем примере: http://taglib.github.io/api/classTagLib_1_1ID3v2_1_1Tag.html Кадры в этом случае относятся к тегам ID3v2; они не существуют в базовом классе TagLib :: Tag, так как этот класс используется для форматов * all * тегов. – scotchi
Я не понимаю разницы между TagLib :: FileRef и TagLib :: File. Если я использую TagLib :: FileRef f ("foo.mp3") ;, я не могу использовать f.tag(). RemoveFrames. Если я использую TagLib :: MPEG :: File f ("foo.mp3") ;, я должен иметь возможность использовать f.ID3v2Tag() -> removeFrames. В чем разница между TagLib :: FileRef и TagLib :: File? – Basj
'FileRef' - это просто класс удобства, который обрабатывает экземпляр соответствующего подкласса' TagLib :: File' для формата файла, т. Е. Он будет работать, будь вы бросаете в него и Ogg, FLAC или MP3-файл. Однако нет никакого стандарта для «Album Artist», поэтому вам нужно отказаться от менее общей абстракции, в которую входит «MPEG :: File». – scotchi