| 
							- #pragma once
 - 
 - #include "LookupTable.h"
 - 
 - // TODO: this class should not be templatized. the functions should
 - template<typename T>
 - class LookupTableFactory
 - {
 - public:
 -     /**
 -      * domain (x) = -1 .. +1
 -      */
 -     static void makeBipolarAudioTaper(LookupTableParams<T>& params);
 - 
 -     /**
 -      * domain (x) = 0..1
 -      */
 -     static void makeAudioTaper(LookupTableParams<T>& params);
 - 
 -     static double audioTaperKnee()
 -     {
 -         return -24;
 -     }
 -     /**
 -     * Factory methods for exp base 2
 -     * domain = 0..10
 -     * range = 20..20k (for now). but should be .001 to 1.0?
 -     */
 -     static void makeExp2(LookupTableParams<T>& params);
 -     static double exp2YMin()
 -     {
 -         return  4;
 -     }
 -     static double exp2YMax()
 -     {
 -         return  40000;
 -     }
 -     static double exp2XMin()
 -     {
 -         return  std::log2(exp2YMin());
 -     }
 -     static double exp2XMax()
 -     {
 -         return  std::log2(exp2YMax());
 -     }
 - 
 -     static void makeExp2ExLow(LookupTableParams<T>& params);
 -     static double exp2ExLowYMin()
 -     {
 -         return  2;
 -     }
 - 
 -     static double exp2ExLowYMax()
 -     {
 -         return  400;
 -     }
 -     static double exp2ExLowXMin()
 -     {
 -         return  std::log2(exp2ExLowYMin());
 -     }
 -     static double exp2ExLowXMax()
 -     {
 -         return  std::log2(exp2ExLowYMax());
 -     }
 - 
 -     static void makeExp2ExHigh(LookupTableParams<T>& params);
 -     static double exp2ExHighYMin()
 -     {
 -         return  400;
 -     }
 -     static double exp2ExHighYMax()
 -     {
 -         return  20000;
 -     }
 -     static double exp2ExHighXMin()
 -     {
 -         return  std::log2(exp2ExHighYMin());
 -     }
 - 
 -     static double exp2ExHighXMax()
 -     {
 -         return  std::log2(exp2ExHighYMax());
 -     }
 - 
 - 
 - };
 - 
 - 
 - template<typename T>
 - inline void LookupTableFactory<T>::makeExp2(LookupTableParams<T>& params)
 - {
 -     // 256 enough for one cent
 -     const int bins = 256;
 -     const T xMin = (T) std::log2(exp2YMin());
 -     const T xMax = (T) std::log2(exp2YMax());
 -     assert(xMin < xMax);
 -     LookupTable<T>::init(params, bins, xMin, xMax, [](double x) {
 -         return std::pow(2, x);
 -         });
 - }
 - 
 - // hit specs with 256 / 128 @200 crossover
 - // try 800 ng - need 256/256
 - // 400 need 256 / 128
 - template<typename T>
 - inline void LookupTableFactory<T>::makeExp2ExHigh(LookupTableParams<T>& params)
 - {
 -     const int bins = 512;
 -     const T xMin = (T) std::log2(exp2ExHighYMin());
 -     const T xMax = (T) std::log2(exp2ExHighYMax());
 -     assert(xMin < xMax);
 -     LookupTable<T>::init(params, bins, xMin, xMax, [](double x) {
 -         return std::pow(2, x);
 -         });
 - }
 - 
 - template<typename T>
 - inline void LookupTableFactory<T>::makeExp2ExLow(LookupTableParams<T>& params)
 - {
 -     const int bins = 256;
 -     const T xMin = (T) std::log2(exp2ExLowYMin());
 -     const T xMax = (T) std::log2(exp2ExLowYMax());
 -     assert(xMin < xMax);
 -     LookupTable<T>::init(params, bins, xMin, xMax, [](double x) {
 -         return std::pow(2, x);
 -         });
 - }
 - 
 - template<typename T>
 - inline void LookupTableFactory<T>::makeBipolarAudioTaper(LookupTableParams<T>& params)
 - {
 -     const int bins = 32;
 -     std::function<double(double)> audioTaper = AudioMath::makeFunc_AudioTaper(audioTaperKnee());
 -     const T xMin = -1;
 -     const T xMax = 1;
 -     LookupTable<T>::init(params, bins, xMin, xMax, [audioTaper](double x) {
 -         return (x >= 0) ? audioTaper(x) : -audioTaper(-x);
 -         });
 - 
 - }
 - 
 - template<typename T>
 - inline void LookupTableFactory<T>::makeAudioTaper(LookupTableParams<T>& params)
 - {
 -     const int bins = 32;
 -     std::function<double(double)> audioTaper = AudioMath::makeFunc_AudioTaper(audioTaperKnee());
 -     const T xMin = 0;
 -     const T xMax = 1;
 -     LookupTable<T>::init(params, bins, xMin, xMax, [audioTaper](double x) {
 -         return audioTaper(x);
 -         });
 - 
 - }
 
 
  |