VISR  0.11.7
Versatile Interactive Scene Renderer
delay_vector.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_VECTOR_HPP_INCLUDED
4 #define VISR_LIBRCL_DELAY_VECTOR_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_vector.hpp>
15 
18 
20 
21 #include <cstddef> // for std::size_t
22 #include <memory>
23 #include <valarray>
24 
25 namespace visr
26 {
27 
28 namespace rcl
29 {
30 
42 class VISR_RCL_LIBRARY_SYMBOL DelayVector: public AtomicComponent
43 {
44  using SampleType = visr::SampleType;
45 public:
47 
51  enum class ControlPortConfig
52  {
53  None = 0,
54  Delay = 1 << 0,
55  Gain = 1 << 1,
56  All = Delay | Gain
57  };
58 
65  explicit DelayVector( SignalFlowContext const & context,
66  char const * name,
67  CompositeComponent * parent = nullptr );
68 
89  void setup( std::size_t numberOfChannels,
90  std::size_t interpolationSteps,
91  SampleType maximumDelaySeconds,
92  const char * interpolationMethod,
93  MethodDelayPolicy methodDelayPolicy,
94  ControlPortConfig controlInputs = ControlPortConfig::None,
95  SampleType initialDelaySeconds = static_cast<SampleType>(0.0),
96  SampleType initialGainLinear = static_cast<SampleType>(1.0) );
117  void setup( std::size_t numberOfChannels,
118  std::size_t interpolationSteps,
119  SampleType maximumDelaySeconds,
120  const char * interpolationMethod,
121  MethodDelayPolicy methodDelayPolicy,
122  ControlPortConfig controlInputs,
123  efl::BasicVector< SampleType > const & initialDelaysSeconds,
124  efl::BasicVector< SampleType > const & initialGainsLinear );
125 
130  void process( );
131 
156  void setDelayAndGain( efl::BasicVector< SampleType > const & newDelays,
157  efl::BasicVector< SampleType > const & newGains );
158 
173  void setDelay( efl::BasicVector< SampleType > const & newDelays );
174 
189  void setGain( efl::BasicVector< SampleType > const & newGains );
190 
191 private:
192 
196  AudioInput mInput;
197 
201  AudioOutput mOutput;
202 
203  std::unique_ptr<ParameterInput<pml::DoubleBufferingProtocol, pml::VectorParameter<SampleType> > > mDelayInput;
204 
205  std::unique_ptr<ParameterInput<pml::DoubleBufferingProtocol, pml::VectorParameter<SampleType> > > mGainInput;
206 
210  std::size_t mNumberOfChannels;
211 
212  std::unique_ptr<rbbl::MultichannelDelayLine<SampleType> > mDelayLine;
213 
214  std::size_t mDelayInterpolationCounter;
215 
220  std::size_t mGainInterpolationCounter;
221 
226  std::size_t mInterpolationBlocks;
227 
231  efl::BasicVector< SampleType > mCurrentGains;
235  efl::BasicVector< SampleType > mCurrentDelays;
243  efl::BasicVector< SampleType > mNextDelays;
244 
249  SampleType const cSamplingFrequency;
250 };
251 
257 
263 
264 } // namespace rcl
265 } // namespace visr
266 
267 #endif // #ifndef VISR_LIBRCL_DELAY_VECTOR_HPP_INCLUDED
MethodDelayPolicy
Definition: multichannel_delay_line.hpp:36
Definition: delay_vector.hpp:42
CrossfadingFirFilterMatrix::ControlPortConfig operator &(CrossfadingFirFilterMatrix::ControlPortConfig lhs, CrossfadingFirFilterMatrix::ControlPortConfig rhs)
Definition: crossfading_fir_filter_matrix.cpp:16
Definition: options.cpp:10
Definition: atomic_component.hpp:21
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
ControlPortConfig
Definition: delay_vector.hpp:51
float SampleType
Definition: constants.hpp:14