Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 30 additions & 3 deletions src/library/dlgtrackinfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ void DlgTrackInfo::init() {
m_propertyWidgets.insert("key", txtKey);
m_propertyWidgets.insert("grouping", txtGrouping);
m_propertyWidgets.insert("comment", txtComment);
m_propertyWidgets.insert("replaygain", txtReplayGain);

coverLayout->setAlignment(Qt::AlignRight | Qt::AlignTop);
coverLayout->setSpacing(0);
Expand Down Expand Up @@ -245,6 +246,31 @@ void DlgTrackInfo::init() {
m_trackRecord.refMetadata().refTrackInfo().setTrackNumber(
txtTrackNumber->text());
});
connect(txtReplayGain,
&QLineEdit::editingFinished,
this,
[this]() {
const QString text = txtReplayGain->text().trimmed();
txtReplayGain->setText(text);
if (text.isEmpty()) {
return;
}
mixxx::ReplayGain replayGain =
m_trackRecord.getMetadata().getTrackInfo().getReplayGain();
if (text == mixxx::ReplayGain::ratioToString(replayGain.getRatio())) {
return;
}
bool valid = false;
const double ratio = mixxx::ReplayGain::ratioFromString(text, &valid);
if (valid) {
replayGain.setRatio(ratio);
m_trackRecord.refMetadata().refTrackInfo().setReplayGain(replayGain);
} else {
// Restore the current value on invalid input
txtReplayGain->setText(
mixxx::ReplayGain::ratioToString(replayGain.getRatio()));
}
});

