diff options
| author | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-17 11:03:03 +0000 |
|---|---|---|
| committer | trialuser02 <trialuser02@90c681e8-e032-0410-971d-27865f9a5e38> | 2013-10-17 11:03:03 +0000 |
| commit | 5a63f3d2cdc0f011239b9e6acf7178da70461a10 (patch) | |
| tree | 86a6499f22ca041ea944859ed77bb2b7eab44b26 /src/plugins | |
| parent | 3f249105c9cd0ced6d97d930f89f4135a352985b (diff) | |
| download | qmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.tar.gz qmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.tar.bz2 qmmp-5a63f3d2cdc0f011239b9e6acf7178da70461a10.zip | |
mad: added id3v2-based replaygain tags support
git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3806 90c681e8-e032-0410-971d-27865f9a5e38
Diffstat (limited to 'src/plugins')
| -rw-r--r-- | src/plugins/Input/mad/mpegmetadatamodel.cpp | 4 | ||||
| -rw-r--r-- | src/plugins/Input/mad/replaygainreader.cpp | 32 | ||||
| -rw-r--r-- | src/plugins/Input/mad/replaygainreader.h | 2 |
3 files changed, 32 insertions, 6 deletions
diff --git a/src/plugins/Input/mad/mpegmetadatamodel.cpp b/src/plugins/Input/mad/mpegmetadatamodel.cpp index c7a367fc8..0fb6d674a 100644 --- a/src/plugins/Input/mad/mpegmetadatamodel.cpp +++ b/src/plugins/Input/mad/mpegmetadatamodel.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -119,7 +119,7 @@ QPixmap MPEGMetaDataModel::cover() for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) { - TagLib::ID3v2::AttachedPictureFrame *frame = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it); + TagLib::ID3v2::AttachedPictureFrame *frame = dynamic_cast<TagLib::ID3v2::AttachedPictureFrame *>(*it); if(frame && frame->type() == TagLib::ID3v2::AttachedPictureFrame::FrontCover) { QPixmap cover; diff --git a/src/plugins/Input/mad/replaygainreader.cpp b/src/plugins/Input/mad/replaygainreader.cpp index 20a489a1d..c4f78ef70 100644 --- a/src/plugins/Input/mad/replaygainreader.cpp +++ b/src/plugins/Input/mad/replaygainreader.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Ilya Kotov * + * Copyright (C) 2009-2013 by Ilya Kotov * * forkotov02@hotmail.ru * * * * This program is free software; you can redistribute it and/or modify * @@ -24,12 +24,14 @@ #include <taglib/tag.h> #include <taglib/id3v1tag.h> #include <taglib/id3v2header.h> +#include <taglib/textidentificationframe.h> #include "replaygainreader.h" ReplayGainReader::ReplayGainReader(const QString &path) { - TagLib::MPEG::File fileRef(path.toLocal8Bit ().constData()); - if(fileRef.APETag()) + TagLib::MPEG::File fileRef(path.toLocal8Bit().constData()); + readID3v2(fileRef.ID3v2Tag()); + if(m_values.isEmpty() && fileRef.APETag()) readAPE(fileRef.APETag()); } @@ -38,10 +40,32 @@ QMap <Qmmp::ReplayGainKey, double> ReplayGainReader::replayGainInfo() const return m_values; } +void ReplayGainReader::readID3v2(TagLib::ID3v2::Tag *tag) +{ + TagLib::ID3v2::UserTextIdentificationFrame* frame = 0; + TagLib::ID3v2::FrameList frames = tag->frameListMap()["TXXX"]; + for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) + { + frame = dynamic_cast<TagLib::ID3v2::UserTextIdentificationFrame*>(*it); + if(frame && frame->fieldList().size() >= 2) + { + TagLib::String desc = frame->description().upper(); + if (desc == "REPLAYGAIN_TRACK_GAIN") + setValue(Qmmp::REPLAYGAIN_TRACK_GAIN, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_TRACK_PEAK") + setValue(Qmmp::REPLAYGAIN_TRACK_PEAK, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_ALBUM_GAIN") + setValue(Qmmp::REPLAYGAIN_ALBUM_GAIN, TStringToQString(frame->fieldList()[1])); + else if (desc == "REPLAYGAIN_ALBUM_PEAK") + setValue(Qmmp::REPLAYGAIN_ALBUM_PEAK, TStringToQString(frame->fieldList()[1])); + } + } +} + void ReplayGainReader::readAPE(TagLib::APE::Tag *tag) { TagLib::APE::ItemListMap items = tag->itemListMap(); - if (items.contains("REPLAYGAIN_TRACK_GAIN")) + if (items.contains("REPLAYGAIN_TRACK_GAIN")) setValue(Qmmp::REPLAYGAIN_TRACK_GAIN,TStringToQString(items["REPLAYGAIN_TRACK_GAIN"].values()[0])); if (items.contains("REPLAYGAIN_TRACK_PEAK")) setValue(Qmmp::REPLAYGAIN_TRACK_PEAK,TStringToQString(items["REPLAYGAIN_TRACK_PEAK"].values()[0])); diff --git a/src/plugins/Input/mad/replaygainreader.h b/src/plugins/Input/mad/replaygainreader.h index f97fc8980..513ccefe5 100644 --- a/src/plugins/Input/mad/replaygainreader.h +++ b/src/plugins/Input/mad/replaygainreader.h @@ -24,6 +24,7 @@ #include <QMap> #include <QString> #include <taglib/apetag.h> +#include <taglib/id3v2tag.h> #include <qmmp/qmmp.h> /** @@ -36,6 +37,7 @@ public: QMap <Qmmp::ReplayGainKey, double> replayGainInfo() const; private: + void readID3v2(TagLib::ID3v2::Tag *tag); void readAPE(TagLib::APE::Tag *tag); void setValue(Qmmp::ReplayGainKey key, QString value); QMap <Qmmp::ReplayGainKey, double> m_values; |
