VISR  0.11.8
Versatile Interactive Scene Renderer
parametric_iir_coefficient.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_RBBL_PARAMETRIC_IIR_COEFFICIENT_HPP_INCLUDED
4 #define VISR_RBBL_PARAMETRIC_IIR_COEFFICIENT_HPP_INCLUDED
5 
6 #include "export_symbols.hpp"
7 
8 #include <boost/property_tree/ptree_fwd.hpp>
9 
10 #include <iosfwd>
11 #include <iostream>
12 #include <string>
13 #include <vector>
14 
15 namespace visr
16 {
17 namespace rbbl
18 {
19 
20 class VISR_RBBL_LIBRARY_SYMBOL ParametricIirCoefficientBase
21 {
22 public:
23  enum class Type
24  {
25  lowpass,
26  highpass,
27  bandpass,
28  bandstop,
29  highshelf,
30  lowshelf,
31  peak,
32  allpass,
33  };
34 
35  static Type stringToTypeId( std::string const & name );
36 
37  static std::string const & typeIdToString( Type typeId );
38 
39 private:
40  class TypeIdTranslator;
41 
42  static TypeIdTranslator const & translator();
43 };
44 
45 template< typename CoefficientType = float>
46 class VISR_RBBL_LIBRARY_SYMBOL ParametricIirCoefficient: public ParametricIirCoefficientBase
47 {
48 public:
53 
55 
57 
58  explicit ParametricIirCoefficient( Type typeId,
59  CoefficientType centerFrequency,
60  CoefficientType quality,
61  CoefficientType gain = static_cast<CoefficientType>(0.0) );
62 
63  Type type() const { return mType; }
64 
65  CoefficientType frequency() const { return mFrequency; }
66 
67  CoefficientType quality() const {return mQuality; }
68 
69  CoefficientType gain() const { return mGain; }
70 
71  void setType( Type newType );
72 
73  void setFrequency( CoefficientType newFrequency );
74 
75  void setQuality( CoefficientType newQuality );
76 
77  void setGain( CoefficientType newGain );
78 
83  static ParametricIirCoefficient fromJson( boost::property_tree::ptree const & tree );
84 
85  static ParametricIirCoefficient fromJson( std::basic_istream<char> & stream );
86 
87  static ParametricIirCoefficient fromJson( std::string const & str );
88 
89  static ParametricIirCoefficient fromXml( boost::property_tree::ptree const & tree );
90 
91  static ParametricIirCoefficient fromXml( std::basic_istream<char> & stream );
92 
93  static ParametricIirCoefficient fromXml( std::string const & str );
95 
96 
97  ParametricIirCoefficient & operator=( ParametricIirCoefficient const & rhs ) = default;
98 
99  void loadJson( boost::property_tree::ptree const & tree );
100 
101  void loadJson( std::basic_istream<char> & stream );
102 
103  void loadJson( std::string const & str );
104 
105 
106  void loadXml( boost::property_tree::ptree const & tree );
107 
108  void loadXml( std::basic_istream<char> & stream );
109 
110  void loadXml( std::string const & str);
111 
112 
117  void writeJson( boost::property_tree::ptree & tree ) const;
118 
119  void writeJson( std::basic_ostream<char> & stream ) const;
120 
121  void writeJson( std::string & str ) const;
122 
123  void writeXml( boost::property_tree::ptree & tree ) const;
124 
125  void writeXml ( std::basic_ostream<char> & stream ) const;
126 
127  void writeXml ( std::string & str ) const;
128 
130 private:
131  Type mType;
132 
136  CoefficientType mFrequency;
137 
138  CoefficientType mQuality;
139 
144  CoefficientType mGain;
145 };
146 
147 template< typename CoefficientType >
148 class VISR_RBBL_LIBRARY_SYMBOL ParametricIirCoefficientList
149 {
150 public:
152  using Container = std::vector< Element >;
153  using const_iterator = typename Container::const_iterator;
154  using iterator = typename Container::iterator;
155 
159  ParametricIirCoefficientList() = default;
160 
165 
170 
171  ~ParametricIirCoefficientList() = default;
172 
177 
181  explicit ParametricIirCoefficientList( std::size_t numCoeffs,
182  ParametricIirCoefficient<CoefficientType> const & initialValue )
183  : mCoeffs( numCoeffs, initialValue )
184  {
185  }
186 
187  explicit ParametricIirCoefficientList( std::initializer_list< ParametricIirCoefficient< CoefficientType > > initList )
188  : mCoeffs( initList )
189  {
190  }
191 
192  void loadJson( boost::property_tree::ptree const & tree );
193 
194  void loadJson( std::basic_istream<char> & stream );
195 
196  void loadJson( std::string const & str );
197 
198  void loadXml( boost::property_tree::ptree const & tree );
199 
200  void loadXml( std::basic_istream<char> & stream );
201 
202  void loadXml( std::string const & str );
203 
204  void writeJson( boost::property_tree::ptree & tree ) const;
205 
206  void writeJson( std::basic_ostream<char> & stream ) const;
207 
208  void writeJson( std::string & str ) const;
209 
210  void writeXml( boost::property_tree::ptree & tree ) const;
211 
212  void writeXml( std::basic_ostream<char> & stream ) const;
213 
214  void writeXml( std::string & str ) const;
215 
216  std::size_t size() const { return mCoeffs.size(); }
217 
218  void resize( std::size_t newSize )
219  {
220  mCoeffs.resize( newSize );
221  std::fill( begin(), end(), Element() );
222  }
223 
224  bool empty() const { return mCoeffs.empty(); }
225 
226  Element const & operator[]( std::size_t index ) const { return mCoeffs[index]; }
227  Element & operator[]( std::size_t index ) { return mCoeffs[index]; }
228 
229  Element const & at( std::size_t index ) const { return mCoeffs.at(index); }
230  Element & at( std::size_t index ) { return mCoeffs.at( index ); }
231 
232 
233  const_iterator begin() const { return mCoeffs.begin(); }
234  const_iterator end() const { return mCoeffs.end(); }
235 
236  iterator begin() { return mCoeffs.begin(); }
237  iterator end() { return mCoeffs.end(); }
238 
239 
240 
241 private:
242  Container mCoeffs;
243 };
244 
245 } // namespace rbbl
246 } // namespace visr
247 
248 #endif // VISR_RBBL_PARAMETRIC_IIR_COEFFICIENT_HPP_INCLUDED
Element const & operator[](std::size_t index) const
Definition: parametric_iir_coefficient.hpp:226
Element & operator[](std::size_t index)
Definition: parametric_iir_coefficient.hpp:227
bool empty() const
Definition: parametric_iir_coefficient.hpp:224
Definition: parametric_iir_coefficient.hpp:46
Element const & at(std::size_t index) const
Definition: parametric_iir_coefficient.hpp:229
iterator end()
Definition: parametric_iir_coefficient.hpp:237
CoefficientType quality() const
Definition: parametric_iir_coefficient.hpp:67
CoefficientType gain() const
Definition: parametric_iir_coefficient.hpp:69
std::size_t size() const
Definition: parametric_iir_coefficient.hpp:216
Type
Definition: parametric_iir_coefficient.hpp:23
std::vector< Element > Container
Definition: parametric_iir_coefficient.hpp:152
Definition: options.cpp:10
typename Container::const_iterator const_iterator
Definition: parametric_iir_coefficient.hpp:153
Element & at(std::size_t index)
Definition: parametric_iir_coefficient.hpp:230
Type type() const
Definition: parametric_iir_coefficient.hpp:63
ParametricIirCoefficientList(std::initializer_list< ParametricIirCoefficient< CoefficientType > > initList)
Definition: parametric_iir_coefficient.hpp:187
void resize(std::size_t newSize)
Definition: parametric_iir_coefficient.hpp:218
Definition: parametric_iir_coefficient.hpp:148
ParametricIirCoefficientList(std::size_t numCoeffs, ParametricIirCoefficient< CoefficientType > const &initialValue)
Definition: parametric_iir_coefficient.hpp:181
typename Container::iterator iterator
Definition: parametric_iir_coefficient.hpp:154
const_iterator begin() const
Definition: parametric_iir_coefficient.hpp:233
CoefficientType frequency() const
Definition: parametric_iir_coefficient.hpp:65
const_iterator end() const
Definition: parametric_iir_coefficient.hpp:234
Definition: parametric_iir_coefficient.hpp:20
iterator begin()
Definition: parametric_iir_coefficient.hpp:236