summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorDaniel Schürmann <daschuer@mixxx.org>2019-05-12 23:43:36 +0200
committerDaniel Schürmann <daschuer@mixxx.org>2019-05-13 00:05:12 +0200
commitb9c6bde3bd54727abd459dc110a6123ba4efd0e6 (patch)
tree61d8a9b4fe1dcb4d08f16255567a66af6c2ffc14 /lib
parent957aed588ba6c4806538bb10f05869d60137fc18 (diff)
Extend the number of Q bins always to a full octave
Diffstat (limited to 'lib')
-rw-r--r--lib/qm-dsp/dsp/chromagram/Chromagram.cpp8
-rw-r--r--lib/qm-dsp/dsp/chromagram/ConstantQ.cpp6
2 files changed, 8 insertions, 6 deletions
diff --git a/lib/qm-dsp/dsp/chromagram/Chromagram.cpp b/lib/qm-dsp/dsp/chromagram/Chromagram.cpp
index c913b310b8..3e83367a9b 100644
--- a/lib/qm-dsp/dsp/chromagram/Chromagram.cpp
+++ b/lib/qm-dsp/dsp/chromagram/Chromagram.cpp
@@ -33,8 +33,8 @@ int Chromagram::initialise( ChromaConfig Config )
m_BPO = Config.BPO; // bins per octave
m_normalise = Config.normalise; // if frame normalisation is required
- // No. of constant Q bins
- m_uK = ( unsigned int ) ceil( m_BPO * log(m_FMax/m_FMin)/log(2.0));
+ // No. of constant Q bins, extended to a full cotave
+ m_uK = m_BPO * (unsigned int)ceil(log(m_FMax/m_FMin)/log(2.0));
// Create array for chroma result
m_chromadata = new double[ m_BPO ];
@@ -159,8 +159,8 @@ double* Chromagram::process( const double *real, const double *imag )
m_ConstantQ->process( real, imag, m_CQRe, m_CQIm );
// add each octave of cq data into Chromagram
- const unsigned octaves = (int)floor(double( m_uK/m_BPO))-1;
- for (unsigned octave = 0; octave <= octaves; octave++)
+ const unsigned octaves = m_uK / m_BPO;
+ for (unsigned octave = 0; octave < octaves; octave++)
{
unsigned firstBin = octave * m_BPO;
for (unsigned i = 0; i < m_BPO; i++)
diff --git a/lib/qm-dsp/dsp/chromagram/ConstantQ.cpp b/lib/qm-dsp/dsp/chromagram/ConstantQ.cpp
index 5e14f0af78..bbd587abcf 100644
--- a/lib/qm-dsp/dsp/chromagram/ConstantQ.cpp
+++ b/lib/qm-dsp/dsp/chromagram/ConstantQ.cpp
@@ -293,8 +293,10 @@ void ConstantQ::initialise( CQConfig Config )
m_BPO = Config.BPO; // bins per octave
m_CQThresh = Config.CQThresh;// ConstantQ threshold for kernel generation
- m_dQ = 1/(pow(2,(1/(double)m_BPO))-1); // Work out Q value for Filter bank
- m_uK = (unsigned int) ceil(m_BPO * log(m_FMax/m_FMin)/log(2.0)); // No. of constant Q bins
+ // Work out Q value for Filter bank
+ m_dQ = 1/(pow(2,(1/(double)m_BPO))-1);
+ // No. of constant Q bins, extended to a full cotave
+ m_uK = m_BPO * (unsigned int)ceil(log(m_FMax/m_FMin)/log(2.0));
// std::cerr << "ConstantQ::initialise: rate = " << m_FS << ", fmin = " << m_FMin << ", fmax = " << m_FMax << ", bpo = " << m_BPO << ", K = " << m_uK << ", Q = " << m_dQ << std::endl;