diff options
Diffstat (limited to 'arts/gui/kde/dbvolcalc.h')
-rw-r--r-- | arts/gui/kde/dbvolcalc.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/arts/gui/kde/dbvolcalc.h b/arts/gui/kde/dbvolcalc.h new file mode 100644 index 00000000..8d99bf59 --- /dev/null +++ b/arts/gui/kde/dbvolcalc.h @@ -0,0 +1,82 @@ +/* + Copyright ( C ) 2003 Arnold Krille <arnold@arnoldarts.de> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; + version 2 of the License. + + This library 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 + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +#ifndef ARTS_DB2VOL_CALC_H +#define ARTS_DB2VOL_CALC_H + +#include <math.h> + +class dB2VolCalc { +private: + float _base; +public: + dB2VolCalc( float _dbmin, float _dbmax ) + : _base( 6/log10( double(2) ) ) // Depends on what you measure: intensity(10), pressure(20), old artscontrol(6/lg2 (near 20)) + , dbmax( _dbmax ) + , dbmin( _dbmin ) + {} + + float dbmax, dbmin; + /** + Logarithmic/decimal valuation: + p = ampfactor ( linear ) + db = dezibel ( logarithmic ) + p = 10^( d/10 ) + db = 10*lg( p ) + + artscontrol was using + db = 6/ln( 2 ) * ln( p ) + which would be + db = 6/lg( 2 ) * lg( p ) + */ + float amptodb( float p ) { + float db = _base*log10( p ); + if ( db < dbmin ) db = dbmin; + if ( db > dbmax ) db = dbmax; + return db; + } + float dbtoamp( float db ) { + float amp = pow( 10, db/_base ); + if ( amp <= pow( 10, dbmin/_base ) ) amp = 0; + return amp; + } + /// With ndb = normalized dB (between 0 and 1) + float amptondb( float p ) { + return dbtondb( amptodb( p ) ); //- dbmin ) / ( dbmax - dbmin ); + } + float ndbtoamp( float ndb ) { + return dbtoamp( ndb * ( dbmax - dbmin ) + dbmin ); + } + /// Normalizes a dezibel value. + float dbtondb( float db ) { + return ( db - dbmin )/( dbmax - dbmin ); + } + /// Normalizes a volume to a logarithmic value between 0 and 1. + float dbtovol( float db ) { + return ( db -dbmin )/( 0-dbmin ); + } + /// Unnormalizes a dezibel value. + float ndbtodb( float ndb ) { + return ( ndb * ( dbmax-dbmin ) +dbmin ); + } +}; + +#endif +// vim: sw=4 ts=4 |