VISR  0.12.0
Versatile Interactive Scene Renderer
crossfading_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_CROSSFADING_FIR_FILTER_MATRIX_HPP_INCLUDED
4 #define VISR_LIBRCL_CROSSFADING_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 CrossfadingConvolverUniform;
32 }
33 
34 namespace rcl
35 {
36 
43 class VISR_RCL_LIBRARY_SYMBOL CrossfadingFirFilterMatrix: 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 
82  explicit CrossfadingFirFilterMatrix( SignalFlowContext const & context,
83  char const * name,
84  CompositeComponent * parent,
85  std::size_t numberOfInputs,
86  std::size_t numberOfOutputs,
87  std::size_t filterLength,
88  std::size_t maxFilters,
89  std::size_t maxRoutings,
90  std::size_t transitionSamples,
93  ControlPortConfig controlInputs = ControlPortConfig::None,
94  char const * fftImplementation = "default" );
95 
100 
104  void process( );
105 
110  void clearRoutings();
111 
121  void addRouting( std::size_t inputIdx, std::size_t outputIdx, std::size_t filterIdx,
122  SampleType const gain = static_cast<SampleType>(1.0) );
123 
124  void addRouting( rbbl::FilterRouting const & routing );
125 
126  void addRoutings( rbbl::FilterRoutingList const & routings );
127 
128  void setRoutings( rbbl::FilterRoutingList const & routings );
129 
130  bool removeRouting( std::size_t inputIdx, std::size_t outputIdx );
131 
132  void clearFilters( );
133 
134  void setFilter( std::size_t filterIdx, SampleType const * const impulseResponse, std::size_t filterLength, std::size_t alignment =0 );
135 
136  void setFilters( efl::BasicMatrix<SampleType> const & filterSet );
137 
138 private:
142  AudioInput mInput;
143 
147  AudioOutput mOutput;
148 
149  std::unique_ptr<ParameterInput<pml::MessageQueueProtocol, pml::IndexedValueParameter< std::size_t, std::vector<SampleType > > > > mSetFilterInput;
150 
151  std::unique_ptr<rbbl::CrossfadingConvolverUniform<SampleType> > mConvolver;
152 };
153 
159 
165 
166 } // namespace rcl
167 } // namespace visr
168 
169 #endif // #ifndef VISR_LIBRCL_CROSSFADING_FIR_FILTER_MATRIX_HPP_INCLUDED
Definition: filter_routing.hpp:22
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
Definition: crossfading_fir_filter_matrix.hpp:43
ControlPortConfig
Definition: crossfading_fir_filter_matrix.hpp:51
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