VISR  0.11.8
Versatile Interactive Scene Renderer
fir_filter_matrix.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_LIBRCL_FIR_FILTER_MATRIX_HPP_INCLUDED
4 #define VISR_LIBRCL_FIR_FILTER_MATRIX_HPP_INCLUDED
5 
6 #include "export_symbols.hpp"
7 
10 #include <libvisr/audio_output.hpp>
11 #include <libvisr/constants.hpp>
13 
14 #include <libefl/basic_matrix.hpp>
15 #include <libefl/basic_vector.hpp>
16 
19 
21 
22 #include <cstddef> // for std::size_t
23 #include <memory>
24 
25 namespace visr
26 {
27 // forward declaration
28 namespace rbbl
29 {
30 template< typename SampleType >
31 class MultichannelConvolverUniform;
32 }
33 
34 namespace rcl
35 {
36 
43 class VISR_RCL_LIBRARY_SYMBOL FirFilterMatrix: public AtomicComponent
44 {
45  using SampleType = visr::SampleType;
46 public:
47 
51  enum class ControlPortConfig
52  {
53  None = 0,
54  Filters = 1 << 0,
55  Routings = 1 << 1,
56  All = Filters | Routings
57  };
58 
65  explicit FirFilterMatrix( SignalFlowContext const & context,
66  char const * name,
67  CompositeComponent * parent = nullptr );
68 
90  explicit FirFilterMatrix( SignalFlowContext const & context,
91  char const * name,
92  CompositeComponent * parent,
93  std::size_t numberOfInputs,
94  std::size_t numberOfOutputs,
95  std::size_t filterLength,
96  std::size_t maxFilters,
97  std::size_t maxRoutings,
100  ControlPortConfig controlInputs = ControlPortConfig::None,
101  char const * fftImplementation = "default" );
102 
106  ~FirFilterMatrix();
107 
126  void setup( std::size_t numberOfInputs,
127  std::size_t numberOfOutputs,
128  std::size_t filterLength,
129  std::size_t maxFilters,
130  std::size_t maxRoutings,
133  ControlPortConfig controlInputs = ControlPortConfig::None,
134  char const * fftImplementation = "default" );
135 
139  void process( );
140 
145  void clearRoutings();
146 
156  void addRouting( std::size_t inputIdx, std::size_t outputIdx, std::size_t filterIdx,
157  SampleType const gain = static_cast<SampleType>(1.0) );
158 
159  void addRouting( rbbl::FilterRouting const & routing );
160 
161  void addRoutings( rbbl::FilterRoutingList const & routings );
162 
163  void setRoutings( rbbl::FilterRoutingList const & routings );
164 
165  bool removeRouting( std::size_t inputIdx, std::size_t outputIdx );
166 
167  void clearFilters( );
168 
169  void setFilter( std::size_t filterIdx, SampleType const * const impulseResponse, std::size_t filterLength, std::size_t alignment =0 );
170 
171  void setFilters( efl::BasicMatrix<SampleType> const & filterSet );
172 
173 private:
177  AudioInput mInput;
178 
182  AudioOutput mOutput;
183 
184  std::unique_ptr<ParameterInput<pml::MessageQueueProtocol, pml::IndexedValueParameter< std::size_t, std::vector<SampleType > > > > mSetFilterInput;
185 
186  std::unique_ptr<rbbl::MultichannelConvolverUniform<SampleType> > mConvolver;
187 };
188 
194 
200 
201 } // namespace rcl
202 } // namespace visr
203 
204 #endif // #ifndef VISR_LIBRCL_FIR_FILTER_MATRIX_HPP_INCLUDED
Definition: filter_routing.hpp:22
ControlPortConfig
Definition: fir_filter_matrix.hpp:51
Definition: fir_filter_matrix.hpp:43
Definition: options.cpp:10
Definition: atomic_component.hpp:21
Definition: composite_component.hpp:29
Definition: signal_flow_context.hpp:15
PortBase::Direction operator|(PortBase::Direction lhs, PortBase::Direction rhs)
Definition: port_base.cpp:10
PortBase::Direction operator&(PortBase::Direction lhs, PortBase::Direction rhs)
Definition: port_base.cpp:16
float SampleType
Definition: constants.hpp:14
Definition: filter_routing.hpp:81