aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/General/rgscan/rgscandialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/General/rgscan/rgscandialog.cpp')
-rw-r--r--src/plugins/General/rgscan/rgscandialog.cpp45
1 files changed, 42 insertions, 3 deletions
diff --git a/src/plugins/General/rgscan/rgscandialog.cpp b/src/plugins/General/rgscan/rgscandialog.cpp
index 03be8abae..c925611e3 100644
--- a/src/plugins/General/rgscan/rgscandialog.cpp
+++ b/src/plugins/General/rgscan/rgscandialog.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- * Copyright (C) 2013-2015 by Ilya Kotov *
+ * Copyright (C) 2013-2016 by Ilya Kotov *
* forkotov02@hotmail.ru *
* *
* This program is free software; you can redistribute it and/or modify *
@@ -35,6 +35,7 @@
#include <taglib/wavpackfile.h>
#include <taglib/id3v2tag.h>
#include <taglib/textidentificationframe.h>
+#include <taglib/mp4file.h>
#include "rgscanner.h"
#include "gain_analysis.h"
#include "rgscandialog.h"
@@ -65,13 +66,18 @@ RGScanDialog::RGScanDialog(QList <PlayListTrack *> tracks, QWidget *parent) : Q
//skip duplicates
if(paths.contains(track->url()))
continue;
+ //skip unsupported files
+ if(!MetaDataManager::instance()->supports(track->url()))
+ continue;
QString ext = track->url().section(".", -1).toLower();
- if(ext == "mp3" || //mpeg 1 layer 3
+
+ if((ext == "mp3") || //mpeg 1 layer 3
ext == "flac" || //native flac
ext == "oga" || //ogg flac
ext == "ogg" || //ogg vorbis
- ext == "wv") //wavpack
+ ext == "wv" || //wavpack
+ ext == "m4a") //aac (mp4 container)
{
paths.append(track->url());
QString name = formatter.format(track);
@@ -288,6 +294,16 @@ TagLib::String RGScanDialog::peakToString(double value)
return QStringToTString_qt4(QString("%1").arg(value, 0, 'f', 6));
}
+TagLib::StringList RGScanDialog::gainToStringList(double value)
+{
+ return TagLib::StringList (gainToString(value));
+}
+
+TagLib::StringList RGScanDialog::peakToStringList(double value)
+{
+ return TagLib::StringList (peakToString(value));
+}
+
void RGScanDialog::writeAPETag(TagLib::APE::Tag *tag, ReplayGainInfoItem *item)
{
if(m_ui.trackCheckBox->isChecked())
@@ -353,6 +369,24 @@ void RGScanDialog::writeVorbisComment(TagLib::Ogg::XiphComment *tag, ReplayGainI
}
}
+void RGScanDialog::writeMP4Tag(TagLib::MP4::Tag *tag, ReplayGainInfoItem *item)
+{
+ if(m_ui.trackCheckBox->isChecked())
+ {
+ tag->setItem("----:com.apple.iTunes:replaygain_track_gain",
+ gainToStringList(item->info[Qmmp::REPLAYGAIN_TRACK_GAIN]));
+ tag->setItem("----:com.apple.iTunes:replaygain_track_peak",
+ gainToStringList(item->info[Qmmp::REPLAYGAIN_TRACK_PEAK]));
+ }
+ if(m_ui.albumCheckBox->isChecked())
+ {
+ tag->setItem("----:com.apple.iTunes:replaygain_album_gain",
+ gainToStringList(item->info[Qmmp::REPLAYGAIN_ALBUM_GAIN]));
+ tag->setItem("----:com.apple.iTunes:replaygain_album_peak",
+ gainToStringList(item->info[Qmmp::REPLAYGAIN_ALBUM_PEAK]));
+ }
+}
+
void RGScanDialog::on_writeButton_clicked()
{
if(m_replayGainItemList.isEmpty())
@@ -395,5 +429,10 @@ void RGScanDialog::on_writeButton_clicked()
writeAPETag(file.APETag(true), item);
file.save();
}
+ else if(ext == "m4a")
+ {
+ TagLib::MP4::File file(qPrintable(item->url));
+ writeMP4Tag(file.tag(), item);
+ }
}
}