Anklang 0.3.0-460-gc4ef46ba
ASE — Anklang Sound Engine (C++)

« « « Anklang Documentation
Loading...
Searching...
No Matches
signalmath.cc
Go to the documentation of this file.
1 // This Source Code Form is licensed MPL-2.0: http://mozilla.org/MPL/2.0
2#include "signalmath.hh"
3#include "internal.hh"
4
5namespace Ase {
6
7} // Ase
8
9#include "testing.hh"
10
11namespace { // Anon
12using namespace Ase;
13
14#define FEQUAL(a,b,eps) do { \
15 auto __a = a; auto __b = b; \
16 if (std::abs (__a - __b) <= eps) \
17 break; \
18 std::string __m = \
19 Ase::string_format ("'%s ≈ %s': %+g ≈ %+g (Δ=%g)", \
20 ASE_CPP_STRINGIFY (a), \
21 ASE_CPP_STRINGIFY (b), \
22 __a, __b, std::abs (__a - __b)); \
23 Ase::assertion_failed (__m.c_str()); \
24 } while (0)
25
26TEST_INTEGRITY (signalutils_tests);
27static void
28signalutils_tests()
29{
30 float f;
31 double d;
32 // check Voltage <-> Hertz
33 constexpr auto fe = 0.005, ve = 0.000001;
34 float w;
35 w = -0.3; f = +32.703; FEQUAL (f, voltage2hz (w), fe); FEQUAL (w, hz2voltage (f), ve);
36 ; FEQUAL (f, fast_voltage2hz (w), fe); FEQUAL (w, fast_hz2voltage (f), ve);
37 w = +0.0; f = +261.625; FEQUAL (f, voltage2hz (w), fe); FEQUAL (w, hz2voltage (f), ve);
38 ; FEQUAL (f, fast_voltage2hz (w), fe); FEQUAL (w, fast_hz2voltage (f), ve);
39 w = +0.5; f = +8372.018; FEQUAL (f, voltage2hz (w), fe); FEQUAL (w, hz2voltage (f), ve);
40 ; FEQUAL (f, fast_voltage2hz (w), fe); FEQUAL (w, fast_hz2voltage (f), ve);
41 w = +0.6; f = +16744.036; FEQUAL (f, voltage2hz (w), fe); FEQUAL (w, hz2voltage (f), ve);
42 ; FEQUAL (f, fast_voltage2hz (w), fe); FEQUAL (w, fast_hz2voltage (f), ve);
43 // check Voltage <-> dB
44 constexpr auto de = 0.01;
45 d = -6.0206; w = 0.5; FEQUAL (d, voltage2db (w), de); FEQUAL (w, db2voltage (d), ve);
46 ; FEQUAL (d, fast_voltage2db (w), de); FEQUAL (w, fast_db2voltage (d), ve);
47 d = +0.0; w = 1.0; FEQUAL (d, voltage2db (w), de); FEQUAL (w, db2voltage (d), ve);
48 ; FEQUAL (d, fast_voltage2db (w), de); FEQUAL (w, fast_db2voltage (d), ve);
49 d = +7.9588; w = 2.5; FEQUAL (d, voltage2db (w), de); FEQUAL (w, db2voltage (d), ve);
50 ; FEQUAL (d, fast_voltage2db (w), de); FEQUAL (w, fast_db2voltage (d), ve);
51}
52
53} // Anon
#define TEST_INTEGRITY(FUNC)
Register func as an integrity test.
Definition internal.hh:77
The Anklang C++ API namespace.
Definition api.hh:9
float fast_voltage2hz(float x)
Float precision variant of voltage2hz using fast_exp2().
Definition signalmath.hh:80
Float voltage2hz(Float x)
Convert synthesizer value (Voltage) to Hertz.
Definition signalmath.hh:74
float fast_hz2voltage(float x)
Float precision variant of hz2voltage using fast_log2().
Definition signalmath.hh:92
Float hz2voltage(Float x)
Convert Hertz to synthesizer value (Voltage).
Definition signalmath.hh:86
float fast_db2voltage(float x)
Float precision variant of db2voltage using fast_exp2().
float fast_voltage2db(float x)
Float precision variant of voltage2db using fast_log2().
Float voltage2db(Float x)
Convert synthesizer value (Voltage) to Decibel.
Definition signalmath.hh:98
Float db2voltage(Float x)
Convert Decibel to synthesizer value (Voltage).