summaryrefslogtreecommitdiff
path: root/gtk2_ardour/fft_result.h
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2016-05-22 19:29:08 +0200
committerRobin Gareus <robin@gareus.org>2016-05-22 19:33:00 +0200
commit1b3b42403bf7324b1b35adc7aa7695dcde39c07b (patch)
tree658508a786bda58d78a2880ae3f3d2fa0af68298 /gtk2_ardour/fft_result.h
parentef365d0310b40424c69eece86f284ee6db020735 (diff)
overhaul region/range spectrum analysis
Diffstat (limited to 'gtk2_ardour/fft_result.h')
-rw-r--r--gtk2_ardour/fft_result.h98
1 files changed, 53 insertions, 45 deletions
diff --git a/gtk2_ardour/fft_result.h b/gtk2_ardour/fft_result.h
index ddf2bb1842..dfab35a35f 100644
--- a/gtk2_ardour/fft_result.h
+++ b/gtk2_ardour/fft_result.h
@@ -1,22 +1,21 @@
/*
- Copyright (C) 2006 Paul Davis
- Written by Sampo Savolainen
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
+ * Copyright (C) 2006, 2016 Paul Davis
+ * Written by Sampo Savolainen & Robin Gareus
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
#ifndef __ardour_fft_result_h
#define __ardour_fft_result_h
@@ -31,47 +30,56 @@ class FFTGraph;
class FFTResult
{
- public:
+public:
- ~FFTResult();
+ ~FFTResult ();
- void analyzeWindow(float *window);
- void finalize();
+ void analyzeWindow (float *window);
+ void finalize ();
- int length() const { return _dataSize; }
+ unsigned int length () const { return _dataSize; }
- float avgAt(int x);
- float maxAt(int x);
- float minAt(int x);
+ float avgAt (unsigned int x, bool p) const
+ { return p ? _data_prop_avg[x] : _data_flat_avg[x]; }
+ float maxAt (unsigned int x, bool p) const
+ { return p ? _data_prop_max[x] : _data_flat_max[x]; }
+ float minAt (unsigned int x, bool p) const
+ { return p ? _data_prop_min[x] : _data_flat_min[x]; }
- float minimum() const { return _minimum; }
- float maximum() const { return _maximum; }
+ float minimum (bool p) const
+ { return p ? _min_prop : _min_flat; }
+ float maximum (bool p) const
+ { return p ? _max_prop : _max_flat; }
- Gdk::Color get_color() const { return _color; }
+ const Gdk::Color& get_color () const { return _color; }
- private:
- FFTResult(FFTGraph *graph, Gdk::Color color, std::string trackname);
-
- int _averages;
+private:
+ FFTResult (FFTGraph *graph, Gdk::Color color, std::string trackname);
+ friend class FFTGraph;
- float* _data_avg;
- float* _data_max;
- float* _data_min;
+ int _averages;
- float* _work;
+ float* _data_flat_avg;
+ float* _data_flat_max;
+ float* _data_flat_min;
+ float* _data_prop_avg;
+ float* _data_prop_max;
+ float* _data_prop_min;
- int _windowSize;
- int _dataSize;
+ unsigned int _windowSize;
+ unsigned int _dataSize;
- float _minimum;
- float _maximum;
+ float _min_flat;
+ float _max_flat;
+ float _min_prop;
+ float _max_prop;
- FFTGraph *_graph;
+ FFTGraph *_graph;
- Gdk::Color _color;
- std::string _trackname;
+ Gdk::Color _color;
+ std::string _trackname;
- friend class FFTGraph;
+ static float power_to_db (float v) { return v > 1e-20 ? 10.0f * log10f (v) : -200.0f; }
};
#endif /* __ardour_fft_result_h */