BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

oscillator_benchmark.cpp (4941B)


      1 
      2 #include <benchmark/benchmark.h>
      3 
      4 #include "dsp/oscillator.hpp"
      5 
      6 using namespace bogaudio::dsp;
      7 
      8 static void BM_Oscillator_Phasor(benchmark::State& state) {
      9 	Phasor p(44100.0, 440.0);
     10 	for (auto _ : state) {
     11 		p.next();
     12 	}
     13 }
     14 BENCHMARK(BM_Oscillator_Phasor);
     15 
     16 static void BM_Oscillator_SineOscillator(benchmark::State& state) {
     17 	SineOscillator o(44100.0, 440.0);
     18 	for (auto _ : state) {
     19 		o.next();
     20 	}
     21 }
     22 BENCHMARK(BM_Oscillator_SineOscillator);
     23 
     24 static void BM_Oscillator_SineTableOscillator(benchmark::State& state) {
     25 	SineTableOscillator o(44100.0, 440.0);
     26 	for (auto _ : state) {
     27 		o.next();
     28 	}
     29 }
     30 BENCHMARK(BM_Oscillator_SineTableOscillator);
     31 
     32 static void BM_Oscillator_SineOscillatorFM(benchmark::State& state) {
     33 	const float baseHz = 440.0;
     34 	SineOscillator m(44100.0, baseHz);
     35 	SineOscillator c(44100.0, baseHz);
     36 	for (auto _ : state) {
     37 		c.setFrequency(baseHz + m.next());
     38 		c.next();
     39 	}
     40 }
     41 BENCHMARK(BM_Oscillator_SineOscillatorFM);
     42 
     43 static void BM_Oscillator_SineTableOscillatorPM(benchmark::State& state) {
     44 	SineTableOscillator m(44100.0, 440.0);
     45 	SineTableOscillator c(44100.0, 440.0);
     46 	for (auto _ : state) {
     47 		c.advancePhase();
     48 		c.nextFromPhasor(c, Phasor::radiansToPhase(m.next()));
     49 	}
     50 }
     51 BENCHMARK(BM_Oscillator_SineTableOscillatorPM);
     52 
     53 static void BM_Oscillator_SawOscillator(benchmark::State& state) {
     54 	SawOscillator o(44100.0, 440.0);
     55 	for (auto _ : state) {
     56 		o.next();
     57 	}
     58 }
     59 BENCHMARK(BM_Oscillator_SawOscillator);
     60 
     61 static void BM_Oscillator_SaturatingSawOscillator(benchmark::State& state) {
     62 	SaturatingSawOscillator o(44100.0, 440.0);
     63 	o.setSaturation(0.9);
     64 	for (auto _ : state) {
     65 		o.next();
     66 	}
     67 }
     68 BENCHMARK(BM_Oscillator_SaturatingSawOscillator);
     69 
     70 static void BM_Oscillator_BandLimitedSawOscillator(benchmark::State& state) {
     71 	BandLimitedSawOscillator o(44100.0, 440.0);
     72 	o.setQuality(12);
     73 	for (auto _ : state) {
     74 		o.next();
     75 	}
     76 }
     77 BENCHMARK(BM_Oscillator_BandLimitedSawOscillator);
     78 
     79 static void BM_Oscillator_SquareOscillator(benchmark::State& state) {
     80 	SquareOscillator o(44100.0, 440.0);
     81 	for (auto _ : state) {
     82 		o.next();
     83 	}
     84 }
     85 BENCHMARK(BM_Oscillator_SquareOscillator);
     86 
     87 static void BM_Oscillator_BandLimitedSquareOscillator(benchmark::State& state) {
     88 	BandLimitedSquareOscillator o(44100.0, 440.0);
     89 	o.setQuality(12);
     90 	for (auto _ : state) {
     91 		o.next();
     92 	}
     93 }
     94 BENCHMARK(BM_Oscillator_BandLimitedSquareOscillator);
     95 
     96 static void BM_Oscillator_TriangleOscillator(benchmark::State& state) {
     97 	TriangleOscillator o(44100.0, 440.0);
     98 	for (auto _ : state) {
     99 		o.next();
    100 	}
    101 }
    102 BENCHMARK(BM_Oscillator_TriangleOscillator);
    103 
    104 static void BM_Oscillator_SampledTriangleOscillator(benchmark::State& state) {
    105 	TriangleOscillator o(44100.0, 440.0);
    106 	o.setSampleWidth(Phasor::maxSampleWidth / 2.0);
    107 	for (auto _ : state) {
    108 		o.next();
    109 	}
    110 }
    111 BENCHMARK(BM_Oscillator_SampledTriangleOscillator);
    112 
    113 static void BM_Oscillator_SineBankOscillator100(benchmark::State& state) {
    114 	SineBankOscillator o(44100.0, 100.0, 100);
    115 	for (int i = 1, n = o.partialCount(); i <= n; ++i) {
    116 		o.setPartial(i, i, 1.0 / (float)i);
    117 	}
    118 
    119 	for (auto _ : state) {
    120 		o.next();
    121 	}
    122 }
    123 BENCHMARK(BM_Oscillator_SineBankOscillator100);
    124 
    125 static void BM_Oscillator_SineBankOscillator500(benchmark::State& state) {
    126 	SineBankOscillator o(44100.0, 500.0, 100);
    127 	for (int i = 1, n = o.partialCount(); i <= n; ++i) {
    128 		o.setPartial(i, i, 1.0 / (float)i);
    129 	}
    130 
    131 	for (auto _ : state) {
    132 		o.next();
    133 	}
    134 }
    135 BENCHMARK(BM_Oscillator_SineBankOscillator500);
    136 
    137 static void BM_Oscillator_SineBankOscillator5000(benchmark::State& state) {
    138 	SineBankOscillator o(44100.0, 5000.0, 100);
    139 	for (int i = 1, n = o.partialCount(); i <= n; ++i) {
    140 		o.setPartial(i, i, 1.0 / (float)i);
    141 	}
    142 
    143 	for (auto _ : state) {
    144 		o.next();
    145 	}
    146 }
    147 BENCHMARK(BM_Oscillator_SineBankOscillator5000);
    148 
    149 static void BM_Oscillator_SineBankOscillator15000(benchmark::State& state) {
    150 	SineBankOscillator o(44100.0, 15000.0, 100);
    151 	for (int i = 1, n = o.partialCount(); i <= n; ++i) {
    152 		o.setPartial(i, i, 1.0 / (float)i);
    153 	}
    154 
    155 	for (auto _ : state) {
    156 		o.next();
    157 	}
    158 }
    159 BENCHMARK(BM_Oscillator_SineBankOscillator15000);
    160 
    161 static void BM_Oscillator_ChirpOscillatorLinear(benchmark::State& state) {
    162 	ChirpOscillator o(44100.0, 100.0f, 20000.0f, 1.0f, true);
    163 
    164 	for (auto _ : state) {
    165 		o.next();
    166 	}
    167 }
    168 BENCHMARK(BM_Oscillator_ChirpOscillatorLinear);
    169 
    170 static void BM_Oscillator_ChirpOscillatorExp(benchmark::State& state) {
    171 	ChirpOscillator o(44100.0, 100.0f, 20000.0f, 1.0f, false);
    172 
    173 	for (auto _ : state) {
    174 		o.next();
    175 	}
    176 }
    177 BENCHMARK(BM_Oscillator_ChirpOscillatorExp);
    178 
    179 static void BM_Oscillator_PureChirpOscillatorLinear(benchmark::State& state) {
    180 	PureChirpOscillator o(44100.0, 100.0f, 20000.0f, 1.0f, true);
    181 
    182 	for (auto _ : state) {
    183 		o.next();
    184 	}
    185 }
    186 BENCHMARK(BM_Oscillator_PureChirpOscillatorLinear);
    187 
    188 static void BM_Oscillator_PureChirpOscillatorExp(benchmark::State& state) {
    189 	PureChirpOscillator o(44100.0, 100.0f, 20000.0f, 1.0f, false);
    190 
    191 	for (auto _ : state) {
    192 		o.next();
    193 	}
    194 }
    195 BENCHMARK(BM_Oscillator_PureChirpOscillatorExp);