NAP
translator.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 <vector>
9 #include <functional>
10 #include <mathutils.h>
11 
12 // Audio includes
13 #include <audio/utility/audiofunctions.h>
14 
15 
16 namespace nap
17 {
18  namespace audio
19  {
20 
24  template<typename T>
25  class Translator
26  {
27  public:
28  virtual ~Translator() { }
29 
30  virtual T translate(const T& inputValue) = 0;
31 
32  private:
33  };
34 
35 
39  template<typename T>
40  class TableTranslator : public Translator<T>
41  {
42  public:
46  using FillFunction = std::function<T(T)>;
47 
51  TableTranslator(unsigned int size) { mTable.resize(size); }
52 
56  T translate(const T& inputValue) override final
57  {
58  return translate(inputValue, mTable);
59  }
60 
64  void fill(FillFunction fillFunction)
65  {
66  for (int i = 0; i < mTable.size(); i++)
67  {
68  mTable[i] = fillFunction(i / T(mTable.size() - 1));
69  }
70  }
71 
75  static inline T translate(const T& inputValue, const std::vector<T>& inTable)
76  {
77  // scale input accross table size
78  T index = math::clamp(inputValue, 0.f, 1.f) * (inTable.size() - 1);
79 
80  // convert to integer
81  int floor = index;
82 
83  // interpolate
84  T frac = index - floor;
85  if (frac > 0)
86  return lerp(inTable[floor], inTable[floor + 1], frac);
87  else
88  return inTable[floor];
89  }
90 
91  private:
92  std::vector<T> mTable;
93  };
94 
95 
99  template<typename T>
101  {
102  public:
106  EqualPowerTranslator(unsigned int size) : TableTranslator<T>(size)
107  {
108  // fills the table using equal power function
109  TableTranslator<T>::fill([](T x) { return sin(x * math::PI_2); });
110  }
111 
112  private:
113 
114  };
115 
116  }
117 }
118 
nap::audio::TableTranslator::translate
T translate(const T &inputValue) override final
Definition: translator.h:56
nap::audio::TableTranslator
Definition: translator.h:40
nap::audio::TableTranslator::FillFunction
std::function< T(T)> FillFunction
Definition: translator.h:46
nap::audio::TableTranslator::translate
static T translate(const T &inputValue, const std::vector< T > &inTable)
Definition: translator.h:75
nap::audio::TableTranslator::fill
void fill(FillFunction fillFunction)
Definition: translator.h:64
nap::audio::EqualPowerTranslator::EqualPowerTranslator
EqualPowerTranslator(unsigned int size)
Definition: translator.h:106
nap::math::PI_2
constexpr double PI_2
Definition: mathutils.h:26
nap::audio::Translator::translate
virtual T translate(const T &inputValue)=0
nap::audio::lerp
T lerp(const T &v0, const T &v1, const T &t)
Definition: audiofunctions.h:34
nap::audio::Translator::~Translator
virtual ~Translator()
Definition: translator.h:28
nap
Definition: templateapp.h:17
nap::audio::EqualPowerTranslator
Definition: translator.h:100
nap::audio::TableTranslator::TableTranslator
TableTranslator(unsigned int size)
Definition: translator.h:51
nap::audio::Translator
Definition: translator.h:25
nap::math::clamp
T clamp(T value, T min, T max)
Definition: mathutils.h:325