summaryrefslogtreecommitdiffstats
path: root/src/analyzer
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2021-03-14 13:10:00 +0100
committerDaniel Schürmann <daschuer@mixxx.org>2021-03-14 13:10:00 +0100
commit2f4d89e6b91b870928fe294a7edc20cd6d128a8a (patch)
treea529ba601a5b5cc570d1f4c431e40ba3da6a5f5d /src/analyzer
parent58fffd2014b030af81d077ff68f8c8636ddd0c2e (diff)
parent4be3a41aec1c752f946a6529f41fb995b1418ce1 (diff)
Merge remote-tracking branch 'upstream/2.3' into ironbeats
Diffstat (limited to 'src/analyzer')
-rw-r--r--src/analyzer/analyzerbeats.cpp67
-rw-r--r--src/analyzer/analyzerbeats.h4
2 files changed, 20 insertions, 51 deletions
diff --git a/src/analyzer/analyzerbeats.cpp b/src/analyzer/analyzerbeats.cpp
index a182f3a1f6..01591ea426 100644
--- a/src/analyzer/analyzerbeats.cpp
+++ b/src/analyzer/analyzerbeats.cpp
@@ -37,8 +37,7 @@ AnalyzerBeats::AnalyzerBeats(UserSettingsPointer pConfig, bool enforceBpmDetecti
m_bPreferencesReanalyzeImported(false),
m_bPreferencesFixedTempo(true),
m_bPreferencesFastAnalysis(false),
- m_iSampleRate(0),
- m_iTotalSamples(0),
+ m_totalSamples(0),
m_iMaxSamplesToProcess(0),
m_iCurrentSample(0) {
}
@@ -84,15 +83,15 @@ bool AnalyzerBeats::initialize(TrackPointer pTrack, int sampleRate, int totalSam
<< "\nRe-analyze when settings change:" << m_bPreferencesReanalyzeOldBpm
<< "\nFast analysis:" << m_bPreferencesFastAnalysis;
- m_iSampleRate = sampleRate;
- m_iTotalSamples = totalSamples;
+ 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_iSampleRate * mixxx::kAnalysisChannels;
+ mixxx::kFastAnalysisSecondsToAnalyze * m_sampleRate * mixxx::kAnalysisChannels;
} else {
- m_iMaxSamplesToProcess = m_iTotalSamples;
+ m_iMaxSamplesToProcess = m_totalSamples;
}
m_iCurrentSample = 0;
@@ -153,14 +152,20 @@ bool AnalyzerBeats::shouldAnalyze(TrackPointer pTrack) const {
qDebug() << "Re-analyzing track with invalid BPM despite preference settings.";
return true;
}
- if (pBeats->findNextBeat(0) <= 0.0) {
+
+ QString subVersion = pBeats->getSubVersion();
+ if (subVersion == mixxx::rekordboxconstants::beatsSubversion) {
+ return m_bPreferencesReanalyzeImported;
+ }
+
+ if (subVersion.isEmpty() && pBeats->findNextBeat(0) <= 0.0 &&
+ m_pluginId != mixxx::AnalyzerSoundTouchBeats::pluginInfo().id) {
+ // This happens if the beat grid was created from the metadata BPM value.
qDebug() << "First beat is 0 for grid so analyzing track to find first beat.";
return true;
}
- // Version check
QString version = pBeats->getVersion();
- QString subVersion = pBeats->getSubVersion();
QHash<QString, QString> extraVersionInfo = getExtraVersionInfo(
pluginID,
m_bPreferencesFastAnalysis);
@@ -168,9 +173,7 @@ bool AnalyzerBeats::shouldAnalyze(TrackPointer pTrack) const {
m_bPreferencesFixedTempo);
QString newSubVersion = BeatFactory::getPreferredSubVersion(
extraVersionInfo);
- if (subVersion == mixxx::rekordboxconstants::beatsSubversion) {
- return m_bPreferencesReanalyzeImported;
- }
+
if (version == newVersion && subVersion == newSubVersion) {
// If the version and settings have not changed then if the world is
// sane, re-analyzing will do nothing.
@@ -223,50 +226,16 @@ void AnalyzerBeats::storeResults(TrackPointer pTrack) {
beats,
extraVersionInfo,
m_bPreferencesFixedTempo,
- mixxx::audio::SampleRate(m_iSampleRate));
+ m_sampleRate);
qDebug() << "AnalyzerBeats plugin detected" << beats.size()
<< "beats. Average BPM:" << (pBeats ? pBeats->getBpm() : 0.0);
} else {
float bpm = m_pPlugin->getBpm();
qDebug() << "AnalyzerBeats plugin detected constant BPM: " << bpm;
- pBeats = BeatFactory::makeBeatGrid(m_iSampleRate, bpm, 0.0f);
+ pBeats = BeatFactory::makeBeatGrid(m_sampleRate, bpm, 0.0f);
}
- mixxx::BeatsPointer pCurrentBeats = pTrack->getBeats();
-
- // If the track has no beats object then set our newly generated one
- // regardless of beat lock.
- if (!pCurrentBeats) {
- pTrack->setBeats(pBeats);
- return;
- }
-
- // If the track received the beat lock while we were analyzing it then we
- // abort setting it.
- if (pTrack->isBpmLocked()) {
- qDebug() << "Track was BPM-locked as we were analyzing it. Aborting analysis.";
- return;
- }
-
- // If the user prefers to replace old beatgrids with newly generated ones or
- // the old beatgrid has 0-bpm then we replace it.
- bool zeroCurrentBpm = pCurrentBeats->getBpm() == 0.0;
- if (m_bPreferencesReanalyzeOldBpm || zeroCurrentBpm) {
- if (zeroCurrentBpm) {
- qDebug() << "Replacing 0-BPM beatgrid with a" << pBeats->getBpm()
- << "beatgrid.";
- }
- pTrack->setBeats(pBeats);
- return;
- }
-
- // If we got here then the user doesn't want to replace the beatgrid but
- // since the first beat is zero we'll apply the offset we just detected.
- double currentFirstBeat = pCurrentBeats->findNextBeat(0);
- double newFirstBeat = pBeats->findNextBeat(0);
- if (currentFirstBeat == 0.0 && newFirstBeat > 0) {
- pTrack->setBeats(pCurrentBeats->translate(newFirstBeat));
- }
+ pTrack->trySetBeats(pBeats);
}
// static
diff --git a/src/analyzer/analyzerbeats.h b/src/analyzer/analyzerbeats.h
index 5b997bd2a9..0e4e44f74b 100644
--- a/src/analyzer/analyzerbeats.h
+++ b/src/analyzer/analyzerbeats.h
@@ -45,8 +45,8 @@ class AnalyzerBeats : public Analyzer {
bool m_bPreferencesFixedTempo;
bool m_bPreferencesFastAnalysis;
- int m_iSampleRate;
- int m_iTotalSamples;
+ mixxx::audio::SampleRate m_sampleRate;
+ SINT m_totalSamples;
int m_iMaxSamplesToProcess;
int m_iCurrentSample;
};