VISR  0.11.8
Versatile Interactive Scene Renderer
reverb_parameter_calculator.hpp
Go to the documentation of this file.
1 /* Copyright Institute of Sound and Vibration Research - All rights reserved */
2 
3 #ifndef VISR_LIBREVERBOBJECT_REVERB_PARAMETER_CALCULATOR_HPP_INCLUDED
4 #define VISR_LIBREVERBOBJECT_REVERB_PARAMETER_CALCULATOR_HPP_INCLUDED
5 
6 // Preliminary solution, dependencies between components are suboptimal
8 
10 
11 #include "export_symbols.hpp"
12 
14 #include <libvisr/constants.hpp>
15 
20 #include <libpml/object_vector.hpp>
24 
25 #include <libobjectmodel/object.hpp> // needed basically for type definitions
26 
28 #include <libpanning/VBAP.h>
29 
30 #include <memory>
31 #include <vector>
32 
33 namespace visr
34 {
35 // Forward declarations
36 namespace rbbl
37 {
38  class ObjectChannelAllocator;
39 }
40 
41 namespace reverbobject
42 {
43 
47 class VISR_REVERBOBJECT_LIBRARY_SYMBOL ReverbParameterCalculator: public AtomicComponent
48 {
49 public:
56  explicit ReverbParameterCalculator( SignalFlowContext const & context,
57  char const * name,
58  CompositeComponent * parent = nullptr );
59 
64 
65 
70 
80  void setup( panning::LoudspeakerArray const & arrayConfig,
81  std::size_t numberOfObjects,
82  std::size_t numberOfDiscreteReflectionsPerSource,
83  std::size_t numBiquadSectionsReflectionFilters,
84  SampleType lateReflectionLengthSeconds,
85  std::size_t numLateReflectionSubBandFilters );
86 
90  void process() override;
91 
92 private:
93  void processSingleObject( objectmodel::PointSourceWithReverb const & reverbobject, std::size_t renderChannel,
94  efl::BasicVector<SampleType> & discreteReflGains,
95  efl::BasicVector<SampleType> & discreteReflDelays,
97  efl::BasicMatrix<SampleType> & discretePanningMatrix,
98  efl::BasicVector<SampleType> & lateReverbGains,
99  efl::BasicVector<SampleType> & lateReverbDelays );
100 
105  void clearSingleObject( std::size_t renderChannel,
106  efl::BasicVector<SampleType> & discreteReflGains,
107  efl::BasicVector<SampleType> & discreteReflDelays,
109  efl::BasicMatrix<SampleType> & discretePanningMatrix,
110  efl::BasicVector<SampleType> & lateReverbGains,
111  efl::BasicVector<SampleType> & lateReverbDelays );
112 
113  std::unique_ptr<rbbl::ObjectChannelAllocator> mChannelAllocator;
114 
118  std::size_t mMaxNumberOfObjects;
119 
120  std::size_t mNumberOfDiscreteReflectionsPerSource;
121  std::size_t mNumberOfBiquadSectionsReflectionFilters;
122  SampleType mLateReflectionLengthSeconds;
123  std::size_t mNumberOfLateReflectionSubBandFilters;
124 
125  std::size_t mNumberOfPanningLoudspeakers;
126 
130  std::unique_ptr<panning::VBAP> mVbapCalculator;
131 
136  static const objectmodel::PointSourceWithReverb::LateReverb cDefaultLateReverbParameter;
137 
142  std::vector<objectmodel::PointSourceWithReverb::LateReverb> mPreviousLateReverbs;
143 
148  SampleType const cLateReverbParameterComparisonLimit;
149 
159 
164  mutable efl::BasicVector<SampleType> mTmpPanningGains;
165 };
166 
167 } // namespace reverbobject
168 } // namespace visr
169 
170 #endif // #ifndef VISR_LIBREVERBOBJECT_REVERB_PARAMETER_CALCULATOR_HPP_INCLUDED
Definition: biquad_parameter.hpp:45
std::vector< objectmodel::PointSourceWithReverb::LateReverb > mPreviousLateReverbs
Definition: reverb_parameter_calculator.cpp:65
Definition: reverb_parameter_calculator.hpp:47
Definition: options.cpp:10
Definition: atomic_component.hpp:21
Definition: composite_component.hpp:29
Definition: LoudspeakerArray.h:42
Definition: signal_flow_context.hpp:15
Definition: point_source_with_reverb.hpp:158
Definition: point_source_with_reverb.hpp:31
float SampleType
Definition: constants.hpp:14