From a615b3fe4b4db04e9d2289f999aae53db7be8ebc Mon Sep 17 00:00:00 2001 From: trialuser02 Date: Thu, 17 Oct 2013 12:09:44 +0000 Subject: rgscan: added id3v2 support git-svn-id: http://svn.code.sf.net/p/qmmp-dev/code/trunk/qmmp@3809 90c681e8-e032-0410-971d-27865f9a5e38 --- src/plugins/General/rgscan/rgscandialog.cpp | 42 ++++++++++++++++++++++++++++- src/plugins/General/rgscan/rgscandialog.h | 5 ++++ src/plugins/Input/mad/replaygainreader.cpp | 2 +- 3 files changed, 47 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/plugins/General/rgscan/rgscandialog.cpp b/src/plugins/General/rgscan/rgscandialog.cpp index 1652236ac..75d9aa0e9 100644 --- a/src/plugins/General/rgscan/rgscandialog.cpp +++ b/src/plugins/General/rgscan/rgscandialog.cpp @@ -33,6 +33,8 @@ #include #include #include +#include +#include #include "rgscanner.h" #include "gain_analysis.h" #include "rgscandialog.h" @@ -283,6 +285,43 @@ void RGScanDialog::writeAPETag(TagLib::APE::Tag *tag, ReplayGainInfoItem *item) } } +void RGScanDialog::writeID3v2Tag(TagLib::ID3v2::Tag *tag, ReplayGainInfoItem *item) +{ + tag->removeFrames("TXXX"); + if(m_ui.trackCheckBox->isChecked()) + { + TagLib::ID3v2::UserTextIdentificationFrame *frame = new TagLib::ID3v2::UserTextIdentificationFrame(); + TagLib::StringList fields; + fields.append("REPLAYGAIN_TRACK_GAIN"); + fields.append(gainToString(item->info[Qmmp::REPLAYGAIN_TRACK_GAIN])); + frame->setText(fields); + tag->addFrame(frame); + + fields.clear(); + frame = new TagLib::ID3v2::UserTextIdentificationFrame(); + fields.append("REPLAYGAIN_TRACK_PEAK"); + fields.append(peakToString(item->info[Qmmp::REPLAYGAIN_TRACK_PEAK])); + frame->setText(fields); + tag->addFrame(frame); + } + if(m_ui.albumCheckBox->isChecked()) + { + TagLib::ID3v2::UserTextIdentificationFrame *frame = new TagLib::ID3v2::UserTextIdentificationFrame(); + TagLib::StringList fields; + fields.append("REPLAYGAIN_ALBUM_GAIN"); + fields.append(gainToString(item->info[Qmmp::REPLAYGAIN_ALBUM_GAIN])); + frame->setText(fields); + tag->addFrame(frame); + + fields.clear(); + frame = new TagLib::ID3v2::UserTextIdentificationFrame(); + fields.append("REPLAYGAIN_ALBUM_PEAK"); + fields.append(peakToString(item->info[Qmmp::REPLAYGAIN_ALBUM_PEAK])); + frame->setText(fields); + tag->addFrame(frame); + } +} + void RGScanDialog::writeVorbisComment(TagLib::Ogg::XiphComment *tag, ReplayGainInfoItem *item) { if(m_ui.trackCheckBox->isChecked()) @@ -312,7 +351,8 @@ void RGScanDialog::on_writeButton_clicked() { TagLib::MPEG::File file(qPrintable(item->url)); writeAPETag(file.APETag(true), item); - file.save(TagLib::MPEG::File::APE, false); + writeID3v2Tag(file.ID3v2Tag(true), item); + file.save(TagLib::MPEG::File::APE | TagLib::MPEG::File::ID3v2, false); } else if(ext == "flac") //flac { diff --git a/src/plugins/General/rgscan/rgscandialog.h b/src/plugins/General/rgscan/rgscandialog.h index d196959cc..fe7132107 100644 --- a/src/plugins/General/rgscan/rgscandialog.h +++ b/src/plugins/General/rgscan/rgscandialog.h @@ -35,6 +35,10 @@ struct ReplayGainInfoItem; namespace TagLib { + namespace ID3v2 + { + class Tag; + } namespace APE { class Tag; @@ -68,6 +72,7 @@ private: TagLib::String gainToString(double value); TagLib::String peakToString(double value); void writeAPETag(TagLib::APE::Tag *tag, ReplayGainInfoItem *item); + void writeID3v2Tag(TagLib::ID3v2::Tag *tag, ReplayGainInfoItem *item); void writeVorbisComment(TagLib::Ogg::XiphComment *tag, ReplayGainInfoItem *item); Ui::RGScanDialog m_ui; QList m_scanners; diff --git a/src/plugins/Input/mad/replaygainreader.cpp b/src/plugins/Input/mad/replaygainreader.cpp index c4f78ef70..569ad5fea 100644 --- a/src/plugins/Input/mad/replaygainreader.cpp +++ b/src/plugins/Input/mad/replaygainreader.cpp @@ -43,7 +43,7 @@ QMap ReplayGainReader::replayGainInfo() const void ReplayGainReader::readID3v2(TagLib::ID3v2::Tag *tag) { TagLib::ID3v2::UserTextIdentificationFrame* frame = 0; - TagLib::ID3v2::FrameList frames = tag->frameListMap()["TXXX"]; + TagLib::ID3v2::FrameList frames = tag->frameList("TXXX"); for(TagLib::ID3v2::FrameList::Iterator it = frames.begin(); it != frames.end(); ++it) { frame = dynamic_cast(*it); -- cgit v1.2.3-13-gbd6f