X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Ffft_result.h;h=d7895b0f6044c7bc395d4d76acc03747555d3420;hb=d883d4623ab326b921e6a26d5ea47bf609bd4a85;hp=ddf2bb18424fdd04568b4b817960dbb013685fde;hpb=6fa6514cfdb0ce38d93b51197f599dfd091bad1d;p=ardour.git diff --git a/gtk2_ardour/fft_result.h b/gtk2_ardour/fft_result.h index ddf2bb1842..d7895b0f60 100644 --- a/gtk2_ardour/fft_result.h +++ b/gtk2_ardour/fft_result.h @@ -1,26 +1,26 @@ /* - 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 +#include #include #include @@ -31,47 +31,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 */