VISR  0.11.8
Versatile Interactive Scene Renderer
delay_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_DELAY_MATRIX_HPP_INCLUDED
4 #define VISR_LIBRCL_DELAY_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 #include <valarray>
25 
26 namespace visr
27 {
28 
29 namespace rcl
30 {
31 
43 class VISR_RCL_LIBRARY_SYMBOL DelayMatrix: public AtomicComponent
44 {
45  using SampleType = visr::SampleType;
46 public:
48 
52  enum class ControlPortConfig
53  {
54  None = 0,
55  Delay = 1<<0,
56  Gain = 1<<1,
57  All = Delay | Gain
58  };
59 
67  explicit DelayMatrix( SignalFlowContext const & context,
68  char const * name,
69  CompositeComponent * parent = nullptr );
70 
96  explicit DelayMatrix( SignalFlowContext const & context,
97  char const * name,
98  CompositeComponent * parent,
99  std::size_t numberOfInputs,
100  std::size_t numberOfOutputs,
101  std::size_t interpolationSteps,
102  SampleType maximumDelaySeconds,
103  const char * interpolationMethod,
104  MethodDelayPolicy methodDelayPolicy,
105  ControlPortConfig controlInputs,
106  SampleType initialDelaySeconds = static_cast<SampleType>(0.0),
107  SampleType initialGainLinear = static_cast<SampleType>(1.0) );
108 
135  explicit DelayMatrix( SignalFlowContext const & context,
136  char const * name,
137  CompositeComponent * parent,
138  std::size_t numberOfInputs,
139  std::size_t numberOfOutputs,
140  std::size_t interpolationSteps,
141  SampleType maximumDelaySeconds,
142  const char * interpolationMethod,
143  MethodDelayPolicy methodDelayPolicy,
144  ControlPortConfig controlInputs,
145  efl::BasicMatrix< SampleType > const & initialDelaysSeconds,
146  efl::BasicMatrix< SampleType > const & initialGainsLinear );
147 
168  void setup( std::size_t numberOfInputs,
169  std::size_t numberOfOutputs,
170  std::size_t interpolationSteps,
171  SampleType maximumDelaySeconds,
172  const char * interpolationMethod,
173  MethodDelayPolicy methodDelayPolicy,
174  ControlPortConfig controlInputs,
175  SampleType initialDelaySeconds = static_cast<SampleType>(0.0),
176  SampleType initialGainLinear = static_cast<SampleType>(1.0) );
177 
199  void setup( std::size_t numberOfInputs,
200  std::size_t numberOfOutputs,
201  std::size_t interpolationSteps,
202  SampleType maximumDelaySeconds,
203  const char * interpolationMethod,
204  MethodDelayPolicy methodDelayPolicy,
205  ControlPortConfig controlInputs,
206  efl::BasicMatrix< SampleType > const & initialDelaysSeconds,
207  efl::BasicMatrix< SampleType > const & initialGainsLinear );
208 
213  void process( );
214 
239  void setDelayAndGain( efl::BasicMatrix< SampleType > const & newDelays,
240  efl::BasicMatrix< SampleType > const & newGains );
241 
256  void setDelay( efl::BasicMatrix< SampleType > const & newDelays );
257 
272  void setGain( efl::BasicMatrix< SampleType > const & newGains );
273 
274 private:
275 
279  AudioInput mInput;
280 
284  AudioOutput mOutput;
285 
286  std::unique_ptr<ParameterInput<pml::DoubleBufferingProtocol, pml::MatrixParameter<SampleType> > > mDelayInput;
287 
288  std::unique_ptr<ParameterInput<pml::DoubleBufferingProtocol, pml::MatrixParameter<SampleType> > > mGainInput;
289 
290  std::unique_ptr<rbbl::MultichannelDelayLine<SampleType> > mDelayLine;
291 
292  std::size_t mDelayInterpolationCounter;
293 
298  std::size_t mGainInterpolationCounter;
299 
304  std::size_t mInterpolationBlocks;
305 
309  efl::BasicMatrix< SampleType > mCurrentGains;
313  efl::BasicMatrix< SampleType > mCurrentDelays;
321  efl::BasicMatrix< SampleType > mNextDelays;
322 
328 
333  SampleType const cSamplingFrequency;
334 };
335 
341 
347 
348 
349 } // namespace rcl
350 } // namespace visr
351 
352 #endif // #ifndef VISR_LIBRCL_DELAY_MATRIX_HPP_INCLUDED
MethodDelayPolicy
Definition: multichannel_delay_line.hpp:36
Definition: options.cpp:10
Definition: atomic_component.hpp:21
Definition: composite_component.hpp:29
ControlPortConfig
Definition: delay_matrix.hpp:52
Definition: signal_flow_context.hpp:15
CrossfadingFirFilterMatrix::ControlPortConfig operator|(CrossfadingFirFilterMatrix::ControlPortConfig lhs, CrossfadingFirFilterMatrix::ControlPortConfig rhs)
Definition: crossfading_fir_filter_matrix.cpp:23
CrossfadingFirFilterMatrix::ControlPortConfig operator&(CrossfadingFirFilterMatrix::ControlPortConfig lhs, CrossfadingFirFilterMatrix::ControlPortConfig rhs)
Definition: crossfading_fir_filter_matrix.cpp:16
Definition: delay_matrix.hpp:43
float SampleType
Definition: constants.hpp:14