VISR  0.11.6
Versatile Interactive Scene Renderer
sparse_gain_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_SPARSE_GAIN_MATRIX_HPP_INCLUDED
4 #define VISR_LIBRCL_SPARSE_GAIN_MATRIX_HPP_INCLUDED
5 
6 #include "export_symbols.hpp"
7 
10 #include <libvisr/audio_output.hpp>
11 #include <libvisr/constants.hpp>
13 
14 #include <librbbl/gain_fader.hpp>
16 
22 
23 #include <memory>
24 #include <vector>
25 
26 namespace visr
27 {
28 
29 namespace rcl
30 {
31 
42 class VISR_RCL_LIBRARY_SYMBOL SparseGainMatrix: public AtomicComponent
43 {
44  using SampleType = visr::SampleType;
45 public:
49  enum class ControlPortConfig
50  {
51  No = 0,
52  RoutingPoints = 1,
53  RoutingList = 2,
54  Gain = 4,
55  All = RoutingPoints | RoutingList | Gain
56  };
57 
73  explicit SparseGainMatrix( SignalFlowContext const & context,
74  char const * name,
75  CompositeComponent * parent,
76  std::size_t numberOfInputs,
77  std::size_t numberOfOutputs,
78  std::size_t interpolationSteps,
79  std::size_t maxRoutingPoints,
80  rbbl::SparseGainRoutingList const & initialRoutings
82  ControlPortConfig controlInputs = ControlPortConfig::No );
83 
84  void process( ) override;
85 
86 private:
87  void setRoutings( rbbl::SparseGainRoutingList const & newRoutings );
88 
89  efl::BasicVector<SampleType> mPreviousGains;
90 
92 
94 
95  std::size_t mRampIndex;
96 
97  std::size_t const mNumRoutingPoints;
98 
99  rbbl::GainFader<SampleType> const mGainRamp;
100 
101  AudioInput mInput;
102  AudioOutput mOutput;
103 
107 
108  std::unique_ptr< GainInput > mGainInput;
109 
110  std::unique_ptr< RoutingPointInput > mRoutingPointInput;
111 
112  std::unique_ptr< RoutingListInput > mRoutingListInput;
113 };
114 
120 
126 
127 } // namespace rcl
128 } // namespace visr
129 
130 #endif // #ifndef VISR_LIBRCL_SPARSE_GAIN_MATRIX_HPP_INCLUDED
CrossfadingFirFilterMatrix::ControlPortConfig operator &(CrossfadingFirFilterMatrix::ControlPortConfig lhs, CrossfadingFirFilterMatrix::ControlPortConfig rhs)
Definition: crossfading_fir_filter_matrix.cpp:16
ControlPortConfig
Definition: sparse_gain_matrix.hpp:49
Definition: options.cpp:10
Definition: atomic_component.hpp:21
Definition: parameter_input.hpp:45
Definition: composite_component.hpp:29
Definition: signal_flow_context.hpp:15
CrossfadingFirFilterMatrix::ControlPortConfig operator|(CrossfadingFirFilterMatrix::ControlPortConfig lhs, CrossfadingFirFilterMatrix::ControlPortConfig rhs)
Definition: crossfading_fir_filter_matrix.cpp:23
Definition: sparse_gain_routing.hpp:81
Definition: sparse_gain_matrix.hpp:42
float SampleType
Definition: constants.hpp:14