Skip to content

Commit

Permalink
Merge pull request #4089 from Holzhaus/analyzer-samplerate
Browse files Browse the repository at this point in the history
Analyzer: Use mixxx::audio::SampleRate type instead of int
  • Loading branch information
uklotzde committed Jul 9, 2021
2 parents 18624f0 + e4a371d commit b499d16
Show file tree
Hide file tree
Showing 22 changed files with 68 additions and 44 deletions.
7 changes: 5 additions & 2 deletions src/analyzer/analyzer.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include "audio/types.h"
#include "util/assert.h"
#include "util/types.h"

Expand All @@ -21,7 +22,9 @@ class Analyzer {
// 1. Check if the track needs to be analyzed, otherwise return false.
// 2. Perform the initialization and return true on success.
// 3. If the initialization failed log the internal error and return false.
virtual bool initialize(TrackPointer tio, int sampleRate, int totalSamples) = 0;
virtual bool initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) = 0;

/////////////////////////////////////////////////////////////////////////
// All following methods will only be invoked after initialize()
Expand Down Expand Up @@ -66,7 +69,7 @@ class AnalyzerWithState final {
return m_active;
}

bool initialize(TrackPointer tio, int sampleRate, int totalSamples) {
bool initialize(TrackPointer tio, mixxx::audio::SampleRate sampleRate, int totalSamples) {
DEBUG_ASSERT(!m_active);
return m_active = m_analyzer->initialize(tio, sampleRate, totalSamples);
}
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzerbeats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,9 @@ AnalyzerBeats::AnalyzerBeats(UserSettingsPointer pConfig, bool enforceBpmDetecti
m_iCurrentSample(0) {
}

bool AnalyzerBeats::initialize(TrackPointer pTrack, int sampleRate, int totalSamples) {
bool AnalyzerBeats::initialize(TrackPointer pTrack,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
if (totalSamples == 0) {
return false;
}
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzerbeats.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,9 @@ class AnalyzerBeats : public Analyzer {
static QList<mixxx::AnalyzerPluginInfo> availablePlugins();
static mixxx::AnalyzerPluginInfo defaultPlugin();

bool initialize(TrackPointer pTrack, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer pTrack,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE *pIn, const int iLen) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;
Expand Down
2 changes: 1 addition & 1 deletion src/analyzer/analyzerebur128.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ AnalyzerEbur128::~AnalyzerEbur128() {
}

bool AnalyzerEbur128::initialize(TrackPointer tio,
int sampleRate,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
if (m_rgSettings.isAnalyzerDisabled(2, tio) || totalSamples == 0) {
qDebug() << "Skipping AnalyzerEbur128";
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzerebur128.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@ class AnalyzerEbur128 : public Analyzer {
return rgSettings.isAnalyzerEnabled(2);
}

bool initialize(TrackPointer tio, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;
Expand Down
6 changes: 4 additions & 2 deletions src/analyzer/analyzergain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ AnalyzerGain::~AnalyzerGain() {
delete m_pReplayGain;
}

bool AnalyzerGain::initialize(TrackPointer tio, int sampleRate, int totalSamples) {
bool AnalyzerGain::initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
if (m_rgSettings.isAnalyzerDisabled(1, tio) || totalSamples == 0) {
qDebug() << "Skipping AnalyzerGain";
return false;
}

return m_pReplayGain->initialise((long)sampleRate, 2);
return m_pReplayGain->initialise(static_cast<long>(sampleRate), 2);
}

void AnalyzerGain::cleanup() {
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzergain.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ class AnalyzerGain : public Analyzer {
return rgSettings.isAnalyzerEnabled(1);
}

bool initialize(TrackPointer tio, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzerkey.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ AnalyzerKey::AnalyzerKey(const KeyDetectionSettings& keySettings)
m_bPreferencesReanalyzeEnabled(false) {
}

bool AnalyzerKey::initialize(TrackPointer tio, int sampleRate, int totalSamples) {
bool AnalyzerKey::initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
if (totalSamples == 0) {
return false;
}
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzerkey.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@ class AnalyzerKey : public Analyzer {
static QList<mixxx::AnalyzerPluginInfo> availablePlugins();
static mixxx::AnalyzerPluginInfo defaultPlugin();

bool initialize(TrackPointer tio, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE *pIn, const int iLen) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;
Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzersilence.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ AnalyzerSilence::AnalyzerSilence(UserSettingsPointer pConfig)
m_iSignalEnd(-1) {
}

bool AnalyzerSilence::initialize(TrackPointer pTrack, int sampleRate, int totalSamples) {
bool AnalyzerSilence::initialize(TrackPointer pTrack,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
Q_UNUSED(sampleRate);
Q_UNUSED(totalSamples);

Expand Down
4 changes: 3 additions & 1 deletion src/analyzer/analyzersilence.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ class AnalyzerSilence : public Analyzer {
explicit AnalyzerSilence(UserSettingsPointer pConfig);
~AnalyzerSilence() override = default;

bool initialize(TrackPointer pTrack, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer pTrack,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
void storeResults(TrackPointer pTrack) override;
void cleanup() override;
Expand Down
6 changes: 4 additions & 2 deletions src/analyzer/analyzerwaveform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,9 @@ AnalyzerWaveform::~AnalyzerWaveform() {
destroyFilters();
}

bool AnalyzerWaveform::initialize(TrackPointer tio, int sampleRate, int totalSamples) {
bool AnalyzerWaveform::initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) {
if (totalSamples == 0) {
qWarning() << "AnalyzerWaveform::initialize - no waveform/waveform summary";
return false;
Expand Down Expand Up @@ -145,7 +147,7 @@ bool AnalyzerWaveform::shouldAnalyze(TrackPointer tio) const {
return true;
}

void AnalyzerWaveform::createFilters(int sampleRate) {
void AnalyzerWaveform::createFilters(mixxx::audio::SampleRate sampleRate) {
// m_filter[Low] = new EngineFilterButterworth8(FILTER_LOWPASS, sampleRate, 200);
// m_filter[Mid] = new EngineFilterButterworth8(FILTER_BANDPASS, sampleRate, 200, 2000);
// m_filter[High] = new EngineFilterButterworth8(FILTER_HIGHPASS, sampleRate, 2000);
Expand Down
6 changes: 4 additions & 2 deletions src/analyzer/analyzerwaveform.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,9 @@ class AnalyzerWaveform : public Analyzer {
const QSqlDatabase& dbConnection);
~AnalyzerWaveform() override;

bool initialize(TrackPointer tio, int sampleRate, int totalSamples) override;
bool initialize(TrackPointer tio,
mixxx::audio::SampleRate sampleRate,
int totalSamples) override;
bool processSamples(const CSAMPLE* buffer, const int bufferLength) override;
void storeResults(TrackPointer tio) override;
void cleanup() override;
Expand All @@ -151,7 +153,7 @@ class AnalyzerWaveform : public Analyzer {
void storeCurrentStridePower();
void resetCurrentStride();

void createFilters(int sampleRate);
void createFilters(mixxx::audio::SampleRate sampleRate);
void destroyFilters();
void storeIfGreater(float* pDest, float source);

Expand Down
4 changes: 2 additions & 2 deletions src/analyzer/plugins/analyzerkeyfinder.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,8 @@ AnalyzerPluginInfo AnalyzerKeyFinder::pluginInfo() {
return AnalyzerPluginInfo(pluginId, pluginAuthor, pluginName, false);
}

bool AnalyzerKeyFinder::initialize(int samplerate) {
m_audioData.setFrameRate(samplerate);
bool AnalyzerKeyFinder::initialize(mixxx::audio::SampleRate sampleRate) {
m_audioData.setFrameRate(sampleRate);
m_audioData.setChannels(kAnalysisChannels);
return true;
}
Expand Down
2 changes: 1 addition & 1 deletion src/analyzer/plugins/analyzerkeyfinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ class AnalyzerKeyFinder : public AnalyzerKeyPlugin {
return pluginInfo();
}

bool initialize(int samplerate) override;
bool initialize(mixxx::audio::SampleRate sampleRate) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
bool finalize() override;

Expand Down
2 changes: 1 addition & 1 deletion src/analyzer/plugins/analyzerplugin.h
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class AnalyzerPlugin {
}
virtual AnalyzerPluginInfo info() const = 0;

virtual bool initialize(int samplerate) = 0;
virtual bool initialize(mixxx::audio::SampleRate sampleRate) = 0;
virtual bool processSamples(const CSAMPLE* pIn, const int iLen) = 0;
virtual bool finalize() = 0;
};
Expand Down
15 changes: 7 additions & 8 deletions src/analyzer/plugins/analyzerqueenmarybeats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,22 +39,21 @@ DFConfig makeDetectionFunctionConfig(int stepSizeFrames, int windowSize) {
} // namespace

AnalyzerQueenMaryBeats::AnalyzerQueenMaryBeats()
: m_iSampleRate(0),
m_windowSize(0),
: m_windowSize(0),
m_stepSizeFrames(0) {
}

AnalyzerQueenMaryBeats::~AnalyzerQueenMaryBeats() {
}

bool AnalyzerQueenMaryBeats::initialize(int samplerate) {
bool AnalyzerQueenMaryBeats::initialize(mixxx::audio::SampleRate sampleRate) {
m_detectionResults.clear();
m_iSampleRate = samplerate;
m_stepSizeFrames = static_cast<int>(m_iSampleRate * kStepSecs);
m_windowSize = MathUtilities::nextPowerOfTwo(m_iSampleRate / kMaximumBinSizeHz);
m_sampleRate = sampleRate;
m_stepSizeFrames = static_cast<int>(m_sampleRate * kStepSecs);
m_windowSize = MathUtilities::nextPowerOfTwo(m_sampleRate / kMaximumBinSizeHz);
m_pDetectionFunction = std::make_unique<DetectionFunction>(
makeDetectionFunctionConfig(m_stepSizeFrames, m_windowSize));
qDebug() << "input sample rate is " << m_iSampleRate << ", step size is " << m_stepSizeFrames;
qDebug() << "input sample rate is " << m_sampleRate << ", step size is " << m_stepSizeFrames;

m_helper.initialize(
m_windowSize, m_stepSizeFrames, [this](double* pWindow, size_t) {
Expand Down Expand Up @@ -97,7 +96,7 @@ bool AnalyzerQueenMaryBeats::finalize() {
beatPeriod.push_back(0.0);
}

TempoTrackV2 tt(m_iSampleRate, m_stepSizeFrames);
TempoTrackV2 tt(m_sampleRate, m_stepSizeFrames);
tt.calculateBeatPeriod(df, beatPeriod, tempi);

std::vector<double> beats;
Expand Down
4 changes: 2 additions & 2 deletions src/analyzer/plugins/analyzerqueenmarybeats.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AnalyzerQueenMaryBeats : public AnalyzerBeatsPlugin {
return pluginInfo();
}

bool initialize(int samplerate) override;
bool initialize(mixxx::audio::SampleRate sampleRate) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
bool finalize() override;

Expand All @@ -47,7 +47,7 @@ class AnalyzerQueenMaryBeats : public AnalyzerBeatsPlugin {
private:
std::unique_ptr<DetectionFunction> m_pDetectionFunction;
DownmixAndOverlapHelper m_helper;
int m_iSampleRate;
mixxx::audio::SampleRate m_sampleRate;
int m_windowSize;
int m_stepSizeFrames;
std::vector<double> m_detectionResults;
Expand Down
18 changes: 9 additions & 9 deletions src/analyzer/plugins/analyzerqueenmarykey.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ AnalyzerQueenMaryKey::AnalyzerQueenMaryKey()
AnalyzerQueenMaryKey::~AnalyzerQueenMaryKey() {
}

bool AnalyzerQueenMaryKey::initialize(int samplerate) {
bool AnalyzerQueenMaryKey::initialize(mixxx::audio::SampleRate sampleRate) {
m_prevKey = mixxx::track::io::key::INVALID;
m_resultKeys.clear();
m_currentFrame = 0;
Expand All @@ -42,17 +42,17 @@ bool AnalyzerQueenMaryKey::initialize(int samplerate) {
// 8 = normal chroma overlap
int decimationFactor;

Config(double _sampleRate, float _tuningFrequency) :
sampleRate(_sampleRate),
tuningFrequency(_tuningFrequency),
hpcpAverage(10),
medianAverage(10),
frameOverlapFactor(1),
decimationFactor(8) {
Config(mixxx::audio::SampleRate _sampleRate, float _tuningFrequency)
: sampleRate(_sampleRate.toDouble()),
tuningFrequency(_tuningFrequency),
hpcpAverage(10),
medianAverage(10),
frameOverlapFactor(1),
decimationFactor(8) {
}
};

GetKeyMode::Config config(samplerate, kTuningFrequencyHertz);
GetKeyMode::Config config(sampleRate, kTuningFrequencyHertz);
m_pKeyMode = std::make_unique<GetKeyMode>(config);
size_t windowSize = m_pKeyMode->getBlockSize();
size_t stepSize = m_pKeyMode->getHopSize();
Expand Down
2 changes: 1 addition & 1 deletion src/analyzer/plugins/analyzerqueenmarykey.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class AnalyzerQueenMaryKey : public AnalyzerKeyPlugin {
return pluginInfo();
}

bool initialize(int samplerate) override;
bool initialize(mixxx::audio::SampleRate sampleRate) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
bool finalize() override;

Expand Down
4 changes: 2 additions & 2 deletions src/analyzer/plugins/analyzersoundtouchbeats.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ AnalyzerSoundTouchBeats::AnalyzerSoundTouchBeats()
AnalyzerSoundTouchBeats::~AnalyzerSoundTouchBeats() {
}

bool AnalyzerSoundTouchBeats::initialize(int samplerate) {
bool AnalyzerSoundTouchBeats::initialize(mixxx::audio::SampleRate sampleRate) {
m_resultBpm = mixxx::Bpm();
m_pSoundTouch = std::make_unique<soundtouch::BPMDetect>(2, samplerate);
m_pSoundTouch = std::make_unique<soundtouch::BPMDetect>(2, sampleRate);
return true;
}

Expand Down
2 changes: 1 addition & 1 deletion src/analyzer/plugins/analyzersoundtouchbeats.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class AnalyzerSoundTouchBeats : public AnalyzerBeatsPlugin {
return pluginInfo();
}

bool initialize(int samplerate) override;
bool initialize(mixxx::audio::SampleRate sampleRate) override;
bool processSamples(const CSAMPLE* pIn, const int iLen) override;
bool finalize() override;

Expand Down

0 comments on commit b499d16

Please sign in to comment.