From d272e4badf3fbf1ff415451d7913c9f981a60236 Mon Sep 17 00:00:00 2001
From: Jan-Henrik Bruhn <hi@jhbruhn.de>
Date: Tue, 18 Feb 2020 12:05:27 +0100
Subject: [PATCH] Further lut resolution optimizations

---
 stereo_mix/resources.cc               | 384 +++++++++++++-------------
 stereo_mix/resources/lookup_tables.py |  22 +-
 stereo_mix/stereo_mix.cc              |  18 +-
 3 files changed, 211 insertions(+), 213 deletions(-)

diff --git a/stereo_mix/resources.cc b/stereo_mix/resources.cc
index 80f760b..f28d945 100644
--- a/stereo_mix/resources.cc
+++ b/stereo_mix/resources.cc
@@ -32,202 +32,202 @@ const prog_char* const string_table[] = {
 };
 
 const prog_uint16_t lut_res_linear_to_exp[] PROGMEM = {
-       0,      0,      0,      0,      0,      0,      0,      0,
-       0,      0,      0,      0,      0,      0,      0,      0,
-       0,      0,      0,      0,      0,      0,      1,      1,
-       1,      1,      1,      1,      1,      1,      1,      2,
-       2,      2,      2,      2,      2,      2,      2,      3,
-       3,      3,      3,      3,      3,      4,      4,      4,
-       4,      4,      5,      5,      5,      5,      5,      6,
-       6,      6,      6,      7,      7,      7,      7,      8,
-       8,      8,      8,      9,      9,      9,      9,     10,
-      10,     10,     10,     11,     11,     11,     12,     12,
-      12,     13,     13,     13,     14,     14,     14,     15,
-      15,     15,     16,     16,     16,     17,     17,     18,
-      18,     18,     19,     19,     19,     20,     20,     21,
-      21,     21,     22,     22,     23,     23,     24,     24,
-      24,     25,     25,     26,     26,     27,     27,     28,
-      28,     29,     29,     30,     30,     31,     31,     32,
-      32,     33,     33,     34,     34,     35,     35,     36,
-      36,     37,     37,     38,     38,     39,     39,     40,
-      41,     41,     42,     42,     43,     43,     44,     45,
-      45,     46,     46,     47,     48,     48,     49,     50,
-      50,     51,     51,     52,     53,     53,     54,     55,
-      55,     56,     57,     57,     58,     59,     59,     60,
-      61,     61,     62,     63,     63,     64,     65,     66,
-      66,     67,     68,     69,     69,     70,     71,     72,
-      72,     73,     74,     75,     75,     76,     77,     78,
-      78,     79,     80,     81,     82,     82,     83,     84,
-      85,     86,     86,     87,     88,     89,     90,     91,
-      91,     92,     93,     94,     95,     96,     97,     98,
-      98,     99,    100,    101,    102,    103,    104,    105,
-     106,    106,    107,    108,    109,    110,    111,    112,
-     113,    114,    115,    116,    117,    118,    119,    120,
-     121,    122,    123,    124,    125,    126,    127,    128,
-     129,    130,    131,    132,    133,    134,    135,    136,
-     137,    138,    139,    140,    141,    142,    143,    144,
-     145,    146,    147,    148,    149,    150,    152,    153,
-     154,    155,    156,    157,    158,    159,    160,    162,
-     163,    164,    165,    166,    167,    168,    169,    171,
-     172,    173,    174,    175,    176,    178,    179,    180,
-     181,    182,    184,    185,    186,    187,    188,    190,
-     191,    192,    193,    195,    196,    197,    198,    200,
-     201,    202,    203,    205,    206,    207,    208,    210,
-     211,    212,    213,    215,    216,    217,    219,    220,
-     221,    223,    224,    225,    227,    228,    229,    231,
-     232,    233,    235,    236,    237,    239,    240,    242,
-     243,    244,    246,    247,    248,    250,    251,    253,
-     254,    255,    257,    258,    260,    261,    263,    264,
-     265,    267,    268,    270,    271,    273,    274,    276,
-     277,    279,    280,    282,    283,    285,    286,    288,
-     289,    291,    292,    294,    295,    297,    298,    300,
-     301,    303,    304,    306,    307,    309,    310,    312,
-     314,    315,    317,    318,    320,    321,    323,    325,
-     326,    328,    329,    331,    333,    334,    336,    338,
-     339,    341,    342,    344,    346,    347,    349,    351,
-     352,    354,    356,    357,    359,    361,    362,    364,
-     366,    367,    369,    371,    372,    374,    376,    378,
-     379,    381,    383,    385,    386,    388,    390,    392,
-     393,    395,    397,    399,    400,    402,    404,    406,
-     407,    409,    411,    413,    415,    416,    418,    420,
-     422,    424,    425,    427,    429,    431,    433,    435,
-     436,    438,    440,    442,    444,    446,    448,    450,
-     451,    453,    455,    457,    459,    461,    463,    465,
-     467,    468,    470,    472,    474,    476,    478,    480,
-     482,    484,    486,    488,    490,    492,    494,    496,
-     498,    500,    502,    504,    506,    508,    510,    512,
+       0,      0,      0,      0,      0,      0,      0,      1,
+       1,      1,      1,      2,      2,      3,      3,      4,
+       4,      5,      5,      6,      6,      7,      8,      9,
+       9,     10,     11,     12,     13,     14,     15,     16,
+      17,     18,     19,     20,     21,     22,     23,     25,
+      26,     27,     28,     30,     31,     33,     34,     36,
+      37,     39,     40,     42,     43,     45,     47,     49,
+      50,     52,     54,     56,     58,     60,     62,     64,
+      66,     68,     70,     72,     74,     76,     78,     81,
+      83,     85,     87,     90,     92,     95,     97,    100,
+     102,    105,    107,    110,    112,    115,    118,    121,
+     123,    126,    129,    132,    135,    138,    141,    144,
+     147,    150,    153,    156,    159,    162,    165,    169,
+     172,    175,    178,    182,    185,    189,    192,    196,
+     199,    203,    206,    210,    213,    217,    221,    225,
+     228,    232,    236,    240,    244,    248,    252,    256,
+     260,    264,    268,    272,    276,    280,    284,    289,
+     293,    297,    301,    306,    310,    315,    319,    324,
+     328,    333,    337,    342,    346,    351,    356,    361,
+     365,    370,    375,    380,    385,    390,    395,    400,
+     405,    410,    415,    420,    425,    430,    435,    441,
+     446,    451,    456,    462,    467,    473,    478,    484,
+     489,    495,    500,    506,    511,    517,    523,    529,
+     534,    540,    546,    552,    558,    564,    570,    576,
+     582,    588,    594,    600,    606,    612,    618,    625,
+     631,    637,    643,    650,    656,    663,    669,    676,
+     682,    689,    695,    702,    708,    715,    722,    729,
+     735,    742,    749,    756,    763,    770,    777,    784,
+     791,    798,    805,    812,    819,    826,    833,    841,
+     848,    855,    862,    870,    877,    885,    892,    900,
+     907,    915,    922,    930,    937,    945,    953,    961,
+     968,    976,    984,    992,   1000,   1008,   1016,   1024,
+    1032,   1040,   1048,   1056,   1064,   1072,   1080,   1089,
+    1097,   1105,   1113,   1122,   1130,   1139,   1147,   1156,
+    1164,   1173,   1181,   1190,   1198,   1207,   1216,   1225,
+    1233,   1242,   1251,   1260,   1269,   1278,   1287,   1296,
+    1305,   1314,   1323,   1332,   1341,   1350,   1359,   1369,
+    1378,   1387,   1396,   1406,   1415,   1425,   1434,   1444,
+    1453,   1463,   1472,   1482,   1491,   1501,   1511,   1521,
+    1530,   1540,   1550,   1560,   1570,   1580,   1590,   1600,
+    1610,   1620,   1630,   1640,   1650,   1660,   1670,   1681,
+    1691,   1701,   1711,   1722,   1732,   1743,   1753,   1764,
+    1774,   1785,   1795,   1806,   1816,   1827,   1838,   1849,
+    1859,   1870,   1881,   1892,   1903,   1914,   1925,   1936,
+    1947,   1958,   1969,   1980,   1991,   2002,   2013,   2025,
+    2036,   2047,   2058,   2070,   2081,   2093,   2104,   2116,
+    2127,   2139,   2150,   2162,   2173,   2185,   2197,   2209,
+    2220,   2232,   2244,   2256,   2268,   2280,   2292,   2304,
+    2316,   2328,   2340,   2352,   2364,   2376,   2388,   2401,
+    2413,   2425,   2437,   2450,   2462,   2475,   2487,   2500,
+    2512,   2525,   2537,   2550,   2562,   2575,   2588,   2601,
+    2613,   2626,   2639,   2652,   2665,   2678,   2691,   2704,
+    2717,   2730,   2743,   2756,   2769,   2782,   2795,   2809,
+    2822,   2835,   2848,   2862,   2875,   2889,   2902,   2916,
+    2929,   2943,   2956,   2970,   2983,   2997,   3011,   3025,
+    3038,   3052,   3066,   3080,   3094,   3108,   3122,   3136,
+    3150,   3164,   3178,   3192,   3206,   3220,   3234,   3249,
+    3263,   3277,   3291,   3306,   3320,   3335,   3349,   3364,
+    3378,   3393,   3407,   3422,   3436,   3451,   3466,   3481,
+    3495,   3510,   3525,   3540,   3555,   3570,   3585,   3600,
+    3615,   3630,   3645,   3660,   3675,   3690,   3705,   3721,
+    3736,   3751,   3766,   3782,   3797,   3813,   3828,   3844,
+    3859,   3875,   3890,   3906,   3921,   3937,   3953,   3969,
+    3984,   4000,   4016,   4032,   4048,   4064,   4080,   4096,
 };
 const prog_uint16_t lut_res_left_sin_pan[] PROGMEM = {
-       0,      2,      3,      5,      6,      8,      9,     11,
-      13,     14,     16,     17,     19,     20,     22,     24,
-      25,     27,     28,     30,     31,     33,     35,     36,
-      38,     39,     41,     42,     44,     45,     47,     49,
-      50,     52,     53,     55,     56,     58,     60,     61,
-      63,     64,     66,     67,     69,     70,     72,     74,
-      75,     77,     78,     80,     81,     83,     84,     86,
-      88,     89,     91,     92,     94,     95,     97,     98,
-     100,    101,    103,    105,    106,    108,    109,    111,
-     112,    114,    115,    117,    118,    120,    121,    123,
-     124,    126,    127,    129,    130,    132,    134,    135,
-     137,    138,    140,    141,    143,    144,    146,    147,
-     149,    150,    152,    153,    155,    156,    158,    159,
-     161,    162,    164,    165,    167,    168,    170,    171,
-     172,    174,    175,    177,    178,    180,    181,    183,
-     184,    186,    187,    189,    190,    192,    193,    194,
-     196,    197,    199,    200,    202,    203,    205,    206,
-     207,    209,    210,    212,    213,    215,    216,    217,
-     219,    220,    222,    223,    225,    226,    227,    229,
-     230,    232,    233,    234,    236,    237,    239,    240,
-     241,    243,    244,    246,    247,    248,    250,    251,
-     252,    254,    255,    256,    258,    259,    261,    262,
-     263,    265,    266,    267,    269,    270,    271,    273,
-     274,    275,    277,    278,    279,    281,    282,    283,
-     284,    286,    287,    288,    290,    291,    292,    294,
-     295,    296,    297,    299,    300,    301,    302,    304,
-     305,    306,    308,    309,    310,    311,    313,    314,
-     315,    316,    317,    319,    320,    321,    322,    324,
-     325,    326,    327,    328,    330,    331,    332,    333,
-     334,    336,    337,    338,    339,    340,    342,    343,
-     344,    345,    346,    347,    348,    350,    351,    352,
-     353,    354,    355,    356,    358,    359,    360,    361,
-     362,    363,    364,    365,    366,    368,    369,    370,
-     371,    372,    373,    374,    375,    376,    377,    378,
-     379,    380,    381,    383,    384,    385,    386,    387,
-     388,    389,    390,    391,    392,    393,    394,    395,
-     396,    397,    398,    399,    400,    401,    402,    403,
-     404,    405,    406,    407,    407,    408,    409,    410,
-     411,    412,    413,    414,    415,    416,    417,    418,
-     419,    420,    420,    421,    422,    423,    424,    425,
-     426,    427,    427,    428,    429,    430,    431,    432,
-     433,    433,    434,    435,    436,    437,    438,    438,
-     439,    440,    441,    442,    442,    443,    444,    445,
-     445,    446,    447,    448,    449,    449,    450,    451,
-     452,    452,    453,    454,    454,    455,    456,    457,
-     457,    458,    459,    459,    460,    461,    461,    462,
-     463,    464,    464,    465,    465,    466,    467,    467,
-     468,    469,    469,    470,    471,    471,    472,    472,
-     473,    474,    474,    475,    475,    476,    477,    477,
-     478,    478,    479,    479,    480,    480,    481,    482,
-     482,    483,    483,    484,    484,    485,    485,    486,
-     486,    487,    487,    488,    488,    489,    489,    489,
-     490,    490,    491,    491,    492,    492,    493,    493,
-     493,    494,    494,    495,    495,    495,    496,    496,
-     497,    497,    497,    498,    498,    499,    499,    499,
-     500,    500,    500,    501,    501,    501,    502,    502,
-     502,    502,    503,    503,    503,    504,    504,    504,
-     504,    505,    505,    505,    505,    506,    506,    506,
-     506,    507,    507,    507,    507,    508,    508,    508,
-     508,    508,    509,    509,    509,    509,    509,    509,
-     510,    510,    510,    510,    510,    510,    510,    510,
-     511,    511,    511,    511,    511,    511,    511,    511,
-     511,    511,    512,    512,    512,    512,    512,    512,
-     512,    512,    512,    512,    512,    512,    512,    512,
+       0,     13,     25,     38,     50,     63,     76,     88,
+     101,    113,    126,    138,    151,    164,    176,    189,
+     201,    214,    227,    239,    252,    264,    277,    289,
+     302,    314,    327,    340,    352,    365,    377,    390,
+     402,    415,    427,    440,    452,    465,    477,    490,
+     502,    515,    527,    540,    552,    565,    577,    590,
+     602,    615,    627,    640,    652,    664,    677,    689,
+     702,    714,    726,    739,    751,    764,    776,    788,
+     801,    813,    825,    838,    850,    862,    875,    887,
+     899,    911,    924,    936,    948,    960,    973,    985,
+     997,   1009,   1022,   1034,   1046,   1058,   1070,   1082,
+    1095,   1107,   1119,   1131,   1143,   1155,   1167,   1179,
+    1191,   1203,   1215,   1227,   1239,   1251,   1263,   1275,
+    1287,   1299,   1311,   1323,   1335,   1347,   1359,   1371,
+    1382,   1394,   1406,   1418,   1430,   1442,   1453,   1465,
+    1477,   1489,   1500,   1512,   1524,   1535,   1547,   1559,
+    1570,   1582,   1594,   1605,   1617,   1628,   1640,   1651,
+    1663,   1674,   1686,   1697,   1709,   1720,   1732,   1743,
+    1754,   1766,   1777,   1789,   1800,   1811,   1822,   1834,
+    1845,   1856,   1867,   1879,   1890,   1901,   1912,   1923,
+    1934,   1945,   1956,   1968,   1979,   1990,   2001,   2012,
+    2023,   2033,   2044,   2055,   2066,   2077,   2088,   2099,
+    2109,   2120,   2131,   2142,   2152,   2163,   2174,   2185,
+    2195,   2206,   2216,   2227,   2238,   2248,   2259,   2269,
+    2280,   2290,   2300,   2311,   2321,   2332,   2342,   2352,
+    2363,   2373,   2383,   2393,   2403,   2414,   2424,   2434,
+    2444,   2454,   2464,   2474,   2484,   2494,   2504,   2514,
+    2524,   2534,   2544,   2554,   2564,   2573,   2583,   2593,
+    2603,   2612,   2622,   2632,   2641,   2651,   2661,   2670,
+    2680,   2689,   2699,   2708,   2718,   2727,   2736,   2746,
+    2755,   2764,   2774,   2783,   2792,   2801,   2811,   2820,
+    2829,   2838,   2847,   2856,   2865,   2874,   2883,   2892,
+    2901,   2910,   2918,   2927,   2936,   2945,   2954,   2962,
+    2971,   2980,   2988,   2997,   3005,   3014,   3022,   3031,
+    3039,   3048,   3056,   3065,   3073,   3081,   3090,   3098,
+    3106,   3114,   3122,   3131,   3139,   3147,   3155,   3163,
+    3171,   3179,   3187,   3195,   3202,   3210,   3218,   3226,
+    3234,   3241,   3249,   3257,   3264,   3272,   3279,   3287,
+    3294,   3302,   3309,   3317,   3324,   3331,   3339,   3346,
+    3353,   3360,   3368,   3375,   3382,   3389,   3396,   3403,
+    3410,   3417,   3424,   3431,   3438,   3445,   3451,   3458,
+    3465,   3472,   3478,   3485,   3491,   3498,   3505,   3511,
+    3517,   3524,   3530,   3537,   3543,   3549,   3556,   3562,
+    3568,   3574,   3580,   3586,   3593,   3599,   3605,   3610,
+    3616,   3622,   3628,   3634,   3640,   3646,   3651,   3657,
+    3663,   3668,   3674,   3679,   3685,   3690,   3696,   3701,
+    3707,   3712,   3717,   3723,   3728,   3733,   3738,   3743,
+    3748,   3753,   3758,   3763,   3768,   3773,   3778,   3783,
+    3788,   3793,   3797,   3802,   3807,   3811,   3816,   3820,
+    3825,   3829,   3834,   3838,   3843,   3847,   3851,   3856,
+    3860,   3864,   3868,   3872,   3876,   3880,   3884,   3888,
+    3892,   3896,   3900,   3904,   3908,   3912,   3915,   3919,
+    3923,   3926,   3930,   3933,   3937,   3940,   3944,   3947,
+    3950,   3954,   3957,   3960,   3963,   3967,   3970,   3973,
+    3976,   3979,   3982,   3985,   3988,   3990,   3993,   3996,
+    3999,   4002,   4004,   4007,   4009,   4012,   4015,   4017,
+    4019,   4022,   4024,   4027,   4029,   4031,   4033,   4035,
+    4038,   4040,   4042,   4044,   4046,   4048,   4050,   4051,
+    4053,   4055,   4057,   4059,   4060,   4062,   4064,   4065,
+    4067,   4068,   4070,   4071,   4072,   4074,   4075,   4076,
+    4077,   4079,   4080,   4081,   4082,   4083,   4084,   4085,
+    4086,   4087,   4087,   4088,   4089,   4090,   4090,   4091,
+    4092,   4092,   4093,   4093,   4094,   4094,   4094,   4095,
+    4095,   4095,   4096,   4096,   4096,   4096,   4096,   4096,
 };
 const prog_uint16_t lut_res_right_cos_pan[] PROGMEM = {
-     512,    512,    512,    512,    512,    512,    512,    512,
-     512,    512,    512,    512,    512,    512,    512,    511,
-     511,    511,    511,    511,    511,    511,    511,    511,
-     511,    510,    510,    510,    510,    510,    510,    510,
-     510,    509,    509,    509,    509,    509,    509,    508,
-     508,    508,    508,    508,    507,    507,    507,    507,
-     506,    506,    506,    506,    505,    505,    505,    505,
-     504,    504,    504,    504,    503,    503,    503,    502,
-     502,    502,    502,    501,    501,    501,    500,    500,
-     500,    499,    499,    499,    498,    498,    497,    497,
-     497,    496,    496,    495,    495,    495,    494,    494,
-     493,    493,    493,    492,    492,    491,    491,    490,
-     490,    489,    489,    489,    488,    488,    487,    487,
-     486,    486,    485,    485,    484,    484,    483,    483,
-     482,    482,    481,    480,    480,    479,    479,    478,
-     478,    477,    477,    476,    475,    475,    474,    474,
-     473,    472,    472,    471,    471,    470,    469,    469,
-     468,    467,    467,    466,    465,    465,    464,    464,
-     463,    462,    461,    461,    460,    459,    459,    458,
-     457,    457,    456,    455,    454,    454,    453,    452,
-     452,    451,    450,    449,    449,    448,    447,    446,
-     445,    445,    444,    443,    442,    442,    441,    440,
-     439,    438,    438,    437,    436,    435,    434,    433,
-     433,    432,    431,    430,    429,    428,    427,    427,
-     426,    425,    424,    423,    422,    421,    420,    420,
-     419,    418,    417,    416,    415,    414,    413,    412,
-     411,    410,    409,    408,    407,    407,    406,    405,
-     404,    403,    402,    401,    400,    399,    398,    397,
-     396,    395,    394,    393,    392,    391,    390,    389,
-     388,    387,    386,    385,    384,    383,    381,    380,
-     379,    378,    377,    376,    375,    374,    373,    372,
-     371,    370,    369,    368,    366,    365,    364,    363,
-     362,    361,    360,    359,    358,    356,    355,    354,
-     353,    352,    351,    350,    348,    347,    346,    345,
-     344,    343,    342,    340,    339,    338,    337,    336,
-     334,    333,    332,    331,    330,    328,    327,    326,
-     325,    324,    322,    321,    320,    319,    317,    316,
-     315,    314,    313,    311,    310,    309,    308,    306,
-     305,    304,    302,    301,    300,    299,    297,    296,
-     295,    294,    292,    291,    290,    288,    287,    286,
-     284,    283,    282,    281,    279,    278,    277,    275,
-     274,    273,    271,    270,    269,    267,    266,    265,
-     263,    262,    261,    259,    258,    256,    255,    254,
-     252,    251,    250,    248,    247,    246,    244,    243,
-     241,    240,    239,    237,    236,    234,    233,    232,
-     230,    229,    227,    226,    225,    223,    222,    220,
-     219,    217,    216,    215,    213,    212,    210,    209,
-     207,    206,    205,    203,    202,    200,    199,    197,
-     196,    194,    193,    192,    190,    189,    187,    186,
-     184,    183,    181,    180,    178,    177,    175,    174,
-     172,    171,    170,    168,    167,    165,    164,    162,
-     161,    159,    158,    156,    155,    153,    152,    150,
-     149,    147,    146,    144,    143,    141,    140,    138,
-     137,    135,    134,    132,    130,    129,    127,    126,
-     124,    123,    121,    120,    118,    117,    115,    114,
-     112,    111,    109,    108,    106,    105,    103,    101,
-     100,     98,     97,     95,     94,     92,     91,     89,
-      88,     86,     84,     83,     81,     80,     78,     77,
-      75,     74,     72,     70,     69,     67,     66,     64,
-      63,     61,     60,     58,     56,     55,     53,     52,
-      50,     49,     47,     45,     44,     42,     41,     39,
-      38,     36,     35,     33,     31,     30,     28,     27,
-      25,     24,     22,     20,     19,     17,     16,     14,
-      13,     11,      9,      8,      6,      5,      3,      0,
+    4096,   4096,   4096,   4096,   4096,   4096,   4095,   4095,
+    4095,   4094,   4094,   4094,   4093,   4093,   4092,   4092,
+    4091,   4090,   4090,   4089,   4088,   4087,   4087,   4086,
+    4085,   4084,   4083,   4082,   4081,   4080,   4079,   4077,
+    4076,   4075,   4074,   4072,   4071,   4070,   4068,   4067,
+    4065,   4064,   4062,   4060,   4059,   4057,   4055,   4053,
+    4051,   4050,   4048,   4046,   4044,   4042,   4040,   4038,
+    4035,   4033,   4031,   4029,   4027,   4024,   4022,   4019,
+    4017,   4015,   4012,   4009,   4007,   4004,   4002,   3999,
+    3996,   3993,   3990,   3988,   3985,   3982,   3979,   3976,
+    3973,   3970,   3967,   3963,   3960,   3957,   3954,   3950,
+    3947,   3944,   3940,   3937,   3933,   3930,   3926,   3923,
+    3919,   3915,   3912,   3908,   3904,   3900,   3896,   3892,
+    3888,   3884,   3880,   3876,   3872,   3868,   3864,   3860,
+    3856,   3851,   3847,   3843,   3838,   3834,   3829,   3825,
+    3820,   3816,   3811,   3807,   3802,   3797,   3793,   3788,
+    3783,   3778,   3773,   3768,   3763,   3758,   3753,   3748,
+    3743,   3738,   3733,   3728,   3723,   3717,   3712,   3707,
+    3701,   3696,   3690,   3685,   3679,   3674,   3668,   3663,
+    3657,   3651,   3646,   3640,   3634,   3628,   3622,   3616,
+    3610,   3605,   3599,   3593,   3586,   3580,   3574,   3568,
+    3562,   3556,   3549,   3543,   3537,   3530,   3524,   3517,
+    3511,   3505,   3498,   3491,   3485,   3478,   3472,   3465,
+    3458,   3451,   3445,   3438,   3431,   3424,   3417,   3410,
+    3403,   3396,   3389,   3382,   3375,   3368,   3360,   3353,
+    3346,   3339,   3331,   3324,   3317,   3309,   3302,   3294,
+    3287,   3279,   3272,   3264,   3257,   3249,   3241,   3234,
+    3226,   3218,   3210,   3202,   3195,   3187,   3179,   3171,
+    3163,   3155,   3147,   3139,   3131,   3122,   3114,   3106,
+    3098,   3090,   3081,   3073,   3065,   3056,   3048,   3039,
+    3031,   3022,   3014,   3005,   2997,   2988,   2980,   2971,
+    2962,   2954,   2945,   2936,   2927,   2918,   2910,   2901,
+    2892,   2883,   2874,   2865,   2856,   2847,   2838,   2829,
+    2820,   2811,   2801,   2792,   2783,   2774,   2764,   2755,
+    2746,   2736,   2727,   2718,   2708,   2699,   2689,   2680,
+    2670,   2661,   2651,   2641,   2632,   2622,   2612,   2603,
+    2593,   2583,   2573,   2564,   2554,   2544,   2534,   2524,
+    2514,   2504,   2494,   2484,   2474,   2464,   2454,   2444,
+    2434,   2424,   2414,   2403,   2393,   2383,   2373,   2363,
+    2352,   2342,   2332,   2321,   2311,   2300,   2290,   2280,
+    2269,   2259,   2248,   2238,   2227,   2216,   2206,   2195,
+    2185,   2174,   2163,   2152,   2142,   2131,   2120,   2109,
+    2099,   2088,   2077,   2066,   2055,   2044,   2033,   2023,
+    2012,   2001,   1990,   1979,   1968,   1956,   1945,   1934,
+    1923,   1912,   1901,   1890,   1879,   1867,   1856,   1845,
+    1834,   1822,   1811,   1800,   1789,   1777,   1766,   1754,
+    1743,   1732,   1720,   1709,   1697,   1686,   1674,   1663,
+    1651,   1640,   1628,   1617,   1605,   1594,   1582,   1570,
+    1559,   1547,   1535,   1524,   1512,   1500,   1489,   1477,
+    1465,   1453,   1442,   1430,   1418,   1406,   1394,   1382,
+    1371,   1359,   1347,   1335,   1323,   1311,   1299,   1287,
+    1275,   1263,   1251,   1239,   1227,   1215,   1203,   1191,
+    1179,   1167,   1155,   1143,   1131,   1119,   1107,   1095,
+    1082,   1070,   1058,   1046,   1034,   1022,   1009,    997,
+     985,    973,    960,    948,    936,    924,    911,    899,
+     887,    875,    862,    850,    838,    825,    813,    801,
+     788,    776,    764,    751,    739,    726,    714,    702,
+     689,    677,    664,    652,    640,    627,    615,    602,
+     590,    577,    565,    552,    540,    527,    515,    502,
+     490,    477,    465,    452,    440,    427,    415,    402,
+     390,    377,    365,    352,    340,    327,    314,    302,
+     289,    277,    264,    252,    239,    227,    214,    201,
+     189,    176,    164,    151,    138,    126,    113,    101,
+      88,     76,     63,     50,     38,     25,     13,      0,
 };
 
 
