NAP
levelmeternode.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Std includes
8 #include <atomic>
9 
10 // Audio includes
11 #include <audio/core/audionode.h>
12 #include <audio/utility/dirtyflag.h>
13 #include <audio/utility/safeptr.h>
14 #include <audio/core/process.h>
15 
16 namespace nap
17 {
18  namespace audio
19  {
20 
21  // Forward declarations
22  class AudioService;
23 
29  class NAPAPI LevelMeterNode : public Node
30  {
31  public:
32  enum Type
33  {
34  PEAK, RMS
35  };
36 
42  LevelMeterNode(NodeManager& nodeManager, TimeValue analysisWindowSize = 10, bool rootProcess = true);
43 
44  virtual ~LevelMeterNode();
45 
46  InputPin input = {this};
51  float getLevel();
52 
56  void setType(Type type) { mType = type; }
57 
58  // Inherited from Node
59  void process() override;
60  void sampleRateChanged(float sampleRate) override;
61 
62  private:
63  float calculateRms(); // Calculates output value out of one buffer of data using root mean square algorithm
64  float
65  calculatePeak(); // Calculates output value out of one buffer of data by determining the maximum amplitude of the buffer.
66 
67  SampleBuffer mBuffer; // Buffer being analyzed
68  float mValue = 0; // Calculated output level value
69  int mIndex = 0; // Current write index of the buffer being analyzed.
70  Type mType = Type::RMS; // Algorithm currently being used to calculate the output level value from one buffer.
71  DirtyFlag mDirty;
72  TimeValue mAnalysisWindowSize = 0.f;
73 
74  bool mRootProcess = false;
75  };
76 
77  }
78 }
nap::audio::LevelMeterNode
Definition: levelmeternode.h:29
nap::audio::TimeValue
float TimeValue
Definition: audiotypes.h:119
nap::audio::NodeManager
Definition: audionodemanager.h:33
nap::audio::LevelMeterNode::Type
Type
Definition: levelmeternode.h:32
nap::audio::LevelMeterNode::setType
void setType(Type type)
Definition: levelmeternode.h:56
nap::audio::Node
Definition: audionode.h:33
nap::audio::InputPin
Definition: audiopin.h:87
nap
Definition: templateapp.h:17
nap::audio::SampleBuffer
std::vector< SampleValue > SampleBuffer
Definition: audiotypes.h:34
nap::audio::DirtyFlag
Definition: dirtyflag.h:20