diff options
author | Daniel Schürmann <daschuer@mixxx.org> | 2019-05-12 23:43:36 +0200 |
---|---|---|
committer | Daniel Schürmann <daschuer@mixxx.org> | 2019-05-13 00:05:12 +0200 |
commit | b9c6bde3bd54727abd459dc110a6123ba4efd0e6 (patch) | |
tree | 61d8a9b4fe1dcb4d08f16255567a66af6c2ffc14 /lib | |
parent | 957aed588ba6c4806538bb10f05869d60137fc18 (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.cpp | 8 | ||||
-rw-r--r-- | lib/qm-dsp/dsp/chromagram/ConstantQ.cpp | 6 |
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; |