diff --git a/stereo_mix/resources/lookup_tables.py b/stereo_mix/resources/lookup_tables.py
index c34d94d..92f7e8b 100644
--- a/stereo_mix/resources/lookup_tables.py
+++ b/stereo_mix/resources/lookup_tables.py
@@ -1,30 +1,30 @@
-import numpy
+import numpy as np
 lookup_tables = []
 lookup_tables_32 = []
 
+ADC_RESOLUTION = 512
+OUTPUT_RESOLUTION = 4096
 
 # linear to exponential conversion
 
 values = []
-size = 512.0
+size = ADC_RESOLUTION
 for x in range(1, int(size) + 1):
-    values.append(numpy.power(x / 512.0, 2) * size)
+    values.append(np.power(x / float(ADC_RESOLUTION), 2) * OUTPUT_RESOLUTION)
 
 lookup_tables.append(('linear_to_exp', values))
 
 
 # Left pan Lookup table
 
-l_pan = numpy.arange(0, 512)
-r_pan = numpy.arange(0, 512)
+l_pan = np.linspace(0, OUTPUT_RESOLUTION, num=ADC_RESOLUTION)
+r_pan = np.linspace(0, OUTPUT_RESOLUTION, num=ADC_RESOLUTION)
 
-l_pan = numpy.sin((l_pan / 512.0) * (numpy.pi / 2.0))
-r_pan = numpy.cos((r_pan / 512.0) * (numpy.pi / 2.0))
+l_pan = np.sin((l_pan / OUTPUT_RESOLUTION) * (np.pi / 2.0))
+r_pan = np.cos((r_pan / OUTPUT_RESOLUTION) * (np.pi / 2.0))
 
