Skip to content

Commit

Permalink
Merge branch '2.3' of github.com:mixxxdj/mixxx into 2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
Holzhaus committed Aug 17, 2023
2 parents a4fc67c + 691596c commit 1d7eadb
Show file tree
Hide file tree
Showing 62 changed files with 732 additions and 555 deletions.
33 changes: 32 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -1026,7 +1026,7 @@
[#11434](https://github.com/mixxxdj/mixxx/pull/11434)
[#11301](https://github.com/mixxxdj/mixxx/pull/11301)

## [2.3.6](https://github.com/mixxxdj/mixxx/milestone/40) (unreleased)
## [2.3.6](https://github.com/mixxxdj/mixxx/milestone/40) (2023-08-15)

* Fixed possible crash when closing Mixxx while browsing the file system
[#11593](https://github.com/mixxxdj/mixxx/pull/11593)
Expand Down Expand Up @@ -1056,6 +1056,37 @@
[#11709](https://github.com/mixxxdj/mixxx/issues/11709)
* Controller Preferences: Avoid scrollbars in I/O tabs if Info tab exceeds page height
[#11756](https://github.com/mixxxdj/mixxx/pull/11756)
* Broadcast: Improved error message in case of timeout
[#11775](https://github.com/mixxxdj/mixxx/pull/11775)
* Handle setting `loop_in` and `loop_out` to the same position
[#11771](https://github.com/mixxxdj/mixxx/pull/11771)
[#10600](https://github.com/mixxxdj/mixxx/issues/10600)
* Fix build issues with Protobuf v23.4 and with clang 32
[#11751](https://github.com/mixxxdj/mixxx/pull/11751)
[#11765](https://github.com/mixxxdj/mixxx/pull/11765)
[#11762](https://github.com/mixxxdj/mixxx/issues/11762)
* Disable GL VU-Meters on Windows by default. They can be re-enabled via the command line option `--enableVuMeterGL`.
[#11787](https://github.com/mixxxdj/mixxx/pull/11787)
[#11785](https://github.com/mixxxdj/mixxx/issues/11785)
[#11789](https://github.com/mixxxdj/mixxx/issues/11789)
* Library preferences: Uncheck Serato metadata export when file metadata export is unchecked
[#11782](https://github.com/mixxxdj/mixxx/pull/11782)
[#11226](https://github.com/mixxxdj/mixxx/issues/11226)
* Denon MC6000MK2: Delete mapping for master gain
[#11792](https://github.com/mixxxdj/mixxx/pull/11792)
* Improve output in case of some failed file system operations
[#11783](https://github.com/mixxxdj/mixxx/pull/11783)
* Fix overlapping buffers when decoding M4A files using FFmpeg before 4.4
[#11760](https://github.com/mixxxdj/mixxx/pull/11760)
[#11545](https://github.com/mixxxdj/mixxx/issues/11545)
* Don't reject key values from file metadata with non-minor/-major scales.
[#11001](https://github.com/mixxxdj/mixxx/pull/11001)
[#10995](https://github.com/mixxxdj/mixxx/issues/10995)
* Allow playing tracks with durations of more than 6 hours
[#11511](https://github.com/mixxxdj/mixxx/pull/11511)
[#11504](https://github.com/mixxxdj/mixxx/issues/11504)
* Update latency compensation for Soundtouch version 2.1.1 to 2.3
[#11154](https://github.com/mixxxdj/mixxx/pull/11154)

## [2.3.5](https://github.com/mixxxdj/mixxx/milestone/39) (2023-05-10)

Expand Down
6 changes: 6 additions & 0 deletions packaging/debian/changelog
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
mixxx (2.3.5-1~bionic) bionic; urgency=medium

* Build of 2.3.5

-- RJ Skerry-Ryan <rryan@mixxx.org> Wed, 10 May 2023 20:28:25 +0000

mixxx (2.3.4-1~bionic) bionic; urgency=medium

* Build of 2.3.4
Expand Down
9 changes: 0 additions & 9 deletions res/controllers/Denon-MC6000MK2.midi.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1687,15 +1687,6 @@
<script-binding/>
</options>
</control>
<control>
<group>[Master]</group>
<key>gain</key>
<status>0xB0</status>
<midino>0x19</midino>
<options>
<normal/>
</options>
</control>
<control>
<group>[Channel1]</group>
<key>DenonMC6000MK2.recvJogSpin</key>
Expand Down
63 changes: 61 additions & 2 deletions res/linux/org.mixxx.Mixxx.metainfo.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
Do not edit it manually.
-->
<releases>
<release version="2.4.0" type="development" date="2023-07-28" timestamp="1690529288">
<release version="2.4.0" type="development" date="2023-08-12" timestamp="1691865042">
<description>
<p>
Cover Art
Expand Down Expand Up @@ -1921,7 +1921,7 @@
</ul>
</description>
</release>
<release version="2.3.6" type="development" date="2023-07-28" timestamp="1690529288">
<release version="2.3.6" type="stable" date="2023-08-15" timestamp="1692057600">
<description>
<ul>
<li>
Expand Down Expand Up @@ -1972,6 +1972,65 @@
Controller Preferences: Avoid scrollbars in I/O tabs if Info tab exceeds page height
#11756
</li>
<li>
Broadcast: Improved error message in case of timeout
#11775
</li>
<li>
Handle setting
loop_in
and
loop_out
to the same position
#11771
#10600
</li>
<li>
Fix build issues with Protobuf v23.4 and with clang 32
#11751
#11765
#11762
</li>
<li>
Disable GL VU-Meters on Windows by default. They can be re-enabled via the command line option
--enableVuMeterGL
.
#11787
#11785
#11789
</li>
<li>
Library preferences: Uncheck Serato metadata export when file metadata export is unchecked
#11782
#11226
</li>
<li>
Denon MC6000MK2: Delete mapping for master gain
#11792
</li>
<li>
Improve output in case of some failed file system operations
#11783
</li>
<li>
Fix overlapping buffers when decoding M4A files using FFmpeg before 4.4
#11760
#11545
</li>
<li>
Don't reject key values from file metadata with non-minor/-major scales.
#11001
#10995
</li>
<li>
Allow playing tracks with durations of more than 6 hours
#11511
#11504
</li>
<li>
Update latency compensation for Soundtouch version 2.1.1 to 2.3
#11154
</li>
</ul>
</description>
</release>
Expand Down
16 changes: 4 additions & 12 deletions src/analyzer/analyzer.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#pragma once

#include "analyzer/analyzertrack.h"
#include "audio/signalinfo.h"
#include "audio/types.h"
#include "util/assert.h"
#include "util/types.h"
Expand All @@ -26,13 +27,6 @@ class Analyzer {
virtual bool initialize(const AnalyzerTrack& tio,
mixxx::audio::SampleRate sampleRate,
SINT totalSamples) = 0;

/////////////////////////////////////////////////////////////////////////
// All following methods will only be invoked after initialize()
// returned true!
/////////////////////////////////////////////////////////////////////////

// Analyze the next chunk of audio samples and return true if successful.
// If processing fails the analysis can be aborted early by returning
// false. After aborting the analysis only cleanup() will be invoked,
// but not finalize()!
Expand All @@ -41,7 +35,7 @@ class Analyzer {
// Update the track object with the analysis results after
// processing finished successfully, i.e. all available audio
// samples have been processed.
virtual void storeResults(TrackPointer tio) = 0;
virtual void storeResults(TrackPointer pTrack) = 0;

// Discard any temporary results or free allocated memory.
// This function will be invoked after the results have been
Expand Down Expand Up @@ -70,11 +64,9 @@ class AnalyzerWithState final {
return m_active;
}

bool initialize(const AnalyzerTrack& tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
bool initialize(TrackPointer pTrack, mixxx::audio::SampleRate sampleRate, SINT frameLength) {
DEBUG_ASSERT(!m_active);
return m_active = m_analyzer->initialize(tio, sampleRate, totalSamples);
return m_active = m_analyzer->initialize(pTrack, sampleRate, frameLength);
}

void processSamples(const CSAMPLE* pIn, SINT iLen) {
Expand Down
28 changes: 13 additions & 15 deletions src/analyzer/analyzerbeats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,14 @@ AnalyzerBeats::AnalyzerBeats(UserSettingsPointer pConfig, bool enforceBpmDetecti
m_bPreferencesReanalyzeImported(false),
m_bPreferencesFixedTempo(true),
m_bPreferencesFastAnalysis(false),
m_totalSamples(0),
m_iMaxSamplesToProcess(0),
m_iCurrentSample(0) {
m_maxFramesToProcess(0),
m_currentFrame(0) {
}

bool AnalyzerBeats::initialize(const AnalyzerTrack& track,
mixxx::audio::SampleRate sampleRate,
SINT totalSamples) {
if (totalSamples == 0) {
SINT frameLength) {
if (frameLength == 0) {
return false;
}

Expand Down Expand Up @@ -88,16 +87,15 @@ bool AnalyzerBeats::initialize(const AnalyzerTrack& track,
<< "\nFast analysis:" << m_bPreferencesFastAnalysis;

m_sampleRate = sampleRate;
m_totalSamples = totalSamples;
// In fast analysis mode, skip processing after
// kFastAnalysisSecondsToAnalyze seconds are analyzed.
if (m_bPreferencesFastAnalysis) {
m_iMaxSamplesToProcess =
mixxx::kFastAnalysisSecondsToAnalyze * m_sampleRate * mixxx::kAnalysisChannels;
m_maxFramesToProcess =
mixxx::kFastAnalysisSecondsToAnalyze * m_sampleRate;
} else {
m_iMaxSamplesToProcess = m_totalSamples;
m_maxFramesToProcess = frameLength;
}
m_iCurrentSample = 0;
m_currentFrame = 0;

// if we can load a stored track don't reanalyze it
bool bShouldAnalyze = shouldAnalyze(track.getTrack());
Expand All @@ -115,7 +113,7 @@ bool AnalyzerBeats::initialize(const AnalyzerTrack& track,
}

if (m_pPlugin) {
if (m_pPlugin->initialize(sampleRate)) {
if (m_pPlugin->initialize(m_sampleRate)) {
qDebug() << "Beat calculation started with plugin" << m_pluginId;
} else {
qDebug() << "Beat calculation will not start.";
Expand Down Expand Up @@ -197,17 +195,17 @@ bool AnalyzerBeats::shouldAnalyze(TrackPointer pTrack) const {
return true;
}

bool AnalyzerBeats::processSamples(const CSAMPLE* pIn, SINT iLen) {
bool AnalyzerBeats::processSamples(const CSAMPLE* pIn, SINT count) {
VERIFY_OR_DEBUG_ASSERT(m_pPlugin) {
return false;
}

m_iCurrentSample += iLen;
if (m_iCurrentSample > m_iMaxSamplesToProcess) {
m_currentFrame += count / mixxx::kAnalysisChannels;
if (m_currentFrame > m_maxFramesToProcess) {
return true; // silently ignore all remaining samples
}

return m_pPlugin->processSamples(pIn, iLen);
return m_pPlugin->processSamples(pIn, count);
}

void AnalyzerBeats::cleanup() {
Expand Down
7 changes: 3 additions & 4 deletions src/analyzer/analyzerbeats.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ class AnalyzerBeats : public Analyzer {
bool initialize(const AnalyzerTrack& track,
mixxx::audio::SampleRate sampleRate,
SINT totalSamples) override;
bool processSamples(const CSAMPLE* pIn, SINT iLen) override;
bool processSamples(const CSAMPLE* pIn, SINT count) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;

Expand All @@ -49,7 +49,6 @@ class AnalyzerBeats : public Analyzer {
bool m_bPreferencesFastAnalysis;

mixxx::audio::SampleRate m_sampleRate;
SINT m_totalSamples;
SINT m_iMaxSamplesToProcess;
SINT m_iCurrentSample;
SINT m_maxFramesToProcess;
SINT m_currentFrame;
};
23 changes: 13 additions & 10 deletions src/analyzer/analyzerebur128.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#include <QtDebug>

#include "analyzer/analyzertrack.h"
#include "analyzer/constants.h"
#include "track/track.h"
#include "util/math.h"
#include "util/sample.h"
Expand All @@ -23,14 +24,15 @@ AnalyzerEbur128::~AnalyzerEbur128() {

bool AnalyzerEbur128::initialize(const AnalyzerTrack& tio,
mixxx::audio::SampleRate sampleRate,
SINT totalSamples) {
if (m_rgSettings.isAnalyzerDisabled(2, tio.getTrack()) || totalSamples == 0) {
SINT frameLength) {
if (m_rgSettings.isAnalyzerDisabled(2, tio.getTrack()) || frameLength <= 0) {
qDebug() << "Skipping AnalyzerEbur128";
return false;
}
DEBUG_ASSERT(m_pState == nullptr);
m_pState = ebur128_init(2u,
static_cast<unsigned long>(sampleRate),
m_pState = ebur128_init(
mixxx::kAnalysisChannels,
sampleRate,
EBUR128_MODE_I);
return m_pState != nullptr;
}
Expand All @@ -43,12 +45,12 @@ void AnalyzerEbur128::cleanup() {
}
}

bool AnalyzerEbur128::processSamples(const CSAMPLE* pIn, SINT iLen) {
bool AnalyzerEbur128::processSamples(const CSAMPLE* pIn, SINT count) {
VERIFY_OR_DEBUG_ASSERT(m_pState) {
return false;
}
ScopedTimer t("AnalyzerEbur128::processSamples()");
size_t frames = iLen / 2;
size_t frames = count / mixxx::kAnalysisChannels;
int e = ebur128_add_frames_float(m_pState, pIn, frames);
VERIFY_OR_DEBUG_ASSERT(e == EBUR128_SUCCESS) {
qWarning() << "AnalyzerEbur128::processSamples() failed with" << e;
Expand All @@ -57,7 +59,7 @@ bool AnalyzerEbur128::processSamples(const CSAMPLE* pIn, SINT iLen) {
return true;
}

void AnalyzerEbur128::storeResults(TrackPointer tio) {
void AnalyzerEbur128::storeResults(TrackPointer pTrack) {
VERIFY_OR_DEBUG_ASSERT(m_pState) {
return;
}
Expand All @@ -74,8 +76,9 @@ void AnalyzerEbur128::storeResults(TrackPointer tio) {
}

const double fReplayGain2 = kReplayGain2ReferenceLUFS - averageLufs;
mixxx::ReplayGain replayGain(tio->getReplayGain());
mixxx::ReplayGain replayGain(pTrack->getReplayGain());
replayGain.setRatio(db2ratio(fReplayGain2));
tio->setReplayGain(replayGain);
qDebug() << "ReplayGain 2.0 (libebur128) result is" << fReplayGain2 << "dB for" << tio->getFileInfo();
pTrack->setReplayGain(replayGain);
qDebug() << "ReplayGain 2.0 (libebur128) result is" << fReplayGain2
<< "dB for" << pTrack->getFileInfo();
}
6 changes: 3 additions & 3 deletions src/analyzer/analyzerebur128.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@ class AnalyzerEbur128 : public Analyzer {

bool initialize(const AnalyzerTrack& track,
mixxx::audio::SampleRate sampleRate,
SINT totalSamples) override;
bool processSamples(const CSAMPLE* pIn, SINT iLen) override;
void storeResults(TrackPointer tio) override;
SINT frameLength) override;
bool processSamples(const CSAMPLE* pIn, SINT count) override;
void storeResults(TrackPointer pTrack) override;
void cleanup() override;

private:
Expand Down
Loading

0 comments on commit 1d7eadb

Please sign in to comment.