mirror of https://github.com/AxioDL/amuse.git
296 lines
4.3 KiB
C++
296 lines
4.3 KiB
C++
#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)];
|
|
}
|
|
|
|
}
|