VISR  0.12.0
Versatile Interactive Scene Renderer
interpolating_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_INTERPOLATING_FIR_FILTER_MATRIX_HPP_INCLUDED
4 #define VISR_LIBRCL_INTERPOLATING_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 
20 
23 
24 #include <cstddef> // for std::size_t
25 #include <memory>
26 
27 namespace visr
28 {
29 // forward declaration
30 namespace rbbl
31 {
32 template< typename SampleType >
33 class InterpolatingConvolverUniform;
34 }
35 
36 namespace rcl
37 {
38 
45 class VISR_RCL_LIBRARY_SYMBOL InterpolatingFirFilterMatrix: public AtomicComponent
46 {
47  using SampleType = visr::SampleType;
48 public:
49 
53  enum class ControlPortConfig
54  {
55  None = 0,
56  Filters = 1 << 0,
57  Routings = 1 << 1,
58  Interpolants = 1 << 2,
59  All = Filters | Routings
60  };
61 
87  explicit InterpolatingFirFilterMatrix( SignalFlowContext const & context,
88  char const * name,
89  CompositeComponent * parent,
90  std::size_t numberOfInputs,
91  std::size_t numberOfOutputs,
92  std::size_t filterLength,
93  std::size_t maxFilters,
94  std::size_t maxRoutings,
95  std::size_t numberOfInterpolants,
96  std::size_t transitionSamples,
100  ControlPortConfig controlInputs = ControlPortConfig::None,
101  char const * fftImplementation = "default" );
102 
107 
108 
109 
113  void process( );
114 
119  void clearRoutings();
120 
130  void addRouting( std::size_t inputIdx, std::size_t outputIdx, std::size_t filterIdx,
131  SampleType const gain = static_cast<SampleType>(1.0) );
132 
133  void addRouting( rbbl::FilterRouting const & routing );
134 
135  void addRoutings( rbbl::FilterRoutingList const & routings );
136 
137  void setRoutings( rbbl::FilterRoutingList const & routings );
138 
139  bool removeRouting( std::size_t inputIdx, std::size_t outputIdx );
140 
141  void clearFilters( );
142 
143  void setFilter( std::size_t filterIdx, SampleType const * const impulseResponse, std::size_t filterLength, std::size_t alignment =0 );
144 
145  void setFilters( efl::BasicMatrix<SampleType> const & filterSet );
146 
147 private:
151  AudioInput mInput;
152 
156  AudioOutput mOutput;
157 
158  std::unique_ptr<ParameterInput<pml::MessageQueueProtocol, pml::IndexedValueParameter< std::size_t, std::vector<SampleType > > > > mSetFilterInput;
159 
160  std::unique_ptr<ParameterInput<pml::MessageQueueProtocol, pml::InterpolationParameter > > mInterpolantInput;
161 
162 
163  std::unique_ptr<rbbl::InterpolatingConvolverUniform<SampleType> > mConvolver;
164 };
165 
171 
177 
178 } // namespace rcl
179 } // namespace visr
180 
181 #endif // #ifndef VISR_LIBRCL_INTERPOLATING_FIR_FILTER_MATRIX_HPP_INCLUDED
Definition: filter_routing.hpp:22
Definition: interpolation_parameter.hpp:85
Definition: interpolating_fir_filter_matrix.hpp:45
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
ControlPortConfig
Definition: interpolating_fir_filter_matrix.hpp:53
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