package jass.utils; /** Map hue 0-1 to perceptually more uniform variable pitch(h) @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public class PitchMap { static final int N = 1000; static final double dt = 0.01; // data at 0:0.001:1 // N+1 array elements static private final double[] hue2pitchData = { 0.000000, 0.002622, 0.005163, 0.007624, 0.010007, 0.012314, 0.014544, 0.016701, 0.018785, 0.020797, 0.022738, 0.024611, 0.026416, 0.028155, 0.029828, 0.031438, 0.032985, 0.034472, 0.035898, 0.037266, 0.038577, 0.039832, 0.041033, 0.042180, 0.043275, 0.044320, 0.045315, 0.046263, 0.047164, 0.048019, 0.048831, 0.049600, 0.050327, 0.051014, 0.051663, 0.052274, 0.052849, 0.053389, 0.053896, 0.054370, 0.054814, 0.055228, 0.055613, 0.055972, 0.056305, 0.056614, 0.056900, 0.057164, 0.057408, 0.057633, 0.057840, 0.058031, 0.058206, 0.058368, 0.058517, 0.058655, 0.058784, 0.058903, 0.059016, 0.059122, 0.059224, 0.059323, 0.059420, 0.059516, 0.059613, 0.059711, 0.059813, 0.059920, 0.060032, 0.060152, 0.060281, 0.060419, 0.060568, 0.060730, 0.060906, 0.061096, 0.061304, 0.061529, 0.061773, 0.062037, 0.062323, 0.062632, 0.062966, 0.063325, 0.063711, 0.064125, 0.064569, 0.065044, 0.065551, 0.066091, 0.066667, 0.067278, 0.067927, 0.068615, 0.069343, 0.070112, 0.070924, 0.071780, 0.072681, 0.073629, 0.074625, 0.075670, 0.076766, 0.077914, 0.079115, 0.080371, 0.081682, 0.083051, 0.084478, 0.085965, 0.087513, 0.089123, 0.090797, 0.092537, 0.094342, 0.096216, 0.098158, 0.100171, 0.102255, 0.104413, 0.106644, 0.108951, 0.111335, 0.113797, 0.116339, 0.118962, 0.121667, 0.124455, 0.127328, 0.130287, 0.133333, 0.136467, 0.139679, 0.142961, 0.146303, 0.149694, 0.153126, 0.156589, 0.160073, 0.163568, 0.167064, 0.170553, 0.174025, 0.177469, 0.180876, 0.184236, 0.187540, 0.190778, 0.193941, 0.197018, 0.200000, 0.202880, 0.205657, 0.208335, 0.210915, 0.213401, 0.215794, 0.218097, 0.220312, 0.222443, 0.224491, 0.226458, 0.228348, 0.230163, 0.231904, 0.233575, 0.235179, 0.236716, 0.238191, 0.239605, 0.240960, 0.242260, 0.243506, 0.244702, 0.245849, 0.246950, 0.248008, 0.249024, 0.250002, 0.250943, 0.251851, 0.252727, 0.253575, 0.254396, 0.255193, 0.255968, 0.256724, 0.257463, 0.258189, 0.258902, 0.259606, 0.260303, 0.260995, 0.261686, 0.262377, 0.263070, 0.263769, 0.264476, 0.265193, 0.265922, 0.266667, 0.267428, 0.268207, 0.269001, 0.269812, 0.270639, 0.271480, 0.272336, 0.273206, 0.274089, 0.274985, 0.275893, 0.276814, 0.277746, 0.278688, 0.279642, 0.280605, 0.281577, 0.282559, 0.283549, 0.284546, 0.285552, 0.286564, 0.287582, 0.288606, 0.289636, 0.290670, 0.291709, 0.292752, 0.293798, 0.294847, 0.295898, 0.296951, 0.298005, 0.299060, 0.300116, 0.301171, 0.302226, 0.303279, 0.304331, 0.305380, 0.306427, 0.307471, 0.308510, 0.309546, 0.310577, 0.311603, 0.312623, 0.313636, 0.314643, 0.315643, 0.316635, 0.317618, 0.318593, 0.319559, 0.320514, 0.321460, 0.322394, 0.323318, 0.324229, 0.325129, 0.326015, 0.326888, 0.327748, 0.328593, 0.329423, 0.330238, 0.331037, 0.331819, 0.332585, 0.333333, 0.334064, 0.334777, 0.335473, 0.336151, 0.336813, 0.337457, 0.338086, 0.338698, 0.339294, 0.339874, 0.340439, 0.340988, 0.341522, 0.342042, 0.342546, 0.343037, 0.343513, 0.343975, 0.344423, 0.344858, 0.345279, 0.345688, 0.346084, 0.346467, 0.346838, 0.347196, 0.347543, 0.347878, 0.348202, 0.348514, 0.348816, 0.349106, 0.349386, 0.349656, 0.349916, 0.350166, 0.350406, 0.350637, 0.350859, 0.351072, 0.351276, 0.351472, 0.351660, 0.351839, 0.352011, 0.352175, 0.352332, 0.352482, 0.352625, 0.352761, 0.352891, 0.353015, 0.353133, 0.353245, 0.353351, 0.353453, 0.353549, 0.353641, 0.353728, 0.353810, 0.353889, 0.353964, 0.354035, 0.354103, 0.354167, 0.354229, 0.354287, 0.354344, 0.354398, 0.354450, 0.354500, 0.354549, 0.354596, 0.354642, 0.354687, 0.354732, 0.354776, 0.354820, 0.354864, 0.354908, 0.354953, 0.354998, 0.355045, 0.355092, 0.355141, 0.355192, 0.355244, 0.355299, 0.355356, 0.355415, 0.355477, 0.355542, 0.355611, 0.355683, 0.355758, 0.355838, 0.355921, 0.356009, 0.356102, 0.356200, 0.356302, 0.356410, 0.356523, 0.356643, 0.356768, 0.356899, 0.357037, 0.357181, 0.357333, 0.357491, 0.357657, 0.357831, 0.358012, 0.358202, 0.358399, 0.358605, 0.358820, 0.359044, 0.359277, 0.359520, 0.359772, 0.360034, 0.360306, 0.360589, 0.360882, 0.361186, 0.361501, 0.361827, 0.362165, 0.362514, 0.362875, 0.363249, 0.363635, 0.364033, 0.364445, 0.364869, 0.365307, 0.365759, 0.366224, 0.366703, 0.367197, 0.367705, 0.368228, 0.368765, 0.369318, 0.369886, 0.370470, 0.371070, 0.371685, 0.372317, 0.372966, 0.373631, 0.374314, 0.375013, 0.375730, 0.376465, 0.377218, 0.377988, 0.378777, 0.379585, 0.380412, 0.381257, 0.382122, 0.383007, 0.383911, 0.384835, 0.385780, 0.386744, 0.387730, 0.388736, 0.389764, 0.390813, 0.391883, 0.392975, 0.394090, 0.395226, 0.396385, 0.397567, 0.398772, 0.400000, 0.401251, 0.402526, 0.403824, 0.405144, 0.406488, 0.407854, 0.409242, 0.410653, 0.412086, 0.413542, 0.415019, 0.416517, 0.418038, 0.419579, 0.421142, 0.422726, 0.424331, 0.425957, 0.427603, 0.429270, 0.430957, 0.432664, 0.434392, 0.436139, 0.437906, 0.439692, 0.441498, 0.443323, 0.445167, 0.447030, 0.448912, 0.450812, 0.452731, 0.454668, 0.456623, 0.458597, 0.460588, 0.462597, 0.464623, 0.466667, 0.468727, 0.470805, 0.472898, 0.475007, 0.477131, 0.479269, 0.481421, 0.483586, 0.485763, 0.487952, 0.490153, 0.492364, 0.494586, 0.496817, 0.499057, 0.501305, 0.503561, 0.505825, 0.508095, 0.510371, 0.512652, 0.514939, 0.517229, 0.519524, 0.521821, 0.524121, 0.526423, 0.528726, 0.531029, 0.533333, 0.535637, 0.537939, 0.540241, 0.542540, 0.544836, 0.547130, 0.549420, 0.551707, 0.553989, 0.556266, 0.558537, 0.560803, 0.563062, 0.565314, 0.567559, 0.569796, 0.572025, 0.574244, 0.576454, 0.578654, 0.580844, 0.583023, 0.585190, 0.587346, 0.589489, 0.591619, 0.593736, 0.595838, 0.597927, 0.600000, 0.602058, 0.604100, 0.606126, 0.608136, 0.610129, 0.612105, 0.614063, 0.616004, 0.617926, 0.619830, 0.621715, 0.623581, 0.625427, 0.627254, 0.629060, 0.630846, 0.632611, 0.634355, 0.636077, 0.637778, 0.639456, 0.641112, 0.642744, 0.644354, 0.645940, 0.647502, 0.649039, 0.650552, 0.652040, 0.653503, 0.654941, 0.656352, 0.657737, 0.659095, 0.660427, 0.661731, 0.663007, 0.664255, 0.665475, 0.666667, 0.667829, 0.668963, 0.670068, 0.671146, 0.672196, 0.673218, 0.674214, 0.675183, 0.676126, 0.677043, 0.677934, 0.678800, 0.679642, 0.680458, 0.681251, 0.682020, 0.682766, 0.683488, 0.684188, 0.684865, 0.685521, 0.686154, 0.686766, 0.687358, 0.687928, 0.688479, 0.689009, 0.689520, 0.690012, 0.690484, 0.690938, 0.691374, 0.691792, 0.692193, 0.692576, 0.692943, 0.693293, 0.693627, 0.693946, 0.694249, 0.694536, 0.694810, 0.695068, 0.695313, 0.695544, 0.695762, 0.695967, 0.696159, 0.696340, 0.696508, 0.696664, 0.696810, 0.696944, 0.697068, 0.697182, 0.697286, 0.697380, 0.697466, 0.697542, 0.697611, 0.697671, 0.697723, 0.697768, 0.697806, 0.697838, 0.697863, 0.697882, 0.697895, 0.697904, 0.697907, 0.697906, 0.697900, 0.697891, 0.697878, 0.697862, 0.697843, 0.697821, 0.697798, 0.697772, 0.697746, 0.697718, 0.697689, 0.697660, 0.697631, 0.697603, 0.697575, 0.697548, 0.697522, 0.697498, 0.697476, 0.697457, 0.697440, 0.697426, 0.697416, 0.697410, 0.697408, 0.697410, 0.697417, 0.697430, 0.697447, 0.697471, 0.697501, 0.697538, 0.697582, 0.697633, 0.697691, 0.697758, 0.697833, 0.697917, 0.698009, 0.698111, 0.698223, 0.698345, 0.698477, 0.698621, 0.698775, 0.698941, 0.699118, 0.699308, 0.699510, 0.699726, 0.699954, 0.700196, 0.700452, 0.700722, 0.701007, 0.701307, 0.701623, 0.701953, 0.702300, 0.702664, 0.703044, 0.703441, 0.703855, 0.704288, 0.704738, 0.705207, 0.705695, 0.706202, 0.706728, 0.707275, 0.707841, 0.708428, 0.709037, 0.709666, 0.710317, 0.710990, 0.711685, 0.712403, 0.713144, 0.713908, 0.714696, 0.715508, 0.716345, 0.717206, 0.718092, 0.719004, 0.719942, 0.720905, 0.721896, 0.722913, 0.723957, 0.725029, 0.726129, 0.727257, 0.728414, 0.729599, 0.730814, 0.732059, 0.733333, 0.734638, 0.735972, 0.737335, 0.738726, 0.740143, 0.741587, 0.743056, 0.744549, 0.746065, 0.747604, 0.749165, 0.750747, 0.752348, 0.753969, 0.755608, 0.757265, 0.758938, 0.760626, 0.762330, 0.764047, 0.765778, 0.767521, 0.769275, 0.771040, 0.772814, 0.774597, 0.776388, 0.778186, 0.779991, 0.781800, 0.783614, 0.785432, 0.787252, 0.789075, 0.790898, 0.792722, 0.794544, 0.796366, 0.798184, 0.800000, 0.801811, 0.803619, 0.805421, 0.807219, 0.809011, 0.810798, 0.812580, 0.814355, 0.816125, 0.817888, 0.819645, 0.821395, 0.823138, 0.824873, 0.826602, 0.828322, 0.830034, 0.831739, 0.833434, 0.835121, 0.836799, 0.838468, 0.840128, 0.841778, 0.843418, 0.845047, 0.846667, 0.848276, 0.849874, 0.851461, 0.853036, 0.854600, 0.856152, 0.857692, 0.859220, 0.860736, 0.862238, 0.863728, 0.865204, 0.866667, 0.868116, 0.869551, 0.870973, 0.872382, 0.873777, 0.875160, 0.876529, 0.877885, 0.879228, 0.880559, 0.881877, 0.883182, 0.884476, 0.885756, 0.887025, 0.888282, 0.889527, 0.890759, 0.891981, 0.893190, 0.894388, 0.895575, 0.896750, 0.897915, 0.899068, 0.900210, 0.901341, 0.902462, 0.903572, 0.904672, 0.905761, 0.906840, 0.907909, 0.908968, 0.910016, 0.911055, 0.912085, 0.913104, 0.914115, 0.915115, 0.916107, 0.917089, 0.918063, 0.919027, 0.919983, 0.920929, 0.921868, 0.922798, 0.923719, 0.924632, 0.925537, 0.926434, 0.927323, 0.928204, 0.929078, 0.929944, 0.930802, 0.931653, 0.932497, 0.933333, 0.934163, 0.934986, 0.935801, 0.936610, 0.937413, 0.938209, 0.938999, 0.939782, 0.940559, 0.941331, 0.942096, 0.942855, 0.943609, 0.944357, 0.945100, 0.945837, 0.946569, 0.947296, 0.948018, 0.948735, 0.949447, 0.950155, 0.950858, 0.951556, 0.952250, 0.952940, 0.953625, 0.954307, 0.954984, 0.955658, 0.956328, 0.956995, 0.957658, 0.958318, 0.958974, 0.959628, 0.960278, 0.960925, 0.961570, 0.962212, 0.962851, 0.963488, 0.964122, 0.964754, 0.965384, 0.966012, 0.966638, 0.967263, 0.967885, 0.968506, 0.969126, 0.969744, 0.970361, 0.970977, 0.971592, 0.972205, 0.972819, 0.973431, 0.974043, 0.974654, 0.975265, 0.975876, 0.976486, 0.977097, 0.977707, 0.978318, 0.978929, 0.979541, 0.980153, 0.980766, 0.981379, 0.981994, 0.982609, 0.983225, 0.983843, 0.984462, 0.985082, 0.985704, 0.986328, 0.986953, 0.987580, 0.988209, 0.988841, 0.989474, 0.990110, 0.990748, 0.991389, 0.992032, 0.992678, 0.993327, 0.993979, 0.994634, 0.995293, 0.995954, 0.996619, 0.997288, 0.997960, 0.998636, 0.999316, 0.999999 }; public static double hue2pitch(double hue) { int index1 = (int)(hue * N); int index2 = index1 + 1; if(index2 > N) { index2 = index1; } double hue1 = index1/((double) N); double hue2 = index2/((double) N); double p1 = hue - hue1; double p2 = hue2 - hue; double pitch; if((p1+p2)<=0) { pitch = 0; } else { pitch = (p1*hue2pitchData[index1]+p2*hue2pitchData[index2])/(p1+p2); } return pitch; } }