changeset 145:ff8ae033615f

No reason getBinFrequency shouldn't work for non-integer bin numbers too
author Chris Cannam <c.cannam@qmul.ac.uk>
date Thu, 22 May 2014 16:58:59 +0100
parents 88b8d34bfc77
children 0cbd9c904dbb
files cq/CQBase.h cq/CQInverse.h cq/CQSpectrogram.h cq/ConstantQ.h src/CQInverse.cpp src/ConstantQ.cpp
diffstat 6 files changed, 10 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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
--- 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
--- 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
--- 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
--- 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