From 1b3b42403bf7324b1b35adc7aa7695dcde39c07b Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Sun, 22 May 2016 19:29:08 +0200 Subject: overhaul region/range spectrum analysis --- gtk2_ardour/fft_result.h | 98 ++++++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 45 deletions(-) (limited to 'gtk2_ardour/fft_result.h') 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 */ -- cgit v1.2.3