# HG changeset patch # User Chris Cannam # Date 1400774339 -3600 # Node ID ff8ae033615f00bfded077bd87f17c51ba408709 # Parent 88b8d34bfc77aafa915efa131f83180210ec7357 No reason getBinFrequency shouldn't work for non-integer bin numbers too diff -r 88b8d34bfc77 -r ff8ae033615f cq/CQBase.h --- a/cq/CQBase.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQBase.h Thu May 22 16:58:59 2014 +0100 @@ -54,7 +54,7 @@ virtual int getLatency() const = 0; virtual double getMaxFrequency() const = 0; virtual double getMinFrequency() const = 0; // actual min, not that passed to ctor - virtual double getBinFrequency(int bin) const = 0; + virtual double getBinFrequency(double bin) const = 0; }; #endif diff -r 88b8d34bfc77 -r ff8ae033615f cq/CQInverse.h --- a/cq/CQInverse.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQInverse.h Thu May 22 16:58:59 2014 +0100 @@ -52,7 +52,7 @@ virtual int getLatency() const { return m_outputLatency; } virtual double getMaxFrequency() const { return m_p.maxFrequency; } virtual double getMinFrequency() const; // actual min, not that passed to ctor - virtual double getBinFrequency(int bin) const; + virtual double getBinFrequency(double bin) const; // Input is the format produced by ConstantQ class, // i.e. uninterpolated complex, not the real-valued stuff produced diff -r 88b8d34bfc77 -r ff8ae033615f cq/CQSpectrogram.h --- a/cq/CQSpectrogram.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/CQSpectrogram.h Thu May 22 16:58:59 2014 +0100 @@ -54,7 +54,7 @@ virtual int getLatency() const { return m_cq.getLatency(); } virtual double getMaxFrequency() const { return m_cq.getMaxFrequency(); } virtual double getMinFrequency() const { return m_cq.getMinFrequency(); } - virtual double getBinFrequency(int bin) const { return m_cq.getBinFrequency(bin); } + virtual double getBinFrequency(double bin) const { return m_cq.getBinFrequency(bin); } /** * Given a series of time-domain samples, return a series of diff -r 88b8d34bfc77 -r ff8ae033615f cq/ConstantQ.h --- a/cq/ConstantQ.h Tue May 20 12:38:13 2014 +0100 +++ b/cq/ConstantQ.h Thu May 22 16:58:59 2014 +0100 @@ -60,7 +60,7 @@ virtual int getLatency() const { return m_outputLatency; } virtual double getMaxFrequency() const { return m_p.maxFrequency; } virtual double getMinFrequency() const; - virtual double getBinFrequency(int bin) const; + virtual double getBinFrequency(double bin) const; // bin may be nonintegral /** * Given a series of time-domain samples, return a series of diff -r 88b8d34bfc77 -r ff8ae033615f src/CQInverse.cpp --- a/src/CQInverse.cpp Tue May 20 12:38:13 2014 +0100 +++ b/src/CQInverse.cpp Thu May 22 16:58:59 2014 +0100 @@ -76,9 +76,11 @@ } double -CQInverse::getBinFrequency(int bin) const +CQInverse::getBinFrequency(double bin) const { - return getMinFrequency() * pow(2, (double(bin) / getBinsPerOctave())); + // our bins are returned in high->low order + bin = (getBinsPerOctave() * getOctaves()) - bin - 1; + return getMinFrequency() * pow(2, (bin / getBinsPerOctave())); } void diff -r 88b8d34bfc77 -r ff8ae033615f src/ConstantQ.cpp --- a/src/ConstantQ.cpp Tue May 20 12:38:13 2014 +0100 +++ b/src/ConstantQ.cpp Thu May 22 16:58:59 2014 +0100 @@ -78,11 +78,11 @@ } double -ConstantQ::getBinFrequency(int bin) const +ConstantQ::getBinFrequency(double bin) const { // our bins are returned in high->low order bin = (getBinsPerOctave() * getOctaves()) - bin - 1; - return getMinFrequency() * pow(2, (double(bin) / getBinsPerOctave())); + return getMinFrequency() * pow(2, (bin / getBinsPerOctave())); } void