// Import and file browser buttons
connect(btnImportMetadataFromFile,
Expand Down Expand Up @@ -430,6 +456,10 @@ void DlgTrackInfo::updateTrackMetadataFields() {
m_trackRecord.getMetadata().getTrackInfo().getBpmText());
displayKeyText();

txtReplayGain->setText(
mixxx::ReplayGain::ratioToString(
m_trackRecord.getMetadata().getTrackInfo().getReplayGain().getRatio()));

// Non-editable fields
txtDuration->setText(
m_trackRecord.getMetadata().getDurationText(mixxx::Duration::Precision::SECONDS));
Expand All @@ -439,9 +469,6 @@ void DlgTrackInfo::updateTrackMetadataFields() {
} else {
txtBitrate->setText(bitrate + QChar(' ') + mixxx::audio::Bitrate::unit());
}
txtReplayGain->setText(
mixxx::ReplayGain::ratioToString(
m_trackRecord.getMetadata().getTrackInfo().getReplayGain().getRatio()));

auto samplerate = m_trackRecord.getMetadata().getStreamInfo().getSignalInfo().getSampleRate();
if (samplerate.isValid()) {
Expand Down
16 changes: 4 additions & 12 deletions src/library/dlgtrackinfo.ui
Original file line number Diff line number Diff line change
Expand Up @@ -571,18 +571,9 @@
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="txtReplayGain">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string/>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
<widget class="QLineEdit" name="txtReplayGain">
<property name="toolTip">
<string>ReplayGain value in dB (e.g. -6.0)</string>
</property>
</widget>
</item>
Expand Down Expand Up @@ -1062,6 +1053,7 @@ Often results in higher quality beatgrids, but will not do well on tracks that h
<tabstop>txtYear</tabstop>
<tabstop>txtKey</tabstop>
<tabstop>txtTrackNumber</tabstop>
<tabstop>txtReplayGain</tabstop>
<tabstop>btnColorPicker</tabstop>
<tabstop>btnImportMetadataFromMusicBrainz</tabstop>
<tabstop>btnImportMetadataFromFile</tabstop>
Expand Down
66 changes: 66 additions & 0 deletions src/library/dlgtrackinfomulti.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
m_propertyWidgets.insert("key", txtKey);
m_propertyWidgets.insert("grouping", txtGrouping);
m_propertyWidgets.insert("comment", txtComment);
m_propertyWidgets.insert("replaygain", txtReplayGain);

// QDialog buttons
connect(btnApply,
Expand Down Expand Up @@ -167,6 +168,22 @@
this,
&DlgTrackInfoMulti::slotImportMetadataFromFiles);

connect(txtReplayGain,
&QLineEdit::editingFinished,
this,
[this]() {
const QString text = txtReplayGain->text().trimmed();
txtReplayGain->setText(text);
if (text.isEmpty()) {
return;
}
bool valid = false;
mixxx::ReplayGain::ratioFromString(text, &valid);
if (!valid) {
txtReplayGain->clear();
}
});

connect(btnOpenFileBrowser,
&QPushButton::clicked,
this,
Expand Down Expand Up @@ -422,6 +439,7 @@
QSet<double> durations;
QSet<uint32_t> samplerates;
QSet<QString> filetypes;
QSet<double> replaygainRatios;

for (const auto& rec : std::as_const(m_trackRecords)) {
titles.insert(rec.getMetadata().getTrackInfo().getTitle());
Expand Down Expand Up @@ -452,6 +470,40 @@
samplerates.insert(samplerate.isValid() ? samplerate.value() : 0);

filetypes.insert(rec.getFileType());

const double ratio = rec.getMetadata().getTrackInfo().getReplayGain().getRatio();
if (mixxx::ReplayGain::isValidRatio(ratio)) {
replaygainRatios.insert(ratio);
}
}

// Leave the ReplayGain edit empty by default; show min/avg/max as info
txtReplayGain->clear();
txtReplayGain->setProperty(kOrigValProp, QString());
if (!replaygainRatios.isEmpty()) {
QList<double> rgList = replaygainRatios.values();
std::sort(rgList.begin(), rgList.end());
const double minRatio = rgList.first();
const double maxRatio = rgList.last();
double sumRatio = 0.0;
for (double r : rgList) {

Check failure on line 489 in src/library/dlgtrackinfomulti.cpp

View workflow job for this annotation

GitHub Actions / checks / clazy

c++11 range-loop might detach Qt container (QList) [-Wclazy-range-loop-detach]
sumRatio += r;
}
const double avgRatio = sumRatio / rgList.size();
const int total = m_trackRecords.size();
const int withRg = rgList.size();
QString info = QStringLiteral("min: %1 avg: %2 max: %3")
.arg(mixxx::ReplayGain::ratioToString(minRatio),
mixxx::ReplayGain::ratioToString(avgRatio),
mixxx::ReplayGain::ratioToString(maxRatio));
if (withRg < total) {
info += QStringLiteral(" (%1/%2 tracks have ReplayGain)")
.arg(withRg)
.arg(total);
}
lblReplayGainInfo->setText(info);
} else {
lblReplayGainInfo->setText(tr("No ReplayGain data for selected tracks."));
}

addValuesToComboBox(txtTitle, titles);
Expand Down Expand Up @@ -675,6 +727,9 @@
const QString year = validEditText(txtYear);
const QString key = validEditText(txtKey);
const QString num = validEditText(txtTrackNumber);
// If ReplayGain field is non-empty, apply that value to all tracks.
// If empty, do nothing.
const QString replaygainText = txtReplayGain->text().trimmed();
// Check if the Comment has been changed.
// (same as in validEditText(), just for the QPlainTextEdit)
QString comment;
Expand Down Expand Up @@ -719,6 +774,17 @@
if (!num.isNull()) {
rec.refMetadata().refTrackInfo().setTrackNumber(num);
}
if (!replaygainText.isEmpty()) {
bool valid = false;
const double ratio = mixxx::ReplayGain::ratioFromString(
replaygainText, &valid);
if (valid) {
mixxx::ReplayGain replayGain =
rec.getMetadata().getTrackInfo().getReplayGain();
replayGain.setRatio(ratio);
rec.refMetadata().refTrackInfo().setReplayGain(replayGain);
}
}
if (!comment.isNull()) {
rec.refMetadata().refTrackInfo().setComment(comment);
}
Expand Down
40 changes: 35 additions & 5 deletions src/library/dlgtrackinfomulti.ui
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QGridLayout" name="properties_layout" rowstretch="0,0,0,0,0,0" columnstretch="0,1,0,1">
<layout class="QGridLayout" name="properties_layout" rowstretch="0,0,0,0,0,0,0" columnstretch="0,1,0,1">

<item row="0" column="0">
<widget class="QLabel" name="lblDuration">
Expand Down Expand Up @@ -560,6 +560,35 @@
</widget>
</item>

<item row="2" column="0">
<widget class="QLabel" name="lblReplayGain">
<property name="text">
<string>ReplayGain:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="txtReplayGain">
<property name="toolTip">
<string>Enter a ReplayGain value in dB (e.g. -6.0 dB) to apply to all selected tracks. Leave empty to make no change.</string>
</property>
<property name="placeholderText">
<string>Enter dB value to apply to all…</string>
</property>
</widget>
</item>

<item row="3" column="0" colspan="4">
<widget class="QLabel" name="lblReplayGainInfo">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>

<item row="2" column="2">
<widget class="QLabel" name="lblSamplerate">
<property name="text">
Expand All @@ -581,7 +610,7 @@
</widget>
</item>

<item row="3" column="0">
<item row="4" column="0">
<widget class="QLabel" name="lblLocation">
<property name="text">
<string>Location:</string>
Expand All @@ -591,7 +620,7 @@
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<item row="4" column="1" colspan="3">
<widget class="QLabel" name="txtLocation">
<property name="text">
<string/>
Expand All @@ -605,7 +634,7 @@
</widget>
</item>

<item row="4" column="1" colspan="3">
<item row="5" column="1" colspan="3">
<layout class="QHBoxLayout" name="file_browser_btn_layout">
<item>
<widget class="QPushButton" name="btnOpenFileBrowser">
Expand All @@ -630,7 +659,7 @@
</layout>
</item>

<item row="5" column="1" colspan="3">
<item row="6" column="1" colspan="3">
<spacer name="properties_bottom_spacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
Expand Down Expand Up @@ -748,6 +777,7 @@
<tabstop>txtYear</tabstop>
<tabstop>txtKey</tabstop>
<tabstop>txtTrackNumber</tabstop>
<tabstop>txtReplayGain</tabstop>
<tabstop>btnColorPicker</tabstop>
<tabstop>btnImportMetadataFromFile</tabstop>
<tabstop>btnCancel</tabstop>
Expand Down
Loading