diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2021-03-14 13:10:00 +0100 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2021-03-14 13:10:00 +0100 |
commit | 2f4d89e6b91b870928fe294a7edc20cd6d128a8a (patch) | |
tree | a529ba601a5b5cc570d1f4c431e40ba3da6a5f5d /src/analyzer | |
parent | 58fffd2014b030af81d077ff68f8c8636ddd0c2e (diff) | |
parent | 4be3a41aec1c752f946a6529f41fb995b1418ce1 (diff) |
Merge remote-tracking branch 'upstream/2.3' into ironbeats
Diffstat (limited to 'src/analyzer')
-rw-r--r-- | src/analyzer/analyzerbeats.cpp | 67 | ||||
-rw-r--r-- | src/analyzer/analyzerbeats.h | 4 |
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; }; |