-l_pan = numpy.round(l_pan * 512)
-r_pan = numpy.round(r_pan * 512)
-
-r_pan[511] = 0 # dirty fix
+l_pan = np.round(l_pan * OUTPUT_RESOLUTION)
+r_pan = np.round(r_pan * OUTPUT_RESOLUTION)
 
 lookup_tables.append(('left_sin_pan', l_pan))
 lookup_tables.append(('right_cos_pan', r_pan))
diff --git a/stereo_mix/stereo_mix.cc b/stereo_mix/stereo_mix.cc
index 8d115e0..bf1af9c 100644
--- a/stereo_mix/stereo_mix.cc
+++ b/stereo_mix/stereo_mix.cc
@@ -8,8 +8,6 @@
 #include "avrlib/watchdog_timer.h"
 #include "stereo_mix/resources.h"
 
-#define degToRad(angleInDegrees) ((angleInDegrees)*M_PI / 180.0)
-
 using namespace avrlib;
 using namespace stereo_mix;
 
@@ -55,19 +53,19 @@ int main(void)
 
   AnalogInputs::set_num_inputs(8);
 
-#define WRITE(DAC, ODAC, N)                                    \
-  DAC::Write((volume[N] * pan[N * NUM_CHANNELS]) >> 8, 0);     \
-  ODAC::Write((volume[N] * pan[N * NUM_CHANNELS]) >> 8, 0);    \
-  DAC::Write((volume[N] * pan[N * NUM_CHANNELS + 1]) >> 8, 1); \
-  ODAC::Write((volume[N] * pan[N * NUM_CHANNELS + 1]) >> 8, 1);
+#define WRITE(DAC, ODAC, N)                                     \
+  DAC::Write((volume[N] * pan[N * NUM_CHANNELS]) >> 12, 0);     \
+  ODAC::Write((volume[N] * pan[N * NUM_CHANNELS]) >> 12, 0);    \
+  DAC::Write((volume[N] * pan[N * NUM_CHANNELS + 1]) >> 12, 1); \
+  ODAC::Write((volume[N] * pan[N * NUM_CHANNELS + 1]) >> 12, 1);
 
   while (true) {
     ResetWatchdog();
 
     int i = AnalogInputs::current_pin() % NUM_CHANNELS;
-    volume[i] = pgm_read_word_near(lut_res_linear_to_exp + (AnalogInputs::Read(i) >> 1)) << 1;
-    pan[i * NUM_CHANNELS] = pgm_read_word(lut_res_left_sin_pan + (AnalogInputs::Read(i + NUM_CHANNELS) >> 1)) << 1;
-    pan[i * NUM_CHANNELS + 1] = pgm_read_word(lut_res_right_cos_pan + (AnalogInputs::Read(i + NUM_CHANNELS) >> 1)) << 1;
+    volume[i] = pgm_read_word_near(lut_res_linear_to_exp + (AnalogInputs::Read(i) >> 1));
+    pan[i * NUM_CHANNELS] = pgm_read_word(lut_res_left_sin_pan + (AnalogInputs::Read(i + NUM_CHANNELS) >> 1));
+    pan[i * NUM_CHANNELS + 1] = pgm_read_word(lut_res_right_cos_pan + (AnalogInputs::Read(i + NUM_CHANNELS) >> 1));
 
     switch (i) {
     case 0: