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

« « « Anklang Documentation
Loading...
Searching...
No Matches
mathtables.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 "mathutils.hh"
3#include "api.hh"
4#include "internal.hh"
5
6namespace Ase {
7
8// == cent_table ==
9static const float cent_table201[100 + 1 + 100] = {
10 // 2^(1/1200*-100) .. 2^(1/1200*0) .. 2^(1/1200*+100)
11 0.94387431268169349664, 0.94441967335506765930, 0.94496534913211618524, 0.94551134019490267099, // 2^(1/1200*-97)
12 0.94605764672559590751, 0.94660426890646994096, 0.94715120691990413357, 0.94769846094838322441, // 2^(1/1200*-93)
13 0.94824603117449739035, 0.94879391778094230692, 0.94934212095051920932, 0.94989064086613495337, // 2^(1/1200*-89)
14 0.95043947771080207655, 0.95098863166763885907, 0.95153810291986938497, 0.95208789165082360322, // 2^(1/1200*-85)
15 0.95263799804393738893, 0.95318842228275260453, 0.95373916455091716100, 0.95429022503218507919, // 2^(1/1200*-81)
16 0.95484160391041655104, 0.95539330136957800103, 0.95594531759374214748, 0.95649765276708806401, // 2^(1/1200*-77)
17 0.95705030707390124097, 0.95760328069857364694, 0.95815657382560379022, 0.95871018663959678045, // 2^(1/1200*-73)
18 0.95926411932526439013, 0.95981837206742511631, 0.96037294505100424222, 0.96092783846103389896, // 2^(1/1200*-69)
19 0.96148305248265312728, 0.96203858730110793932, 0.96259444310175138040, 0.96315062007004359091, // 2^(1/1200*-65)
20 0.96370711839155186816, 0.96426393825195072828, 0.96482107983702196821, 0.96537854333265472764, // 2^(1/1200*-61)
21 0.96593632892484555106, 0.96649443679969844984, 0.96705286714342496425, 0.96761162014234422567, // 2^(1/1200*-57)
22 0.96817069598288301869, 0.96873009485157584337, 0.96928981693506497742, 0.96984986242010053851, // 2^(1/1200*-53)
23 0.97041023149354054658, 0.97097092434235098615, 0.97153194115360586874, 0.97209328211448729528, // 2^(1/1200*-49)
24 0.97265494741228551852, 0.97321693723439900559, 0.97377925176833450047, 0.97434189120170708655, // 2^(1/1200*-45)
25 0.97490485572224024929, 0.97546814551776593878, 0.97603176077622463245, 0.97659570168566539775, // 2^(1/1200*-41)
26 0.97715996843424595493, 0.97772456121023273979, 0.97828948020200096649, 0.97885472559803469042, // 2^(1/1200*-37)
27 0.97942029758692687108, 0.97998619635737943501, 0.98055242209820333873, 0.98111897499831863174, // 2^(1/1200*-33)
28 0.98168585524675451960, 0.98225306303264942693, 0.98282059854525106055, 0.98338846197391647262, // 2^(1/1200*-29)
29 0.98395665350811212383, 0.98452517333741394660, 0.98509402165150740832, 0.98566319864018757467, // 2^(1/1200*-25)
30 0.98623270449335917291, 0.98680253940103665527, 0.98737270355334426234, 0.98794319714051608649, // 2^(1/1200*-21)
31 0.98851402035289613536, 0.98908517338093839536, 0.98965665641520689521, 0.99022846964637576952, // 2^(1/1200*-17)
32 0.99080061326522932245, 0.99137308746266209128, 0.99194589242967891017, 0.99251902835739497389, // 2^(1/1200*-13)
33 0.99309249543703590153, 0.99366629385993780037, 0.99424042381754732964, 0.99481488550142176449, // 2^(1/1200*-9)
34 0.99538967910322905982, 0.99596480481474791428, 0.99654026282786783423, 0.99711605333458919778, // 2^(1/1200*-5)
35 0.99769217652702331884, 0.99826863259739251122, 0.99884542173803015276, 0.99942254414138074953, // 2^(1/1200*-1)
36 1.00000000000000000000, // 2^(1/1200*0)
37 1.00057778950655485930, 1.00115591285382360350, 1.00173437023469589396, 1.00231316184217284163, // 2^(1/1200*4)
38 1.00289228786936707150, 1.00347174850950278700, 1.00405154395591583449, 1.00463167440205376771, // 2^(1/1200*8)
39 1.00521214004147591243, 1.00579294106785343092, 1.00637407767496938663, 1.00695555005671880883, // 2^(1/1200*12)
40 1.00753735840710875731, 1.00811950292025838709, 1.00870198379039901323, 1.00928480121187417556, // 2^(1/1200*16)
41 1.00986795537913970359, 1.01045144648676378139, 1.01103527472942701245, 1.01161944030192248469, // 2^(1/1200*20)
42 1.01220394339915583542, 1.01278878421614531640, 1.01337396294802185887, 1.01395947979002913869, // 2^(1/1200*24)
43 1.01454533493752364145, 1.01513152858597472769, 1.01571806093096469807, 1.01630493216818885868, // 2^(1/1200*28)
44 1.01689214249345558626, 1.01747969210268639364, 1.01806758119191599497, 1.01865580995729237127, // 2^(1/1200*32)
45 1.01924437859507683576, 1.01983328730164409940, 1.02042253627348233639, 1.02101212570719324976, // 2^(1/1200*36)
46 1.02160205579949213692, 1.02219232674720795532, 1.02278293874728338810, 1.02337389199677490985, // 2^(1/1200*40)
47 1.02396518669285285230, 1.02455682303280147013, 1.02514880121401900679, 1.02574112143401776038, // 2^(1/1200*44)
48 1.02633378389042414951, 1.02692678878097877927, 1.02752013630353650722, 1.02811382665606650935, // 2^(1/1200*48)
49 1.02870786003665234616, 1.02930223664349202878, 1.02989695667489808505, 1.03049202032929762572, // 2^(1/1200*52)
50 1.03108742780523241063, 1.03168317930135891498, 1.03227927501644839557, 1.03287571514938695719, // 2^(1/1200*56)
51 1.03347249989917561889, 1.03406962946493038044, 1.03466710404588228876, 1.03526492384137750435, // 2^(1/1200*60)
52 1.03586308905087736785, 1.03646159987395846655, 1.03706045651031270103, 1.03765965915974735173, // 2^(1/1200*64)
53 1.03825920802218514564, 1.03885910329766432300, 1.03945934518633870407, 1.04005993388847775587, // 2^(1/1200*68)
54 1.04066086960446665901, 1.04126215253480637458, 1.04186378288011371099, 1.04246576084112139095, // 2^(1/1200*72)
55 1.04306808661867811845, 1.04367076041374864571, 1.04427378242741384032, 1.04487715286087075226, // 2^(1/1200*76)
56 1.04548087191543268106, 1.04608493979252924297, 1.04668935669370643814, 1.04729412282062671789, // 2^(1/1200*80)
57 1.04789923837506905201, 1.04850470355892899603, 1.04911051857421875864, 1.04971668362306726905, // 2^(1/1200*84)
58 1.05032319890772024444, 1.05093006463054025745, 1.05153728099400680369, 1.05214484820071636931, // 2^(1/1200*88)
59 1.05275276645338249856, 1.05336103595483586147, 1.05396965690802432148, 1.05457862951601300320, // 2^(1/1200*92)
60 1.05518795398198436013, 1.05579763050923824245, 1.05640765930119196488, 1.05701804056138037450, // 2^(1/1200*96)
61 1.05762877449345591872, 1.05823986130118871317, 1.05885130118846660974, 1.05946309435929526456, // 2^(1/1200*100)
62};
63const float *const cent_table = cent_table201 + 100;
64
65// == musical tuning tables ==
66#define SCALED_INTERVAL(scale, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12) \
67 scale * (F1), scale * (F2), scale * (F3), scale * (F4), scale * (F5), scale * (F6), \
68 scale * (F7), scale * (F8), scale * (F9), scale * (F10), scale * (F11), scale * (F12)
69
70// http://en.wikipedia.org/wiki/Equal_temperament
71static const float semitone_table265_equal_temperament_12_tet[132 + 1 + 132] = {
72#define EQTEMP_12_TET(scale) \
73 SCALED_INTERVAL (scale, 1.0, \
74 1.0594630943592952646, 1.1224620483093729814, 1.1892071150027210667, \
75 1.2599210498948731648, 1.3348398541700343648, 1.4142135623730950488, \
76 1.4983070768766814988, 1.5874010519681994748, 1.6817928305074290861, \
77 1.7817974362806786095, 1.8877486253633869933) /* 2^(1/12*[0..11]) */
78 EQTEMP_12_TET (1.0 / 2048.0), EQTEMP_12_TET (1.0 / 1024.0), EQTEMP_12_TET (1.0 / 512.0),
79 EQTEMP_12_TET (1.0 / 256.0), EQTEMP_12_TET (1.0 / 128.0), EQTEMP_12_TET (1.0 / 64.0),
80 EQTEMP_12_TET (1.0 / 32.0), EQTEMP_12_TET (1.0 / 16.0), EQTEMP_12_TET (1.0 / 8.0),
81 EQTEMP_12_TET (1.0 / 4.0), EQTEMP_12_TET (1.0 / 2.0),
82 EQTEMP_12_TET (1.0),
83 EQTEMP_12_TET (2.0), EQTEMP_12_TET (4.0), EQTEMP_12_TET (8.0),
84 EQTEMP_12_TET (16.0), EQTEMP_12_TET (32.0), EQTEMP_12_TET (64.0),
85 EQTEMP_12_TET (128.0), EQTEMP_12_TET (256.0), EQTEMP_12_TET (512.0),
86 EQTEMP_12_TET (1024.0), 2048.0, /* 2^11 */
87#undef EQTEMP_12_TET
88};
89
90// http://en.wikipedia.org/wiki/Equal_temperament
91static const float semitone_table265_equal_temperament_7_tet[132 + 1 + 132] = {
92#define EQTEMP_7_TET(scale) \
93 SCALED_INTERVAL (scale, \
94 1.0, /* 2^(0*171/1200) */ \
95 1.0506265879517071439385515999019, /* 2^(85.5/1200) (NA) */ \
96 1.1038162273110462268251028980804, /* 2^(1*171/1200) */ \
97 1.1596986766255304738157085667472, /* 2^(256.5/1200) (NA) */ \
98 1.2184102636751912741300922949139, /* 2^(2*171/1200) */ \
99 1.3449010205670067009547481593893, /* 2^(3*171/1200) */ \
100 1.4129887703710829641940858921341, /* 2^(598.5/1200) (NA) */ \
101 1.4845235706290491252321849551821, /* 2^(4*171/1200) */ \
102 1.5596799337438830130108590901031, /* 2^(769.5/1200) (NA) */ \
103 1.6386412070860804772885357729621, /* 2^(5*171/1200) */ \
104 1.7216000202779154901968996860588, /* 2^(940.5/1200) (NA) */ \
105 1.8087587551221761812432481457391) /* 2^(6*171/1200) */
106 EQTEMP_7_TET (1.0 / 2048.0), EQTEMP_7_TET (1.0 / 1024.0), EQTEMP_7_TET (1.0 / 512.0),
107 EQTEMP_7_TET (1.0 / 256.0), EQTEMP_7_TET (1.0 / 128.0), EQTEMP_7_TET (1.0 / 64.0),
108 EQTEMP_7_TET (1.0 / 32.0), EQTEMP_7_TET (1.0 / 16.0), EQTEMP_7_TET (1.0 / 8.0),
109 EQTEMP_7_TET (1.0 / 4.0), EQTEMP_7_TET (1.0 / 2.0),
110 EQTEMP_7_TET (1.0),
111 EQTEMP_7_TET (2.0), EQTEMP_7_TET (4.0), EQTEMP_7_TET (8.0),
112 EQTEMP_7_TET (16.0), EQTEMP_7_TET (32.0), EQTEMP_7_TET (64.0),
113 EQTEMP_7_TET (128.0), EQTEMP_7_TET (256.0), EQTEMP_7_TET (512.0),
114 EQTEMP_7_TET (1024.0), 2048.0, /* 2^11 */
115#undef EQTEMP_7_TET
116};
117
118// http://en.wikipedia.org/wiki/Equal_temperament
119static const float semitone_table265_equal_temperament_5_tet[132 + 1 + 132] = {
120#define EQTEMP_5_TET(scale) \
121 SCALED_INTERVAL (scale, \
122 1.0, /* 2^(0*240/1200) */ \
123 1.0717734625362931642130063250233, /* 2^(120.0/1200) (NA) */ \
124 1.1486983549970350067986269467779, /* 2^(1*240/1200) */ \
125 1.2311444133449162844993930691677, /* 2^(360.0/1200) (NA) */ \
126 1.3195079107728942593740019712296, /* 2^(2*240/1200) */ \
127 1.3819128799677760808194941234190, /* 2^(560.0/1200) (NA) */ \
128 1.4472692374403780699545336842135, /* 2^(640.0/1200) (NA) */ \
129 1.5157165665103980823472598013064, /* 2^(3*240/1200) */ \
130 1.6245047927124710452194187655506, /* 2^(840.0/1200) (NA) */ \
131 1.7411011265922482782725400349595, /* 2^(4*240/1200) */ \
132 1.8234449771164336156322101570883, /* 2^(1040./1200) (NA) */ \
133 1.9096832078208331020817981494413) /* 2^(1120./1200) (NA) */
134 EQTEMP_5_TET (1.0 / 2048.0), EQTEMP_5_TET (1.0 / 1024.0), EQTEMP_5_TET (1.0 / 512.0),
135 EQTEMP_5_TET (1.0 / 256.0), EQTEMP_5_TET (1.0 / 128.0), EQTEMP_5_TET (1.0 / 64.0),
136 EQTEMP_5_TET (1.0 / 32.0), EQTEMP_5_TET (1.0 / 16.0), EQTEMP_5_TET (1.0 / 8.0),
137 EQTEMP_5_TET (1.0 / 4.0), EQTEMP_5_TET (1.0 / 2.0),
138 EQTEMP_5_TET (1.0),
139 EQTEMP_5_TET (2.0), EQTEMP_5_TET (4.0), EQTEMP_5_TET (8.0),
140 EQTEMP_5_TET (16.0), EQTEMP_5_TET (32.0), EQTEMP_5_TET (64.0),
141 EQTEMP_5_TET (128.0), EQTEMP_5_TET (256.0), EQTEMP_5_TET (512.0),
142 EQTEMP_5_TET (1024.0), 2048.0, /* 2^11 */
143#undef EQTEMP_5_TET
144};
145
146// http://en.wikipedia.org/wiki/Diatonic_scale
147static const float semitone_table265_diatonic_scale[132 + 1 + 132] = {
148#define DIATONIC_SCALE(scale) \
149 SCALED_INTERVAL (scale, 1.0, \
150 16 / 15.0, 9 / 8.0, 6 / 5.0, 5 / 4.0, 4 / 3.0, 45 / 32.0, \
151 3 / 2.0, 8 / 5.0, 5 / 3.0, 16 / 9.0, 15 / 8.0)
152 DIATONIC_SCALE (1.0 / 2048.0), DIATONIC_SCALE (1.0 / 1024.0), DIATONIC_SCALE (1.0 / 512.0),
153 DIATONIC_SCALE (1.0 / 256.0), DIATONIC_SCALE (1.0 / 128.0), DIATONIC_SCALE (1.0 / 64.0),
154 DIATONIC_SCALE (1.0 / 32.0), DIATONIC_SCALE (1.0 / 16.0), DIATONIC_SCALE (1.0 / 8.0),
155 DIATONIC_SCALE (1.0 / 4.0), DIATONIC_SCALE (1.0 / 2.0),
156 DIATONIC_SCALE (1.0),
157 DIATONIC_SCALE (2.0), DIATONIC_SCALE (4.0), DIATONIC_SCALE (8.0),
158 DIATONIC_SCALE (16.0), DIATONIC_SCALE (32.0), DIATONIC_SCALE (64.0),
159 DIATONIC_SCALE (128.0), DIATONIC_SCALE (256.0), DIATONIC_SCALE (512.0),
160 DIATONIC_SCALE (1024.0), 2048.0, /* 2^11 */
161#undef DIATONIC_SCALE
162};
163
164// http://en.wikipedia.org/wiki/Just_intonation#Indian_scales
165static const float semitone_table265_indian_scale[132 + 1 + 132] = {
166#define INDIAN_SCALE(scale) \
167 SCALED_INTERVAL (scale, 1.0, \
168 16 / 15.0, 9 / 8.0, 6 / 5.0, 5 / 4.0, 4 / 3.0, 45 / 32.0, \
169 3 / 2.0, 8 / 5.0, 5 / 3.0, 27 / 16.0, 15 / 8.0)
170 INDIAN_SCALE (1.0 / 2048.0), INDIAN_SCALE (1.0 / 1024.0), INDIAN_SCALE (1.0 / 512.0),
171 INDIAN_SCALE (1.0 / 256.0), INDIAN_SCALE (1.0 / 128.0), INDIAN_SCALE (1.0 / 64.0),
172 INDIAN_SCALE (1.0 / 32.0), INDIAN_SCALE (1.0 / 16.0), INDIAN_SCALE (1.0 / 8.0),
173 INDIAN_SCALE (1.0 / 4.0), INDIAN_SCALE (1.0 / 2.0),
174 INDIAN_SCALE (1.0),
175 INDIAN_SCALE (2.0), INDIAN_SCALE (4.0), INDIAN_SCALE (8.0),
176 INDIAN_SCALE (16.0), INDIAN_SCALE (32.0), INDIAN_SCALE (64.0),
177 INDIAN_SCALE (128.0), INDIAN_SCALE (256.0), INDIAN_SCALE (512.0),
178 INDIAN_SCALE (1024.0), 2048.0, /* 2^11 */
179#undef INDIAN_SCALE
180};
181
182// http://en.wikipedia.org/wiki/Pythagorean_tuning
183static const float semitone_table265_pythagorean_tuning[132 + 1 + 132] = {
184#define PYTHAGOREAN_TUNING(scale) \
185 SCALED_INTERVAL (scale, 1.0, \
186 256 / 243.0, 9 / 8.0, 32 / 27.0, 81 / 64.0, 4 / 3.0, 729 / 512.0, \
187 3 / 2.0, 128 / 81.0, 27 / 16.0, 16 / 9.0, 243 / 128.0)
188 PYTHAGOREAN_TUNING (1.0 / 2048.0), PYTHAGOREAN_TUNING (1.0 / 1024.0), PYTHAGOREAN_TUNING (1.0 / 512.0),
189 PYTHAGOREAN_TUNING (1.0 / 256.0), PYTHAGOREAN_TUNING (1.0 / 128.0), PYTHAGOREAN_TUNING (1.0 / 64.0),
190 PYTHAGOREAN_TUNING (1.0 / 32.0), PYTHAGOREAN_TUNING (1.0 / 16.0), PYTHAGOREAN_TUNING (1.0 / 8.0),
191 PYTHAGOREAN_TUNING (1.0 / 4.0), PYTHAGOREAN_TUNING (1.0 / 2.0),
192 PYTHAGOREAN_TUNING (1.0),
193 PYTHAGOREAN_TUNING (2.0), PYTHAGOREAN_TUNING (4.0), PYTHAGOREAN_TUNING (8.0),
194 PYTHAGOREAN_TUNING (16.0), PYTHAGOREAN_TUNING (32.0), PYTHAGOREAN_TUNING (64.0),
195 PYTHAGOREAN_TUNING (128.0), PYTHAGOREAN_TUNING (256.0), PYTHAGOREAN_TUNING (512.0),
196 PYTHAGOREAN_TUNING (1024.0), 2048.0, /* 2^11 */
197#undef PYTHAGOREAN_TUNING
198};
199
200// http://en.wikipedia.org/wiki/Pentatonic_scale
201static const float semitone_table265_pentatonic_5_limit[132 + 1 + 132] = {
202#define PENTATONIC_5_LIMIT(scale) \
203 SCALED_INTERVAL (scale, 1.0, \
204 256 / 243.0, 9 / 8.0, 32 / 27.0, 5 / 4.0, 4 / 3.0, 729 / 512.0, \
205 3 / 2.0, 128 / 81.0, 5 / 3.0, 16 / 9.0, 243 / 128.0)
206 PENTATONIC_5_LIMIT (1.0 / 2048.0), PENTATONIC_5_LIMIT (1.0 / 1024.0), PENTATONIC_5_LIMIT (1.0 / 512.0),
207 PENTATONIC_5_LIMIT (1.0 / 256.0), PENTATONIC_5_LIMIT (1.0 / 128.0), PENTATONIC_5_LIMIT (1.0 / 64.0),
208 PENTATONIC_5_LIMIT (1.0 / 32.0), PENTATONIC_5_LIMIT (1.0 / 16.0), PENTATONIC_5_LIMIT (1.0 / 8.0),
209 PENTATONIC_5_LIMIT (1.0 / 4.0), PENTATONIC_5_LIMIT (1.0 / 2.0),
210 PENTATONIC_5_LIMIT (1.0),
211 PENTATONIC_5_LIMIT (2.0), PENTATONIC_5_LIMIT (4.0), PENTATONIC_5_LIMIT (8.0),
212 PENTATONIC_5_LIMIT (16.0), PENTATONIC_5_LIMIT (32.0), PENTATONIC_5_LIMIT (64.0),
213 PENTATONIC_5_LIMIT (128.0), PENTATONIC_5_LIMIT (256.0), PENTATONIC_5_LIMIT (512.0),
214 PENTATONIC_5_LIMIT (1024.0), 2048.0, /* 2^11 */
215#undef PENTATONIC_5_LIMIT
216};
217
218// http://en.wikipedia.org/wiki/Pentatonic_scale
219static const float semitone_table265_pentatonic_blues[132 + 1 + 132] = {
220#define PENTATONIC_BLUES(scale) \
221 SCALED_INTERVAL (scale, 1.0, \
222 256 / 243.0, 9 / 8.0, 7 / 6.0, 21 / 16.0, 4 / 3.0, 7 / 5.0, \
223 3 / 2.0, 128 / 81.0, 7 / 4.0, 16 / 9.0, 243 / 128.0)
224 PENTATONIC_BLUES (1.0 / 2048.0), PENTATONIC_BLUES (1.0 / 1024.0), PENTATONIC_BLUES (1.0 / 512.0),
225 PENTATONIC_BLUES (1.0 / 256.0), PENTATONIC_BLUES (1.0 / 128.0), PENTATONIC_BLUES (1.0 / 64.0),
226 PENTATONIC_BLUES (1.0 / 32.0), PENTATONIC_BLUES (1.0 / 16.0), PENTATONIC_BLUES (1.0 / 8.0),
227 PENTATONIC_BLUES (1.0 / 4.0), PENTATONIC_BLUES (1.0 / 2.0),
228 PENTATONIC_BLUES (1.0),
229 PENTATONIC_BLUES (2.0), PENTATONIC_BLUES (4.0), PENTATONIC_BLUES (8.0),
230 PENTATONIC_BLUES (16.0), PENTATONIC_BLUES (32.0), PENTATONIC_BLUES (64.0),
231 PENTATONIC_BLUES (128.0), PENTATONIC_BLUES (256.0), PENTATONIC_BLUES (512.0),
232 PENTATONIC_BLUES (1024.0), 2048.0, /* 2^11 */
233#undef PENTATONIC_BLUES
234};
235
236// http://en.wikipedia.org/wiki/Pentatonic_scale
237static const float semitone_table265_pentatonic_gogo[132 + 1 + 132] = {
238#define PENTATONIC_GOGO(scale) \
239 SCALED_INTERVAL (scale, 1.0, \
240 256 / 243.0, 9 / 8.0, 32 / 27.0, 5 / 4.0, 4 / 3.0, 729 / 512.0, \
241 3 / 2.0, 128 / 81.0, 7 / 4.0, 16 / 9.0, 243 / 128.0)
242 PENTATONIC_GOGO (1.0 / 2048.0), PENTATONIC_GOGO (1.0 / 1024.0), PENTATONIC_GOGO (1.0 / 512.0),
243 PENTATONIC_GOGO (1.0 / 256.0), PENTATONIC_GOGO (1.0 / 128.0), PENTATONIC_GOGO (1.0 / 64.0),
244 PENTATONIC_GOGO (1.0 / 32.0), PENTATONIC_GOGO (1.0 / 16.0), PENTATONIC_GOGO (1.0 / 8.0),
245 PENTATONIC_GOGO (1.0 / 4.0), PENTATONIC_GOGO (1.0 / 2.0),
246 PENTATONIC_GOGO (1.0),
247 PENTATONIC_GOGO (2.0), PENTATONIC_GOGO (4.0), PENTATONIC_GOGO (8.0),
248 PENTATONIC_GOGO (16.0), PENTATONIC_GOGO (32.0), PENTATONIC_GOGO (64.0),
249 PENTATONIC_GOGO (128.0), PENTATONIC_GOGO (256.0), PENTATONIC_GOGO (512.0),
250 PENTATONIC_GOGO (1024.0), 2048.0, /* 2^11 */
251#undef PENTATONIC_GOGO
252};
253
254// http://en.wikipedia.org/wiki/Quarter-comma_meantone
255static const float semitone_table265_quarter_comma_meantone[132 + 1 + 132] = {
256#define QCOMMA_MEANTONE(scale) \
257 SCALED_INTERVAL (scale, 1.0, \
258 1.0449067265256594125050516769666, /* (2187/128)/(81/80)^1.75/16 */ \
259 1.1180339887498948482045868343656, /* (9/4)/(81/80)^.5/2 */ \
260 1.1962790249769764335295191953127, /* (8/27)*(81/80)^.75*4 */ \
261 5 / 4.0, /* (81/16)/(81/80)/4 */ \
262 1.3374806099528440480064661465173, /* (2/3)*(81/80)^.25*2 */ \
263 1.3975424859373685602557335429570, /* (729/64)/(81/80)^1.5/8 */ \
264 1.4953487812212205419118989941409, /* (3/2)/(81/80)^.25 */ \
265 25 / 16.0, \
266 1.6718507624410550600080826831466, /* (27/8)/(81/80)^.75/2 */ \
267 1.7888543819998317571273389349850, /* (4/9)*(81/80)^.5*4 */ \
268 1.8691859765265256773898737426761) /* (243/32)/(81/80)^1.25/4 */
269 QCOMMA_MEANTONE (1.0 / 2048.0), QCOMMA_MEANTONE (1.0 / 1024.0), QCOMMA_MEANTONE (1.0 / 512.0),
270 QCOMMA_MEANTONE (1.0 / 256.0), QCOMMA_MEANTONE (1.0 / 128.0), QCOMMA_MEANTONE (1.0 / 64.0),
271 QCOMMA_MEANTONE (1.0 / 32.0), QCOMMA_MEANTONE (1.0 / 16.0), QCOMMA_MEANTONE (1.0 / 8.0),
272 QCOMMA_MEANTONE (1.0 / 4.0), QCOMMA_MEANTONE (1.0 / 2.0),
273 QCOMMA_MEANTONE (1.0),
274 QCOMMA_MEANTONE (2.0), QCOMMA_MEANTONE (4.0), QCOMMA_MEANTONE (8.0),
275 QCOMMA_MEANTONE (16.0), QCOMMA_MEANTONE (32.0), QCOMMA_MEANTONE (64.0),
276 QCOMMA_MEANTONE (128.0), QCOMMA_MEANTONE (256.0), QCOMMA_MEANTONE (512.0),
277 QCOMMA_MEANTONE (1024.0), 2048.0, /* 2^11 */
278#undef QCOMMA_MEANTONE
279};
280
281// http://de.wikipedia.org/wiki/Silbermann-Sorge-Temperatur
282static const float semitone_table265_silbermann_sorge_temperament[132 + 1 + 132] = {
283#define SILBERMANN_SORGE(scale) \
284 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
285 1.0509300646305402574490134498012, /* 2^(86/1200) */ \
286 1.1198716040467591250082361837530, /* 2^(196/1200) */ \
287 1.1933357430317218729952278581798, /* 2^(306/1200) */ \
288 1.2541124095502612486514063523921, /* 2^(392/1200) */ \
289 1.3363828127152655319782668003685, /* 2^(502/1200) */ \
290 1.4044448757379971820788342284695, /* 2^(588/1200) */ \
291 1.4965771640959640975810263196965, /* 2^(698/1200) */ \
292 1.5727979357879622015539138854402, /* 2^(784/1200) */ \
293 1.6759742693358971625849112463630, /* 2^(894/1200) */ \
294 1.7859190221207644704151890003616, /* 2^(1004/1200) */ \
295 1.8768759933422862606134778581222) /* 2^(1090/1200) */
296 SILBERMANN_SORGE (1.0 / 2048.0), SILBERMANN_SORGE (1.0 / 1024.0), SILBERMANN_SORGE (1.0 / 512.0),
297 SILBERMANN_SORGE (1.0 / 256.0), SILBERMANN_SORGE (1.0 / 128.0), SILBERMANN_SORGE (1.0 / 64.0),
298 SILBERMANN_SORGE (1.0 / 32.0), SILBERMANN_SORGE (1.0 / 16.0), SILBERMANN_SORGE (1.0 / 8.0),
299 SILBERMANN_SORGE (1.0 / 4.0), SILBERMANN_SORGE (1.0 / 2.0),
300 SILBERMANN_SORGE (1.0),
301 SILBERMANN_SORGE (2.0), SILBERMANN_SORGE (4.0), SILBERMANN_SORGE (8.0),
302 SILBERMANN_SORGE (16.0), SILBERMANN_SORGE (32.0), SILBERMANN_SORGE (64.0),
303 SILBERMANN_SORGE (128.0), SILBERMANN_SORGE (256.0), SILBERMANN_SORGE (512.0),
304 SILBERMANN_SORGE (1024.0), 2048.0, /* 2^11 */
305#undef SILBERMANN_SORGE
306};
307
308#define SQRT2_2 1.4142135623730950488016887242097 /* 2^0.5 */
309#define SQRT4_2 1.1892071150027210667174999705605 /* 2^0.25 */
310#define SQRT4_8 1.6817928305074290860622509524664 /* 8^0.25 */
311
312// http://en.wikipedia.org/wiki/Werckmeister_temperament
313static const float semitone_table265_werckmeister3_temperament[132 + 1 + 132] = {
314#define WMEISTER3_TEMPERAMENT(scale) \
315 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
316 256 / 243.0, 64 * SQRT2_2 / 81.0, 32 / 27.0, \
317 256 * SQRT4_2 / 243.0, 4 / 3.0, 1024 / 729.0, \
318 8 * SQRT4_8 / 9.0, 128 / 81.0, 1024 * SQRT4_2 / 729.0, \
319 16 / 9.0, 128 * SQRT4_2 / 81.0)
320 WMEISTER3_TEMPERAMENT (1.0 / 2048.0), WMEISTER3_TEMPERAMENT (1.0 / 1024.0), WMEISTER3_TEMPERAMENT (1.0 / 512.0),
321 WMEISTER3_TEMPERAMENT (1.0 / 256.0), WMEISTER3_TEMPERAMENT (1.0 / 128.0), WMEISTER3_TEMPERAMENT (1.0 / 64.0),
322 WMEISTER3_TEMPERAMENT (1.0 / 32.0), WMEISTER3_TEMPERAMENT (1.0 / 16.0), WMEISTER3_TEMPERAMENT (1.0 / 8.0),
323 WMEISTER3_TEMPERAMENT (1.0 / 4.0), WMEISTER3_TEMPERAMENT (1.0 / 2.0),
324 WMEISTER3_TEMPERAMENT (1.0),
325 WMEISTER3_TEMPERAMENT (2.0), WMEISTER3_TEMPERAMENT (4.0), WMEISTER3_TEMPERAMENT (8.0),
326 WMEISTER3_TEMPERAMENT (16.0), WMEISTER3_TEMPERAMENT (32.0), WMEISTER3_TEMPERAMENT (64.0),
327 WMEISTER3_TEMPERAMENT (128.0), WMEISTER3_TEMPERAMENT (256.0), WMEISTER3_TEMPERAMENT (512.0),
328 WMEISTER3_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
329#undef WMEISTER3_TEMPERAMENT
330};
331
332#define SQRT3_2 1.2599210498948731647672106072782 /* 2^(1/3) */
333#define SQRT3_4 1.5874010519681994747517056392723 /* 4^(1/3) */
334
335// http://en.wikipedia.org/wiki/Werckmeister_temperament
336static const float semitone_table265_werckmeister4_temperament[132 + 1 + 132] = {
337#define WMEISTER4_TEMPERAMENT(scale) \
338 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
339 16384 * SQRT3_2 / 19683.0, 8 * SQRT3_2 / 9.0, 32 / 27.0, \
340 64 * SQRT3_4 / 81.0, 4 / 3.0, 1024 / 729.0, \
341 32 * SQRT3_2 / 27.0, 8192 * SQRT3_2 / 6561.0, \
342 256 * SQRT3_4 / 243.0, 9 / 8.0 * SQRT3_4, 4096 / 2187.0)
343 WMEISTER4_TEMPERAMENT (1.0 / 2048.0), WMEISTER4_TEMPERAMENT (1.0 / 1024.0), WMEISTER4_TEMPERAMENT (1.0 / 512.0),
344 WMEISTER4_TEMPERAMENT (1.0 / 256.0), WMEISTER4_TEMPERAMENT (1.0 / 128.0), WMEISTER4_TEMPERAMENT (1.0 / 64.0),
345 WMEISTER4_TEMPERAMENT (1.0 / 32.0), WMEISTER4_TEMPERAMENT (1.0 / 16.0), WMEISTER4_TEMPERAMENT (1.0 / 8.0),
346 WMEISTER4_TEMPERAMENT (1.0 / 4.0), WMEISTER4_TEMPERAMENT (1.0 / 2.0),
347 WMEISTER4_TEMPERAMENT (1.0),
348 WMEISTER4_TEMPERAMENT (2.0), WMEISTER4_TEMPERAMENT (4.0), WMEISTER4_TEMPERAMENT (8.0),
349 WMEISTER4_TEMPERAMENT (16.0), WMEISTER4_TEMPERAMENT (32.0), WMEISTER4_TEMPERAMENT (64.0),
350 WMEISTER4_TEMPERAMENT (128.0), WMEISTER4_TEMPERAMENT (256.0), WMEISTER4_TEMPERAMENT (512.0),
351 WMEISTER4_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
352#undef WMEISTER4_TEMPERAMENT
353};
354
355// http://en.wikipedia.org/wiki/Werckmeister_temperament
356static const float semitone_table265_werckmeister5_temperament[132 + 1 + 132] = {
357#define WMEISTER5_TEMPERAMENT(scale) \
358 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
359 8 * SQRT4_2 / 9.0, 9 / 8.0, SQRT4_2, 8 * SQRT2_2 / 9.0, \
360 9 / 8.0 * SQRT4_2, SQRT2_2, 3 / 2.0, 128 / 81.0, \
361 SQRT4_8, 3 / SQRT4_8, 4 * SQRT2_2 / 3.0)
362 WMEISTER5_TEMPERAMENT (1.0 / 2048.0), WMEISTER5_TEMPERAMENT (1.0 / 1024.0), WMEISTER5_TEMPERAMENT (1.0 / 512.0),
363 WMEISTER5_TEMPERAMENT (1.0 / 256.0), WMEISTER5_TEMPERAMENT (1.0 / 128.0), WMEISTER5_TEMPERAMENT (1.0 / 64.0),
364 WMEISTER5_TEMPERAMENT (1.0 / 32.0), WMEISTER5_TEMPERAMENT (1.0 / 16.0), WMEISTER5_TEMPERAMENT (1.0 / 8.0),
365 WMEISTER5_TEMPERAMENT (1.0 / 4.0), WMEISTER5_TEMPERAMENT (1.0 / 2.0),
366 WMEISTER5_TEMPERAMENT (1.0),
367 WMEISTER5_TEMPERAMENT (2.0), WMEISTER5_TEMPERAMENT (4.0), WMEISTER5_TEMPERAMENT (8.0),
368 WMEISTER5_TEMPERAMENT (16.0), WMEISTER5_TEMPERAMENT (32.0), WMEISTER5_TEMPERAMENT (64.0),
369 WMEISTER5_TEMPERAMENT (128.0), WMEISTER5_TEMPERAMENT (256.0), WMEISTER5_TEMPERAMENT (512.0),
370 WMEISTER5_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
371#undef WMEISTER5_TEMPERAMENT
372};
373
374// http://en.wikipedia.org/wiki/Werckmeister_temperament
375static const float semitone_table265_werckmeister6_temperament[132 + 1 + 132] = {
376#define WMEISTER6_TEMPERAMENT(scale) \
377 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
378 98 / 93.0, 28 / 25.0, 196 / 165.0, 49 / 39.0, 4 / 3.0, \
379 196 / 139.0, 196 / 131.0, 49 / 31.0, 196 / 117.0, \
380 98 / 55.0, 49 / 26.0)
381 WMEISTER6_TEMPERAMENT (1.0 / 2048.0), WMEISTER6_TEMPERAMENT (1.0 / 1024.0), WMEISTER6_TEMPERAMENT (1.0 / 512.0),
382 WMEISTER6_TEMPERAMENT (1.0 / 256.0), WMEISTER6_TEMPERAMENT (1.0 / 128.0), WMEISTER6_TEMPERAMENT (1.0 / 64.0),
383 WMEISTER6_TEMPERAMENT (1.0 / 32.0), WMEISTER6_TEMPERAMENT (1.0 / 16.0), WMEISTER6_TEMPERAMENT (1.0 / 8.0),
384 WMEISTER6_TEMPERAMENT (1.0 / 4.0), WMEISTER6_TEMPERAMENT (1.0 / 2.0),
385 WMEISTER6_TEMPERAMENT (1.0),
386 WMEISTER6_TEMPERAMENT (2.0), WMEISTER6_TEMPERAMENT (4.0), WMEISTER6_TEMPERAMENT (8.0),
387 WMEISTER6_TEMPERAMENT (16.0), WMEISTER6_TEMPERAMENT (32.0), WMEISTER6_TEMPERAMENT (64.0),
388 WMEISTER6_TEMPERAMENT (128.0), WMEISTER6_TEMPERAMENT (256.0), WMEISTER6_TEMPERAMENT (512.0),
389 WMEISTER6_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
390#undef WMEISTER6_TEMPERAMENT
391};
392
393// http://en.wikipedia.org/wiki/Johann_Philipp_Kirnberger_temperament
394static const float semitone_table265_kirnberger_temperament[132 + 1 + 132] = {
395#define KBERGER3_TEMPERAMENT(scale) \
396 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
397 25 / 24.0, 9 / 8.0, 6 / 5.0, 5 / 4.0, \
398 4 / 3.0, 45 / 32.0, 3 / 2.0, 25 / 16.0, \
399 5 / 3.0, 16 / 9.0, 15 / 8.0)
400 KBERGER3_TEMPERAMENT (1.0 / 2048.0), KBERGER3_TEMPERAMENT (1.0 / 1024.0), KBERGER3_TEMPERAMENT (1.0 / 512.0),
401 KBERGER3_TEMPERAMENT (1.0 / 256.0), KBERGER3_TEMPERAMENT (1.0 / 128.0), KBERGER3_TEMPERAMENT (1.0 / 64.0),
402 KBERGER3_TEMPERAMENT (1.0 / 32.0), KBERGER3_TEMPERAMENT (1.0 / 16.0), KBERGER3_TEMPERAMENT (1.0 / 8.0),
403 KBERGER3_TEMPERAMENT (1.0 / 4.0), KBERGER3_TEMPERAMENT (1.0 / 2.0),
404 KBERGER3_TEMPERAMENT (1.0),
405 KBERGER3_TEMPERAMENT (2.0), KBERGER3_TEMPERAMENT (4.0), KBERGER3_TEMPERAMENT (8.0),
406 KBERGER3_TEMPERAMENT (16.0), KBERGER3_TEMPERAMENT (32.0), KBERGER3_TEMPERAMENT (64.0),
407 KBERGER3_TEMPERAMENT (128.0), KBERGER3_TEMPERAMENT (256.0), KBERGER3_TEMPERAMENT (512.0),
408 KBERGER3_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
409#undef KBERGER3_TEMPERAMENT
410};
411
412// http://en.wikipedia.org/wiki/Young_temperament
413static const float semitone_table265_young_temperament[132 + 1 + 132] = {
414#define YOUNG_TEMPERAMENT(scale) \
415 SCALED_INTERVAL (scale, 1.0, /* 2^(0/1200) */ \
416 1.0631412837780103584827404056079, /* 2^(106/1200) */ \
417 1.1211660780285088308680165651114, /* 2^(198/1200) */ \
418 1.1933357430317218729952278581798, /* 2^(306/1200) */ \
419 1.2599210498948731647672106072782, /* 2^(400/1200) */ \
420 1.3363828127152655319782668003685, /* 2^(502/1200) */ \
421 1.4174848672222598142134666752417, /* 2^(604/1200) */ \
422 1.4965771640959640975810263196965, /* 2^(698/1200) */ \
423 1.5929121092043532274138841376768, /* 2^(806/1200) */ \
424 1.6798510690641884687069808937168, /* 2^(898/1200) */ \
425 1.7859190221207644704151890003616, /* 2^(1004/1200) */ \
426 1.8899306982642323704825496345032) /* 2^(1102/1200) */
427 YOUNG_TEMPERAMENT (1.0 / 2048.0), YOUNG_TEMPERAMENT (1.0 / 1024.0), YOUNG_TEMPERAMENT (1.0 / 512.0),
428 YOUNG_TEMPERAMENT (1.0 / 256.0), YOUNG_TEMPERAMENT (1.0 / 128.0), YOUNG_TEMPERAMENT (1.0 / 64.0),
429 YOUNG_TEMPERAMENT (1.0 / 32.0), YOUNG_TEMPERAMENT (1.0 / 16.0), YOUNG_TEMPERAMENT (1.0 / 8.0),
430 YOUNG_TEMPERAMENT (1.0 / 4.0), YOUNG_TEMPERAMENT (1.0 / 2.0),
431 YOUNG_TEMPERAMENT (1.0),
432 YOUNG_TEMPERAMENT (2.0), YOUNG_TEMPERAMENT (4.0), YOUNG_TEMPERAMENT (8.0),
433 YOUNG_TEMPERAMENT (16.0), YOUNG_TEMPERAMENT (32.0), YOUNG_TEMPERAMENT (64.0),
434 YOUNG_TEMPERAMENT (128.0), YOUNG_TEMPERAMENT (256.0), YOUNG_TEMPERAMENT (512.0),
435 YOUNG_TEMPERAMENT (1024.0), 2048.0, /* 2^11 */
436#undef YOUNG_TEMPERAMENT
437};
438
439const float *const semitone_tables_265[17] = {
440 // Equal Temperament: http://en.wikipedia.org/wiki/Equal_temperament
441 132 + semitone_table265_equal_temperament_12_tet,
442 132 + semitone_table265_equal_temperament_7_tet,
443 132 + semitone_table265_equal_temperament_5_tet,
444 // Rational Intonation: http://en.wikipedia.org/wiki/Just_intonation
445 132 + semitone_table265_diatonic_scale,
446 132 + semitone_table265_indian_scale,
447 132 + semitone_table265_pythagorean_tuning,
448 132 + semitone_table265_pentatonic_5_limit,
449 132 + semitone_table265_pentatonic_blues,
450 132 + semitone_table265_pentatonic_gogo,
451 // Meantone Temperament: http://en.wikipedia.org/wiki/Meantone_temperament
452 132 + semitone_table265_quarter_comma_meantone,
453 132 + semitone_table265_silbermann_sorge_temperament,
454 // Well Temperament: http://en.wikipedia.org/wiki/Well_temperament
455 132 + semitone_table265_werckmeister3_temperament,
456 132 + semitone_table265_werckmeister4_temperament,
457 132 + semitone_table265_werckmeister5_temperament,
458 132 + semitone_table265_werckmeister6_temperament,
459 132 + semitone_table265_kirnberger_temperament,
460 132 + semitone_table265_young_temperament,
461};
462static_assert (sizeof (semitone_tables_265) / sizeof (semitone_tables_265[0]) == 1 + int (MusicalTuning::YOUNG));
463
464} // Ase
typedef int
The Anklang C++ API namespace.
Definition api.hh:9
const float *const cent_table
Finetune factor table with 201 entries for -100…0…+100 cent.
Definition mathtables.cc:63
const float *const semitone_tables_265[17]
Musical Tuning Tables, to be indexed by MusicalTuning