#include "amuse/VolumeTable.hpp" #include "amuse/Common.hpp" namespace amuse { static const float VolumeTable[] = { 0.000000, 0.000031, 0.000153, 0.000397, 0.000702, 0.001129, 0.001648, 0.002228, 0.002930, 0.003723, 0.004608, 0.005585, 0.006653, 0.007843, 0.009125, 0.010498, 0.011963, 0.013550, 0.015198, 0.016999, 0.018860, 0.020844, 0.022919, 0.025117, 0.027406, 0.029817, 0.032319, 0.034944, 0.037660, 0.040468, 0.043428, 0.046480, 0.049623, 0.052889, 0.056276, 0.059786, 0.063387, 0.067110, 0.070956, 0.074923, 0.078982, 0.083163, 0.087466, 0.091922, 0.096469, 0.101138, 0.105930, 0.110843, 0.115879, 0.121036, 0.126347, 0.131748, 0.137303, 0.142979, 0.148778, 0.154729, 0.160772, 0.166997, 0.173315, 0.179785, 0.186407, 0.193121, 0.200018, 0.207007, 0.214179, 0.221473, 0.228919, 0.236488, 0.244209, 0.252083, 0.260079, 0.268258, 0.276559, 0.285012, 0.293649, 0.302408, 0.311319, 0.320383, 0.329600, 0.339000, 0.348521, 0.358226, 0.368084, 0.378094, 0.388287, 0.398633, 0.409131, 0.419813, 0.430647, 0.441664, 0.452864, 0.464217, 0.475753, 0.487442, 0.499313, 0.511399, 0.523606, 0.536027, 0.548631, 0.561419, 0.574389, 0.587542, 0.600879, 0.614399, 0.628132, 0.642018, 0.656148, 0.670431, 0.684927, 0.699637, 0.714530, 0.729637, 0.744926, 0.760430, 0.776147, 0.792077, 0.808191, 0.824549, 0.841090, 0.857845, 0.874844, 0.892056, 0.909452, 0.927122, 0.945006, 0.963073, 0.981414, 1.000000, 1.000000 }; static const float DLSVolumeTable[] = { 0.000000, 0.000062, 0.000248, 0.000558, 0.000992, 0.001550, 0.002232, 0.003038, 0.003968, 0.005022, 0.006200, 0.007502, 0.008928, 0.010478, 0.012152, 0.013950, 0.015872, 0.017918, 0.020088, 0.022382, 0.024800, 0.027342, 0.030008, 0.032798, 0.035712, 0.038750, 0.041912, 0.045198, 0.048608, 0.052142, 0.055800, 0.059582, 0.063488, 0.067518, 0.071672, 0.075950, 0.080352, 0.084878, 0.089528, 0.094302, 0.099200, 0.104222, 0.109368, 0.114638, 0.120032, 0.125550, 0.131192, 0.136958, 0.142848, 0.148862, 0.155000, 0.161262, 0.167648, 0.174158, 0.180792, 0.187550, 0.194432, 0.201438, 0.208568, 0.215822, 0.223200, 0.230702, 0.238328, 0.246078, 0.253953, 0.261951, 0.270073, 0.278319, 0.286689, 0.295183, 0.303801, 0.312543, 0.321409, 0.330399, 0.339513, 0.348751, 0.358113, 0.367599, 0.377209, 0.386943, 0.396801, 0.406783, 0.416889, 0.427119, 0.437473, 0.447951, 0.458553, 0.469279, 0.480129, 0.491103, 0.502201, 0.513423, 0.524769, 0.536239, 0.547833, 0.559551, 0.571393, 0.583359, 0.595449, 0.607663, 0.620001, 0.632463, 0.645049, 0.657759, 0.670593, 0.683551, 0.696633, 0.709839, 0.723169, 0.736623, 0.750202, 0.763904, 0.777730, 0.791680, 0.805754, 0.819952, 0.834274, 0.848720, 0.863290, 0.877984, 0.892802, 0.907744, 0.922810, 0.938000, 0.953314, 0.968752, 0.984314, 1.000000, 1.000000 }; float LookupVolume(float vol) { vol = amuse::clamp(0.f, vol * 127.f, 127.f); float f = std::floor(vol); float c = std::ceil(vol); if (f == c) return VolumeTable[int(f)]; float t = vol - f; return (1.f - t) * VolumeTable[int(f)] + t * VolumeTable[int(c)]; } float LookupDLSVolume(float vol) { vol = amuse::clamp(0.f, vol * 127.f, 127.f); float f = std::floor(vol); float c = std::ceil(vol); if (f == c) return DLSVolumeTable[int(f)]; float t = vol - f; return (1.f - t) * DLSVolumeTable[int(f)] + t * DLSVolumeTable[int(c)]; } }