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);