本文整理汇总了C++中taglib::id3v2::Tag::frameListMap方法的典型用法代码示例。如果您正苦于以下问题:C++ Tag::frameListMap方法的具体用法?C++ Tag::frameListMap怎么用?C++ Tag::frameListMap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类taglib::id3v2::Tag
的用法示例。
在下文中一共展示了Tag::frameListMap方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: QImage
/*!
* \brief Read the albumart image from the file
*
* \param filename The filename for which we want to find the albumart.
* \param type The type of image we want - front/back etc
* \returns A pointer to a QImage owned by the caller or nullptr if not found.
*/
QImage* MetaIOID3::getAlbumArt(const QString &filename, ImageType type)
{
QImage *picture = new QImage();
AttachedPictureFrame::Type apicType
= AttachedPictureFrame::FrontCover;
switch (type)
{
case IT_UNKNOWN :
apicType = AttachedPictureFrame::Other;
break;
case IT_FRONTCOVER :
apicType = AttachedPictureFrame::FrontCover;
break;
case IT_BACKCOVER :
apicType = AttachedPictureFrame::BackCover;
break;
case IT_CD :
apicType = AttachedPictureFrame::Media;
break;
case IT_INLAY :
apicType = AttachedPictureFrame::LeafletPage;
break;
case IT_ARTIST :
apicType = AttachedPictureFrame::Artist;
break;
default:
return picture;
}
if (OpenFile(filename))
{
TagLib::ID3v2::Tag *tag = GetID3v2Tag();
if (tag && !tag->frameListMap()["APIC"].isEmpty())
{
TagLib::ID3v2::FrameList apicframes = tag->frameListMap()["APIC"];
for(TagLib::ID3v2::FrameList::Iterator it = apicframes.begin();
it != apicframes.end(); ++it)
{
AttachedPictureFrame *frame =
static_cast<AttachedPictureFrame *>(*it);
if (frame && frame->type() == apicType)
{
picture->loadFromData((const uchar *)frame->picture().data(),
frame->picture().size());
return picture;
}
}
}
}
delete picture;
return nullptr;
}
示例2: extractMBIDFromFile
QString extractMBIDFromFile(TagLib::MPEG::File *file)
{
TagLib::ID3v2::Tag *tag = file->ID3v2Tag();
TagLib::ID3v2::FrameList ufid = tag->frameListMap()["UFID"];
if (!ufid.isEmpty()) {
for (TagLib::ID3v2::FrameList::Iterator i = ufid.begin(); i != ufid.end(); i++) {
TagLib::ID3v2::UniqueFileIdentifierFrame *frame = dynamic_cast<TagLib::ID3v2::UniqueFileIdentifierFrame *>(*i);
if (frame && frame->owner() == "http://musicbrainz.org") {
TagLib::ByteVector id = frame->identifier();
return QString::fromAscii(id.data(), id.size());
}
}
}
return QString();
}
示例3: MusicMetadata
/*!
* \copydoc MetaIO::read()
*/
MusicMetadata *MetaIOID3::read(const QString &filename)
{
if (!OpenFile(filename))
return nullptr;
TagLib::ID3v2::Tag *tag = GetID3v2Tag(true); // Create tag if none are found
// if there is no ID3v2 tag, try to read the ID3v1 tag and copy it to
// the ID3v2 tag structure
if (tag->isEmpty())
{
TagLib::ID3v1::Tag *tag_v1 = GetID3v1Tag();
if (!tag_v1)
return nullptr;
if (!tag_v1->isEmpty())
{
tag->setTitle(tag_v1->title());
tag->setArtist(tag_v1->artist());
tag->setAlbum(tag_v1->album());
tag->setTrack(tag_v1->track());
tag->setYear(tag_v1->year());
tag->setGenre(tag_v1->genre());
}
}
MusicMetadata *metadata = new MusicMetadata(filename);
ReadGenericMetadata(tag, metadata);
bool compilation = false;
// Compilation Artist (TPE4 Remix) or fallback to (TPE2 Band)
// N.B. The existance of a either frame is NOT an indication that this
// is a compilation, but if it is then one of them will probably hold
// the compilation artist.
TextIdentificationFrame *tpeframe = nullptr;
TagLib::ID3v2::FrameList tpelist = tag->frameListMap()["TPE4"];
if (tpelist.isEmpty() || tpelist.front()->toString().isEmpty())
tpelist = tag->frameListMap()["TPE2"];
if (!tpelist.isEmpty())
tpeframe = (TextIdentificationFrame *)tpelist.front();
if (tpeframe && !tpeframe->toString().isEmpty())
{
QString compilation_artist = TStringToQString(tpeframe->toString())
.trimmed();
metadata->setCompilationArtist(compilation_artist);
}
// Rating and playcount, stored in POPM frame
PopularimeterFrame *popm = findPOPM(tag, ""); // Global (all apps) tag
// If no 'global' tag exists, look for the MythTV specific one
if (!popm)
{
popm = findPOPM(tag, email);
}
// Fallback to using any POPM tag we can find
if (!popm)
{
if (!tag->frameListMap()["POPM"].isEmpty())
popm = dynamic_cast<PopularimeterFrame *>
(tag->frameListMap()["POPM"].front());
}
if (popm)
{
int rating = popm->rating();
rating = lroundf(static_cast<float>(rating) / 255.0f * 10.0f);
metadata->setRating(rating);
metadata->setPlaycount(popm->counter());
}
// Look for MusicBrainz Album+Artist ID in TXXX Frame
UserTextIdentificationFrame *musicbrainz = find(tag,
"MusicBrainz Album Artist Id");
if (musicbrainz)
{
// If the MusicBrainz ID is the special "Various Artists" ID
// then compilation is TRUE
if (!compilation && !musicbrainz->fieldList().isEmpty())
{
TagLib::StringList l = musicbrainz->fieldList();
for (TagLib::StringList::ConstIterator it = l.begin(); it != l.end(); it++)
{
QString ID = TStringToQString((*it));
if (ID == MYTH_MUSICBRAINZ_ALBUMARTIST_UUID)
{
compilation = true;
break;
}
}
//.........这里部分代码省略.........
示例4: if
/*!
* \copydoc MetaIO::write()
*/
bool MetaIOID3::write(const QString &filename, MusicMetadata* mdata)
{
if (filename.isEmpty())
return false;
if (!OpenFile(filename, true))
return false;
TagLib::ID3v2::Tag *tag = GetID3v2Tag();
if (!tag)
return false;
WriteGenericMetadata(tag, mdata);
// MythTV rating and playcount, stored in POPM frame
writeRating(tag, mdata->Rating());
writePlayCount(tag, mdata->PlayCount());
writeLastPlay(tag, mdata->LastPlay());
// MusicBrainz ID
UserTextIdentificationFrame *musicbrainz = nullptr;
musicbrainz = find(tag, "MusicBrainz Album Artist Id");
if (mdata->Compilation())
{
if (!musicbrainz)
{
musicbrainz = new UserTextIdentificationFrame(TagLib::String::UTF8);
tag->addFrame(musicbrainz);
musicbrainz->setDescription("MusicBrainz Album Artist Id");
}
musicbrainz->setText(MYTH_MUSICBRAINZ_ALBUMARTIST_UUID);
}
else if (musicbrainz)
tag->removeFrame(musicbrainz);
// Compilation Artist Frame (TPE4/2)
if (!mdata->CompilationArtist().isEmpty())
{
TextIdentificationFrame *tpe4frame = nullptr;
TagLib::ID3v2::FrameList tpelist = tag->frameListMap()["TPE4"];
if (!tpelist.isEmpty())
tpe4frame = (TextIdentificationFrame *)tpelist.front();
if (!tpe4frame)
{
tpe4frame = new TextIdentificationFrame(TagLib::ByteVector("TPE4"),
TagLib::String::UTF8);
tag->addFrame(tpe4frame);
}
tpe4frame->setText(QStringToTString(mdata->CompilationArtist()));
TextIdentificationFrame *tpe2frame = nullptr;
tpelist = tag->frameListMap()["TPE2"];
if (!tpelist.isEmpty())
tpe2frame = (TextIdentificationFrame *)tpelist.front();
if (!tpe2frame)
{
tpe2frame = new TextIdentificationFrame(TagLib::ByteVector("TPE2"),
TagLib::String::UTF8);
tag->addFrame(tpe2frame);
}
tpe2frame->setText(QStringToTString(mdata->CompilationArtist()));
}
if (!SaveFile())
return false;
return true;
}
示例5: if
/*!
* \copydoc MetaIO::write()
*/
bool MetaIOID3::write(Metadata* mdata)
{
TagLib::MPEG::File *mpegfile = OpenFile(mdata->Filename());
if (!mpegfile)
return false;
TagLib::ID3v2::Tag *tag = mpegfile->ID3v2Tag();
if (!tag)
{
delete mpegfile;
return false;
}
WriteGenericMetadata(tag, mdata);
// MythTV rating and playcount, stored in POPM frame
writeRating(tag, mdata->Rating());
writePlayCount(tag, mdata->PlayCount());
// MusicBrainz ID
UserTextIdentificationFrame *musicbrainz = NULL;
musicbrainz = find(tag, "MusicBrainz Album Artist Id");
if (mdata->Compilation())
{
if (!musicbrainz)
{
musicbrainz = new UserTextIdentificationFrame(TagLib::String::UTF8);
tag->addFrame(musicbrainz);
musicbrainz->setDescription("MusicBrainz Album Artist Id");
}
musicbrainz->setText(MYTH_MUSICBRAINZ_ALBUMARTIST_UUID);
}
else if (musicbrainz)
tag->removeFrame(musicbrainz);
// Compilation Artist Frame (TPE4/2)
if (!mdata->CompilationArtist().isEmpty())
{
TextIdentificationFrame *tpe4frame = NULL;
TagLib::ID3v2::FrameList tpelist = tag->frameListMap()["TPE4"];
if (!tpelist.isEmpty())
tpe4frame = (TextIdentificationFrame *)tpelist.front();
if (!tpe4frame)
{
tpe4frame = new TextIdentificationFrame(TagLib::ByteVector("TPE4"),
TagLib::String::UTF8);
tag->addFrame(tpe4frame);
}
tpe4frame->setText(QStringToTString(mdata->CompilationArtist()));
TextIdentificationFrame *tpe2frame = NULL;
tpelist = tag->frameListMap()["TPE2"];
if (!tpelist.isEmpty())
tpe2frame = (TextIdentificationFrame *)tpelist.front();
if (!tpe2frame)
{
tpe2frame = new TextIdentificationFrame(TagLib::ByteVector("TPE2"),
TagLib::String::UTF8);
tag->addFrame(tpe2frame);
}
tpe2frame->setText(QStringToTString(mdata->CompilationArtist()));
}
bool result = mpegfile->save();
delete mpegfile;
return result;
}
示例6: OpenFile
/*!
* \copydoc MetaIO::read()
*/
Metadata *MetaIOID3::read(QString filename)
{
TagLib::MPEG::File *mpegfile = OpenFile(filename);
if (!mpegfile)
return NULL;
TagLib::ID3v2::Tag *tag = mpegfile->ID3v2Tag();
if (!tag)
{
delete mpegfile;
return NULL;
}
// if there is no ID3v2 tag, try to read the ID3v1 tag and copy it to the ID3v2 tag structure
if (tag->isEmpty())
{
TagLib::ID3v1::Tag *tag_v1 = mpegfile->ID3v1Tag();
if (!tag_v1)
{
delete mpegfile;
return NULL;
}
if (!tag_v1->isEmpty())
{
tag->setTitle(tag_v1->title());
tag->setArtist(tag_v1->artist());
tag->setAlbum(tag_v1->album());
tag->setTrack(tag_v1->track());
tag->setYear(tag_v1->year());
tag->setGenre(tag_v1->genre());
}
}
Metadata *metadata = new Metadata(filename);
ReadGenericMetadata(tag, metadata);
bool compilation = false;
// Compilation Artist (TPE4 Remix) or fallback to (TPE2 Band)
// N.B. The existance of a either frame is NOT an indication that this
// is a compilation, but if it is then one of them will probably hold
// the compilation artist.
TextIdentificationFrame *tpeframe = NULL;
TagLib::ID3v2::FrameList tpelist = tag->frameListMap()["TPE4"];
if (tpelist.isEmpty() || tpelist.front()->toString().isEmpty())
tpelist = tag->frameListMap()["TPE2"];
if (!tpelist.isEmpty())
tpeframe = (TextIdentificationFrame *)tpelist.front();
if (tpeframe && !tpeframe->toString().isEmpty())
{
QString compilation_artist = TStringToQString(tpeframe->toString())
.trimmed();
metadata->setCompilationArtist(compilation_artist);
}
// MythTV rating and playcount, stored in POPM frame
PopularimeterFrame *popm = findPOPM(tag, email);
if (!popm)
{
if (!tag->frameListMap()["POPM"].isEmpty())
popm = dynamic_cast<PopularimeterFrame *>
(tag->frameListMap()["POPM"].front());
}
if (popm)
{
int rating = popm->rating();
rating = static_cast<int>(((static_cast<float>(rating)/255.0)
* 10.0) + 0.5);
metadata->setRating(rating);
metadata->setPlaycount(popm->counter());
}
// Look for MusicBrainz Album+Artist ID in TXXX Frame
UserTextIdentificationFrame *musicbrainz = find(tag,
"MusicBrainz Album Artist Id");
if (musicbrainz)
{
// If the MusicBrainz ID is the special "Various Artists" ID
// then compilation is TRUE
if (!compilation && !musicbrainz->fieldList().isEmpty())
compilation = (MYTH_MUSICBRAINZ_ALBUMARTIST_UUID
== TStringToQString(musicbrainz->fieldList().front()));
}
// TLEN - Ignored intentionally, some encoders write bad values
// e.g. Lame under certain circumstances will always write a length of
// 27 hours
//.........这里部分代码省略.........
示例7: Metadata
/*!
* \copydoc MetaIO::read()
*/
Metadata *MetaIOID3::read(const QString &filename)
{
if (!OpenFile(filename))
return NULL;
TagLib::ID3v2::Tag *tag = GetID3v2Tag(true); // Create tag if none are found
// if there is no ID3v2 tag, try to read the ID3v1 tag and copy it to
// the ID3v2 tag structure
if (tag->isEmpty())
{
TagLib::ID3v1::Tag *tag_v1 = GetID3v1Tag();
if (!tag_v1)
return NULL;
if (!tag_v1->isEmpty())
{
tag->setTitle(tag_v1->title());
tag->setArtist(tag_v1->artist());
tag->setAlbum(tag_v1->album());
tag->setTrack(tag_v1->track());
tag->setYear(tag_v1->year());
tag->setGenre(tag_v1->genre());
}
}
Metadata *metadata = new Metadata(filename);
ReadGenericMetadata(tag, metadata);
bool compilation = false;
// Compilation Artist (TPE4 Remix) or fallback to (TPE2 Band)
// N.B. The existance of a either frame is NOT an indication that this
// is a compilation, but if it is then one of them will probably hold
// the compilation artist.
TextIdentificationFrame *tpeframe = NULL;
TagLib::ID3v2::FrameList tpelist = tag->frameListMap()["TPE4"];
if (tpelist.isEmpty() || tpelist.front()->toString().isEmpty())
tpelist = tag->frameListMap()["TPE2"];
if (!tpelist.isEmpty())
tpeframe = (TextIdentificationFrame *)tpelist.front();
if (tpeframe && !tpeframe->toString().isEmpty())
{
QString compilation_artist = TStringToQString(tpeframe->toString())
.trimmed();
metadata->setCompilationArtist(compilation_artist);
}
// MythTV rating and playcount, stored in POPM frame
PopularimeterFrame *popm = findPOPM(tag, email);
if (!popm)
{
if (!tag->frameListMap()["POPM"].isEmpty())
popm = dynamic_cast<PopularimeterFrame *>
(tag->frameListMap()["POPM"].front());
}
if (popm)
{
int rating = popm->rating();
rating = static_cast<int>(((static_cast<float>(rating)/255.0)
* 10.0) + 0.5);
metadata->setRating(rating);
metadata->setPlaycount(popm->counter());
}
// Look for MusicBrainz Album+Artist ID in TXXX Frame
UserTextIdentificationFrame *musicbrainz = find(tag,
"MusicBrainz Album Artist Id");
if (musicbrainz)
{
// If the MusicBrainz ID is the special "Various Artists" ID
// then compilation is TRUE
if (!compilation && !musicbrainz->fieldList().isEmpty())
compilation = (MYTH_MUSICBRAINZ_ALBUMARTIST_UUID
== TStringToQString(musicbrainz->fieldList().front()));
}
// TLEN - Ignored intentionally, some encoders write bad values
// e.g. Lame under certain circumstances will always write a length of
// 27 hours
// Length
if (!tag->frameListMap()["TLEN"].isEmpty())
{
int length = tag->frameListMap()["TLEN"].front()->toString().toInt();
LOG(VB_FILE, LOG_DEBUG,
QString("MetaIOID3::read: Length for '%1' from tag is '%2'\n").arg(filename).arg(length));
}
metadata->setCompilation(compilation);
//.........这里部分代码省略.........