|
- #include <functional>
- #include <time.h>
- #include <cmath>
- #include <limits>
-
- #include "AudioMath.h"
- #include "BiquadParams.h"
- #include "BiquadFilter.h"
- #include "BiquadState.h"
- #include "ColoredNoise.h"
- #include "FrequencyShifter.h"
- #include "HilbertFilterDesigner.h"
- #include "LookupTableFactory.h"
- #include "TestComposite.h"
- #include "Tremolo.h"
- #include "VocalAnimator.h"
- #include "VocalFilter.h"
-
- using Shifter = FrequencyShifter<TestComposite>;
- using Animator = VocalAnimator<TestComposite>;
- using VocFilter = VocalFilter<TestComposite>;
- using Colors = ColoredNoise<TestComposite>;
- using Trem = Tremolo<TestComposite>;
-
- #include "MeasureTime.h"
-
- // There are many tests that are disabled with #if 0.
- // In most cases they still work, but don't need to be run regularly
-
- #if 0
- static void test1()
- {
- double d = .1;
- srand(57);
- const double scale = 1.0 / RAND_MAX;
-
- MeasureTime<float>::run("test1 (do nothing)", [&d, scale]() {
- return TestBuffers<float>::get();
- }, 1);
-
- MeasureTime<float>::run("test1 sin", []() {
- float x = std::sin(TestBuffers<float>::get());
- return x;
- }, 1);
-
- MeasureTime<double>::run("test1 sin double", []() {
- float x = std::sin(TestBuffers<float>::get());
- return x;
- }, 1);
-
- MeasureTime<float>::run("test1 sinx2 float", []() {
- float x = std::sin(TestBuffers<float>::get());
- x = std::sin(x);
- return x;
- }, 1);
-
- MeasureTime<float>::run("mult float-10", []() {
- float x = TestBuffers<float>::get();
- float y = TestBuffers<float>::get();
- return x * y;
- }, 10);
-
- MeasureTime<double>::run("mult dbl", []() {
- double x = TestBuffers<double>::get();
- double y = TestBuffers<double>::get();
- return x * y;
- }, 1);
-
- MeasureTime<float>::run("div float", []() {
- float x = TestBuffers<float>::get();
- float y = TestBuffers<float>::get();
- return x / y;
- }, 1);
-
- MeasureTime<double>::run("div dbl", []() {
- double x = TestBuffers<double>::get();
- double y = TestBuffers<double>::get();
- return x / y;
- }, 1);
-
- MeasureTime<float>::run("test1 (do nothing)", [&d, scale]() {
- return TestBuffers<float>::get();
- }, 1);
-
- MeasureTime<float>::run("test1 pow2 float", []() {
- float x = std::pow(2, TestBuffers<float>::get());
- return x;
- }, 1);
- MeasureTime<float>::run("test1 pow rnd float", []() {
- float x = std::pow(TestBuffers<float>::get(), TestBuffers<float>::get());
- return x;
- }, 1);
-
- MeasureTime<float>::run("test1 exp float", []() {
- float x = std::exp(TestBuffers<float>::get());
- return x;
- }, 1);
- }
- #endif
-
- template <typename T>
- static void testHilbert()
- {
- BiquadParams<T, 3> paramsSin;
- BiquadParams<T, 3> paramsCos;
- BiquadState<T, 3> state;
- HilbertFilterDesigner<T>::design(44100, paramsSin, paramsCos);
-
- MeasureTime<T>::run("hilbert", [&state, ¶msSin]() {
-
- T d = BiquadFilter<T>::run(TestBuffers<T>::get(), state, paramsSin);
- return d;
- }, 1);
- }
-
- #if 0
- static void testExpRange()
- {
- using T = float;
- LookupTableParams<T> table;
- LookupTableFactory<T>::makeExp2(table);
-
- MeasureTime<T>::run("exp lookup", [&table]() {
-
- T d = LookupTable<T>::lookup(table, TestBuffers<T>::get());
- return d;
- }, 1);
- }
- #endif
-
- static void testShifter()
- {
- Shifter fs;
-
- fs.setSampleRate(44100);
- fs.init();
-
- fs.inputs[Shifter::AUDIO_INPUT].value = 0;
-
- MeasureTime<float>::run("shifter", [&fs]() {
- fs.inputs[Shifter::AUDIO_INPUT].value = TestBuffers<float>::get();
- fs.step();
- return fs.outputs[Shifter::SIN_OUTPUT].value;
- }, 1);
- }
-
- static void testAnimator()
- {
- Animator an;
-
- an.setSampleRate(44100);
- an.init();
-
- an.inputs[Shifter::AUDIO_INPUT].value = 0;
-
- MeasureTime<float>::run("animator", [&an]() {
- an.inputs[Shifter::AUDIO_INPUT].value = TestBuffers<float>::get();
- an.step();
- return an.outputs[Shifter::SIN_OUTPUT].value;
- }, 1);
- }
-
-
- static void testVocalFilter()
- {
- VocFilter an;
-
- an.setSampleRate(44100);
- an.init();
-
- an.inputs[Shifter::AUDIO_INPUT].value = 0;
-
- MeasureTime<float>::run("vocal filter", [&an]() {
- an.inputs[Shifter::AUDIO_INPUT].value = TestBuffers<float>::get();
- an.step();
- return an.outputs[Shifter::SIN_OUTPUT].value;
- }, 1);
- }
-
-
-
- static void testColors()
- {
- Colors co;
-
- co.setSampleRate(44100);
- co.init();
-
-
- MeasureTime<float>::run("colors", [&co]() {
- co.step();
- return co.outputs[Colors::AUDIO_OUTPUT].value;
- }, 1);
- }
-
- static void testTremolo()
- {
- Trem tr;
-
- tr.setSampleRate(44100);
- tr.init();
-
-
- MeasureTime<float>::run("trem", [&tr]() {
- tr.inputs[Trem::AUDIO_INPUT].value = TestBuffers<float>::get();
- tr.step();
- return tr.outputs[Trem::AUDIO_OUTPUT].value;
- }, 1);
- }
-
- #if 0
- static void testAttenuverters()
- {
- auto scaler = AudioMath::makeLinearScaler<float>(-2, 2);
- MeasureTime<float>::run("linear scaler", [&scaler]() {
- float cv = TestBuffers<float>::get();
- float knob = TestBuffers<float>::get();
- float trim = TestBuffers<float>::get();
- return scaler(cv, knob, trim);
- }, 1);
-
- LookupTableParams<float> lookup;
- LookupTableFactory<float>::makeBipolarAudioTaper(lookup);
- MeasureTime<float>::run("bipolar lookup", [&lookup]() {
- float x = TestBuffers<float>::get();
- return LookupTable<float>::lookup(lookup, x);
- }, 1);
-
-
- // auto refFuncPos = AudioMath::makeFunc_AudioTaper(LookupTableFactory<T>::audioTaperKnee());
-
- {
-
- auto bipolarScaler = [&lookup, &scaler](float cv, float knob, float trim) {
- float scaledTrim = LookupTable<float>::lookup(lookup, cv);
- return scaler(cv, knob, scaledTrim);
- };
-
- MeasureTime<float>::run("bipolar scaler", [&bipolarScaler]() {
- float cv = TestBuffers<float>::get();
- float knob = TestBuffers<float>::get();
- float trim = TestBuffers<float>::get();
- return bipolarScaler(cv, knob, trim);
- }, 1);
- }
- }
- #endif
-
- void perfTest()
- {
- #if 0
- testAttenuverters();
- testExpRange();
- #endif
- testVocalFilter();
- testAnimator();
- testShifter();
-
- testColors();
- testTremolo();
-
- // test1();
- #if 0
- testHilbert<float>();
- testHilbert<double>();
- #endif
- }
|