mirror of
				https://github.com/jhbruhn/eurorack.git
				synced 2025-11-03 21:06:02 +00:00 
			
		
		
		
	Replace weird nonworking wavefolder with sustain/silence length
adjustment
This commit is contained in:
		
							parent
							
								
									0a1729b7cd
								
							
						
					
					
						commit
						6b5d815f74
					
				
					 5 changed files with 77 additions and 236 deletions
				
			
		| 
						 | 
				
			
			@ -136,180 +136,12 @@ const prog_uint16_t lut_res_env_quartic[] PROGMEM = {
 | 
			
		|||
   59750,  60553,  61364,  62183,  63010,  63843,  64685,  65535,
 | 
			
		||||
   65535,
 | 
			
		||||
};
 | 
			
		||||
const prog_uint16_t lut_res_raised_cosine[] PROGMEM = {
 | 
			
		||||
       0,      2,      9,     22,     39,     61,     88,    120,
 | 
			
		||||
     157,    199,    246,    298,    354,    416,    482,    553,
 | 
			
		||||
     629,    710,    796,    886,    982,   1082,   1186,   1296,
 | 
			
		||||
    1410,   1530,   1653,   1782,   1915,   2053,   2195,   2342,
 | 
			
		||||
    2494,   2650,   2811,   2976,   3146,   3320,   3498,   3681,
 | 
			
		||||
    3869,   4060,   4256,   4457,   4661,   4870,   5083,   5300,
 | 
			
		||||
    5522,   5747,   5977,   6210,   6448,   6689,   6935,   7184,
 | 
			
		||||
    7437,   7694,   7955,   8220,   8488,   8760,   9035,   9314,
 | 
			
		||||
    9597,   9883,  10172,  10465,  10762,  11061,  11364,  11670,
 | 
			
		||||
   11980,  12292,  12607,  12926,  13247,  13572,  13899,  14229,
 | 
			
		||||
   14562,  14898,  15236,  15578,  15921,  16267,  16616,  16967,
 | 
			
		||||
   17321,  17676,  18034,  18395,  18757,  19122,  19488,  19857,
 | 
			
		||||
   20227,  20600,  20974,  21350,  21728,  22107,  22488,  22871,
 | 
			
		||||
   23255,  23641,  24027,  24416,  24805,  25196,  25588,  25980,
 | 
			
		||||
   26374,  26769,  27165,  27562,  27959,  28357,  28756,  29155,
 | 
			
		||||
   29555,  29956,  30356,  30758,  31159,  31561,  31963,  32365,
 | 
			
		||||
   32767,  33169,  33571,  33973,  34375,  34776,  35178,  35578,
 | 
			
		||||
   35979,  36379,  36778,  37177,  37575,  37972,  38369,  38765,
 | 
			
		||||
   39160,  39554,  39946,  40338,  40729,  41118,  41507,  41893,
 | 
			
		||||
   42279,  42663,  43046,  43427,  43806,  44184,  44560,  44934,
 | 
			
		||||
   45307,  45677,  46046,  46412,  46777,  47139,  47500,  47858,
 | 
			
		||||
   48213,  48567,  48918,  49267,  49613,  49956,  50298,  50636,
 | 
			
		||||
   50972,  51305,  51635,  51962,  52287,  52608,  52927,  53242,
 | 
			
		||||
   53554,  53864,  54170,  54473,  54772,  55069,  55362,  55651,
 | 
			
		||||
   55937,  56220,  56499,  56774,  57046,  57314,  57579,  57840,
 | 
			
		||||
   58097,  58350,  58599,  58845,  59086,  59324,  59557,  59787,
 | 
			
		||||
   60012,  60234,  60451,  60664,  60873,  61077,  61278,  61474,
 | 
			
		||||
   61665,  61853,  62036,  62214,  62388,  62558,  62723,  62884,
 | 
			
		||||
   63040,  63192,  63339,  63481,  63619,  63752,  63881,  64004,
 | 
			
		||||
   64124,  64238,  64348,  64452,  64552,  64648,  64738,  64824,
 | 
			
		||||
   64905,  64981,  65052,  65118,  65180,  65236,  65288,  65335,
 | 
			
		||||
   65377,  65414,  65446,  65473,  65495,  65512,  65525,  65532,
 | 
			
		||||
   65532,
 | 
			
		||||
};
 | 
			
		||||
const prog_uint16_t lut_res_unipolar_fold[] PROGMEM = {
 | 
			
		||||
       0,    352,    703,   1054,   1404,   1754,   2102,   2450,
 | 
			
		||||
    2796,   3141,   3483,   3824,   4163,   4500,   4834,   5165,
 | 
			
		||||
    5494,   5819,   6141,   6460,   6776,   7088,   7395,   7699,
 | 
			
		||||
    7999,   8294,   8585,   8871,   9152,   9429,   9700,   9966,
 | 
			
		||||
   10227,  10482,  10731,  10975,  11213,  11445,  11671,  11891,
 | 
			
		||||
   12104,  12311,  12512,  12706,  12893,  13073,  13247,  13414,
 | 
			
		||||
   13574,  13727,  13873,  14012,  14144,  14268,  14386,  14496,
 | 
			
		||||
   14598,  14694,  14782,  14863,  14937,  15003,  15062,  15113,
 | 
			
		||||
   15158,  15195,  15225,  15247,  15263,  15271,  15272,  15266,
 | 
			
		||||
   15253,  15234,  15207,  15174,  15133,  15087,  15033,  14973,
 | 
			
		||||
   14907,  14834,  14756,  14671,  14580,  14483,  14381,  14273,
 | 
			
		||||
   14159,  14040,  13915,  13786,  13651,  13512,  13368,  13219,
 | 
			
		||||
   13066,  12909,  12747,  12582,  12412,  12239,  12063,  11883,
 | 
			
		||||
   11700,  11513,  11324,  11133,  10939,  10742,  10544,  10343,
 | 
			
		||||
   10141,   9936,   9731,   9524,   9316,   9107,   8898,   8688,
 | 
			
		||||
    8477,   8266,   8055,   7845,   7634,   7424,   7215,   7007,
 | 
			
		||||
    6799,   6593,   6388,   6184,   5983,   5783,   5585,   5389,
 | 
			
		||||
    5196,   5005,   4816,   4631,   4448,   4269,   4092,   3919,
 | 
			
		||||
    3750,   3584,   3422,   3264,   3110,   2960,   2814,   2673,
 | 
			
		||||
    2536,   2403,   2276,   2153,   2035,   1922,   1815,   1712,
 | 
			
		||||
    1615,   1523,   1436,   1355,   1280,   1210,   1146,   1087,
 | 
			
		||||
    1035,    988,    947,    912,    883,    860,    843,    832,
 | 
			
		||||
     827,    828,    835,    848,    867,    893,    924,    962,
 | 
			
		||||
    1005,   1055,   1110,   1172,   1239,   1312,   1391,   1476,
 | 
			
		||||
    1567,   1663,   1766,   1873,   1987,   2105,   2229,   2359,
 | 
			
		||||
    2494,   2634,   2779,   2929,   3084,   3244,   3408,   3578,
 | 
			
		||||
    3751,   3930,   4112,   4299,   4490,   4686,   4885,   5087,
 | 
			
		||||
    5294,   5504,   5718,   5935,   6155,   6378,   6604,   6834,
 | 
			
		||||
    7065,   7300,   7537,   7776,   8017,   8261,   8506,   8753,
 | 
			
		||||
    9002,   9253,   9504,   9757,  10012,  10267,  10523,  10780,
 | 
			
		||||
   11037,  11295,  11553,  11812,  12070,  12329,  12587,  12845,
 | 
			
		||||
   13103,  13360,  13616,  13871,  14126,  14380,  14632,  14883,
 | 
			
		||||
   15133,  15381,  15627,  15872,  16115,  16356,  16595,  16832,
 | 
			
		||||
   17067,  17299,  17529,  17756,  17980,  18202,  18422,  18638,
 | 
			
		||||
   18851,  19061,  19268,  19472,  19673,  19871,  20065,  20255,
 | 
			
		||||
   20442,  20626,  20806,  20982,  21154,  21323,  21488,  21649,
 | 
			
		||||
   21807,  21960,  22110,  22255,  22397,  22534,  22668,  22797,
 | 
			
		||||
   22923,  23044,  23162,  23275,  23384,  23489,  23590,  23687,
 | 
			
		||||
   23780,  23869,  23954,  24035,  24112,  24185,  24254,  24320,
 | 
			
		||||
   24381,  24438,  24492,  24542,  24588,  24631,  24669,  24705,
 | 
			
		||||
   24736,  24764,  24789,  24810,  24828,  24843,  24854,  24862,
 | 
			
		||||
   24867,  24869,  24868,  24865,  24858,  24848,  24836,  24821,
 | 
			
		||||
   24803,  24783,  24761,  24736,  24709,  24680,  24648,  24614,
 | 
			
		||||
   24579,  24541,  24502,  24461,  24418,  24374,  24328,  24281,
 | 
			
		||||
   24232,  24183,  24131,  24079,  24026,  23972,  23917,  23861,
 | 
			
		||||
   23804,  23747,  23689,  23631,  23572,  23513,  23454,  23394,
 | 
			
		||||
   23335,  23275,  23216,  23156,  23097,  23038,  22979,  22920,
 | 
			
		||||
   22862,  22805,  22748,  22692,  22636,  22581,  22527,  22474,
 | 
			
		||||
   22422,  22370,  22320,  22271,  22223,  22176,  22130,  22086,
 | 
			
		||||
   22043,  22001,  21961,  21922,  21884,  21849,  21814,  21782,
 | 
			
		||||
   21750,  21721,  21693,  21667,  21642,  21620,  21599,  21580,
 | 
			
		||||
   21562,  21547,  21533,  21521,  21511,  21503,  21497,  21493,
 | 
			
		||||
   21490,  21490,  21491,  21495,  21500,  21507,  21516,  21527,
 | 
			
		||||
   21539,  21554,  21571,  21589,  21609,  21631,  21655,  21681,
 | 
			
		||||
   21708,  21738,  21769,  21801,  21836,  21872,  21910,  21949,
 | 
			
		||||
   21990,  22033,  22077,  22123,  22171,  22219,  22270,  22321,
 | 
			
		||||
   22375,  22429,  22485,  22542,  22600,  22660,  22721,  22782,
 | 
			
		||||
   22845,  22910,  22975,  23041,  23108,  23176,  23245,  23315,
 | 
			
		||||
   23386,  23457,  23529,  23602,  23676,  23750,  23824,  23900,
 | 
			
		||||
   23975,  24052,  24128,  24205,  24283,  24361,  24438,  24517,
 | 
			
		||||
   24595,  24674,  24752,  24831,  24910,  24989,  25068,  25146,
 | 
			
		||||
   25225,  25304,  25382,  25460,  25538,  25616,  25693,  25770,
 | 
			
		||||
   25847,  25923,  25999,  26075,  26150,  26224,  26298,  26372,
 | 
			
		||||
   26445,  26517,  26589,  26660,  26730,  26800,  26869,  26937,
 | 
			
		||||
   27004,  27071,  27137,  27202,  27266,  27330,  27392,  27454,
 | 
			
		||||
   27515,  27575,  27634,  27692,  27749,  27805,  27861,  27915,
 | 
			
		||||
   27968,  28021,  28072,  28123,  28172,  28221,  28268,  28315,
 | 
			
		||||
   28360,  28404,  28448,  28490,  28532,  28572,  28612,  28650,
 | 
			
		||||
   28688,  28725,  28760,  28795,  28828,  28861,  28893,  28923,
 | 
			
		||||
   28953,  28982,  29010,  29037,  29063,  29089,  29113,  29136,
 | 
			
		||||
   29159,  29181,  29202,  29222,  29241,  29260,  29277,  29294,
 | 
			
		||||
   29310,  29326,  29341,  29355,  29368,  29380,  29392,  29404,
 | 
			
		||||
   29414,  29424,  29434,  29443,  29451,  29459,  29466,  29472,
 | 
			
		||||
   29478,  29484,  29489,  29494,  29498,  29502,  29505,  29508,
 | 
			
		||||
   29511,  29513,  29515,  29517,  29518,  29519,  29520,  29521,
 | 
			
		||||
   29521,  29521,  29520,  29520,  29519,  29519,  29518,  29517,
 | 
			
		||||
   29515,  29514,  29513,  29511,  29510,  29508,  29506,  29505,
 | 
			
		||||
   29503,  29501,  29499,  29498,  29496,  29494,  29493,  29491,
 | 
			
		||||
   29490,  29488,  29487,  29486,  29484,  29483,  29483,  29482,
 | 
			
		||||
   29481,  29481,  29481,  29480,  29480,  29481,  29481,  29482,
 | 
			
		||||
   29482,  29483,  29485,  29486,  29488,  29490,  29492,  29494,
 | 
			
		||||
   29496,  29499,  29502,  29505,  29509,  29513,  29517,  29521,
 | 
			
		||||
   29525,  29530,  29535,  29540,  29546,  29551,  29557,  29564,
 | 
			
		||||
   29570,  29577,  29584,  29591,  29598,  29606,  29614,  29622,
 | 
			
		||||
   29631,  29639,  29648,  29657,  29667,  29676,  29686,  29696,
 | 
			
		||||
   29706,  29717,  29728,  29738,  29749,  29761,  29772,  29784,
 | 
			
		||||
   29796,  29808,  29820,  29832,  29845,  29857,  29870,  29883,
 | 
			
		||||
   29896,  29910,  29923,  29937,  29950,  29964,  29978,  29992,
 | 
			
		||||
   30006,  30021,  30035,  30050,  30064,  30079,  30093,  30108,
 | 
			
		||||
   30123,  30138,  30153,  30168,  30183,  30198,  30213,  30229,
 | 
			
		||||
   30244,  30259,  30274,  30290,  30305,  30320,  30336,  30351,
 | 
			
		||||
   30366,  30382,  30397,  30412,  30428,  30443,  30458,  30473,
 | 
			
		||||
   30488,  30504,  30519,  30534,  30549,  30564,  30579,  30593,
 | 
			
		||||
   30608,  30623,  30637,  30652,  30667,  30681,  30695,  30710,
 | 
			
		||||
   30724,  30738,  30752,  30766,  30780,  30794,  30807,  30821,
 | 
			
		||||
   30834,  30848,  30861,  30874,  30887,  30900,  30913,  30926,
 | 
			
		||||
   30939,  30951,  30964,  30976,  30988,  31001,  31013,  31025,
 | 
			
		||||
   31036,  31048,  31060,  31071,  31083,  31094,  31105,  31117,
 | 
			
		||||
   31128,  31138,  31149,  31160,  31171,  31181,  31191,  31202,
 | 
			
		||||
   31212,  31222,  31232,  31242,  31252,  31262,  31271,  31281,
 | 
			
		||||
   31290,  31299,  31309,  31318,  31327,  31336,  31345,  31354,
 | 
			
		||||
   31362,  31371,  31380,  31388,  31397,  31405,  31413,  31422,
 | 
			
		||||
   31430,  31438,  31446,  31454,  31462,  31469,  31477,  31485,
 | 
			
		||||
   31492,  31500,  31508,  31515,  31522,  31530,  31537,  31544,
 | 
			
		||||
   31552,  31559,  31566,  31573,  31580,  31587,  31594,  31601,
 | 
			
		||||
   31608,  31615,  31621,  31628,  31635,  31642,  31648,  31655,
 | 
			
		||||
   31662,  31668,  31675,  31682,  31688,  31695,  31701,  31708,
 | 
			
		||||
   31714,  31721,  31727,  31733,  31740,  31746,  31753,  31759,
 | 
			
		||||
   31765,  31772,  31778,  31785,  31791,  31797,  31804,  31810,
 | 
			
		||||
   31816,  31823,  31829,  31835,  31842,  31848,  31854,  31861,
 | 
			
		||||
   31867,  31873,  31880,  31886,  31892,  31898,  31905,  31911,
 | 
			
		||||
   31917,  31924,  31930,  31937,  31943,  31949,  31956,  31962,
 | 
			
		||||
   31968,  31975,  31981,  31987,  31994,  32000,  32007,  32013,
 | 
			
		||||
   32019,  32026,  32032,  32039,  32045,  32052,  32058,  32065,
 | 
			
		||||
   32071,  32077,  32084,  32090,  32097,  32103,  32110,  32116,
 | 
			
		||||
   32123,  32129,  32136,  32142,  32149,  32155,  32162,  32168,
 | 
			
		||||
   32175,  32181,  32188,  32194,  32201,  32207,  32214,  32220,
 | 
			
		||||
   32227,  32233,  32240,  32246,  32253,  32259,  32266,  32272,
 | 
			
		||||
   32279,  32285,  32292,  32298,  32305,  32311,  32318,  32324,
 | 
			
		||||
   32331,  32337,  32344,  32350,  32357,  32363,  32370,  32376,
 | 
			
		||||
   32382,  32389,  32395,  32402,  32408,  32414,  32421,  32427,
 | 
			
		||||
   32434,  32440,  32446,  32453,  32459,  32465,  32472,  32478,
 | 
			
		||||
   32484,  32490,  32497,  32503,  32509,  32516,  32522,  32528,
 | 
			
		||||
   32534,  32540,  32547,  32553,  32559,  32565,  32571,  32577,
 | 
			
		||||
   32583,  32590,  32596,  32602,  32608,  32614,  32620,  32626,
 | 
			
		||||
   32632,  32638,  32644,  32650,  32656,  32662,  32668,  32674,
 | 
			
		||||
   32680,  32686,  32692,  32697,  32703,  32709,  32715,  32721,
 | 
			
		||||
   32727,  32732,  32738,  32744,  32750,  32756,  32761,  32767,
 | 
			
		||||
   32767,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const prog_uint16_t* const lookup_table_table[] = {
 | 
			
		||||
  lut_res_env_linear,
 | 
			
		||||
  lut_res_env_expo,
 | 
			
		||||
  lut_res_env_quartic,
 | 
			
		||||
  lut_res_raised_cosine,
 | 
			
		||||
  lut_res_unipolar_fold,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
const prog_uint32_t lut_res_env_increments[] PROGMEM = {
 | 
			
		||||
| 
						 | 
				
			
			@ -348,38 +180,38 @@ const prog_uint32_t lut_res_env_increments[] PROGMEM = {
 | 
			
		|||
  219043,
 | 
			
		||||
};
 | 
			
		||||
const prog_uint32_t lut_res_env_increments_slow[] PROGMEM = {
 | 
			
		||||
  876173, 855969, 836311, 817181, 798563, 780441, 762801, 745627,
 | 
			
		||||
  728906, 712624, 696767, 681324, 666281, 651626, 637349, 623439,
 | 
			
		||||
  609883, 596673, 583797, 571247, 559013, 547085, 535455, 524115,
 | 
			
		||||
  513056, 502270, 491749, 481487, 471475, 461707, 452176, 442875,
 | 
			
		||||
  433798, 424939, 416292, 407850, 399610, 391564, 383708, 376036,
 | 
			
		||||
  368544, 361227, 354080, 347098, 340278, 333615, 327104, 320742,
 | 
			
		||||
  314525, 308449, 302511, 296706, 291032, 285485, 280062, 274760,
 | 
			
		||||
  269575, 264504, 259546, 254696, 249952, 245312, 240773, 236332,
 | 
			
		||||
  231987, 227735, 223575, 219504, 215519, 211620, 207803, 204066,
 | 
			
		||||
  200409, 196828, 193322, 189889, 186528, 183236, 180012, 176855,
 | 
			
		||||
  173763, 170734, 167767, 164860, 162012, 159222, 156488, 153809,
 | 
			
		||||
  151184, 148612, 146090, 143619, 141197, 138822, 136495, 134213,
 | 
			
		||||
  131976, 129782, 127631, 125522, 123454, 121426, 119437, 117486,
 | 
			
		||||
  115572, 113695, 111853, 110047, 108274, 106535, 104829, 103155,
 | 
			
		||||
  101512,  99900,  98318,  96765,  95241,  93745,  92277,  90835,
 | 
			
		||||
   89420,  88031,  86667,  85328,  84013,  82722,  81454,  80209,
 | 
			
		||||
   78986,  77785,  76605,  75446,  74308,  73190,  72092,  71013,
 | 
			
		||||
   69953,  68911,  67888,  66883,  65895,  64924,  63969,  63032,
 | 
			
		||||
   62110,  61204,  60314,  59439,  58578,  57733,  56901,  56084,
 | 
			
		||||
   55280,  54490,  53713,  52949,  52198,  51460,  50733,  50019,
 | 
			
		||||
   49316,  48625,  47945,  47277,  46619,  45972,  45336,  44710,
 | 
			
		||||
   44094,  43488,  42892,  42305,  41728,  41160,  40601,  40051,
 | 
			
		||||
   39510,  38977,  38453,  37937,  37429,  36929,  36437,  35952,
 | 
			
		||||
   35475,  35006,  34544,  34089,  33641,  33200,  32765,  32338,
 | 
			
		||||
   31916,  31502,  31093,  30691,  30295,  29905,  29521,  29143,
 | 
			
		||||
   28770,  28403,  28041,  27685,  27334,  26988,  26648,  26312,
 | 
			
		||||
   25981,  25656,  25335,  25019,  24707,  24400,  24097,  23799,
 | 
			
		||||
   23505,  23216,  22930,  22649,  22372,  22098,  21829,  21564,
 | 
			
		||||
   21302,  21044,  20789,  20539,  20292,  20048,  19808,  19571,
 | 
			
		||||
   19337,  19107,  18880,  18656,  18435,  18217,  18003,  17791,
 | 
			
		||||
   17582,  17376,  17173,  16972,  16775,  16580,  16388,  16198,
 | 
			
		||||
   16011,  15826,  15644,  15465,  15288,  15113,  14940,  14770,
 | 
			
		||||
  3504693, 3381406, 3263185, 3149790, 3040997, 2936593, 2836375, 2740152,
 | 
			
		||||
  2647742, 2558972, 2473679, 2391707, 2312908, 2237142, 2164276, 2094182,
 | 
			
		||||
  2026741, 1961838, 1899363, 1839212, 1781288, 1725495, 1671745, 1619951,
 | 
			
		||||
  1570032, 1521911, 1475514, 1430770, 1387612, 1345976, 1305799, 1267025,
 | 
			
		||||
  1229596, 1193460, 1158565, 1124863, 1092307, 1060853, 1030457, 1001080,
 | 
			
		||||
  972682, 945226, 918676, 892998, 868159, 844128, 820875, 798370,
 | 
			
		||||
  776588, 755500, 735082, 715309, 696158, 677607, 659634, 642219,
 | 
			
		||||
  625341, 608982, 593124, 577749, 562840, 548381, 534356, 520751,
 | 
			
		||||
  507551, 494743, 482312, 470248, 458536, 447165, 436124, 425402,
 | 
			
		||||
  414989, 404874, 395047, 385499, 376222, 367205, 358442, 349923,
 | 
			
		||||
  341641, 333588, 325758, 318142, 310735, 303530, 296520, 289700,
 | 
			
		||||
  283063, 276605, 270318, 264199, 258242, 252442, 246795, 241296,
 | 
			
		||||
  235939, 230723, 225641, 220690, 215866, 211166, 206585, 202121,
 | 
			
		||||
  197770, 193528, 189393, 185361, 181430, 177597, 173858, 170211,
 | 
			
		||||
  166654, 163184, 159798, 156495, 153272, 150126, 147056, 144060,
 | 
			
		||||
  141135, 138279, 135491, 132769, 130111, 127516, 124981, 122504,
 | 
			
		||||
  120086, 117723, 115415, 113160, 110956, 108803, 106698, 104641,
 | 
			
		||||
  102631, 100666,  98745,  96867,  95030,  93235,  91479,  89762,
 | 
			
		||||
   88082,  86440,  84833,  83262,  81724,  80220,  78748,  77307,
 | 
			
		||||
   75898,  74519,  73169,  71847,  70554,  69288,  68048,  66835,
 | 
			
		||||
   65647,  64483,  63344,  62228,  61136,  60065,  59017,  57990,
 | 
			
		||||
   56984,  55999,  55034,  54088,  53161,  52252,  51362,  50490,
 | 
			
		||||
   49635,  48797,  47975,  47170,  46380,  45606,  44848,  44104,
 | 
			
		||||
   43374,  42658,  41957,  41269,  40594,  39932,  39283,  38646,
 | 
			
		||||
   38021,  37408,  36806,  36216,  35637,  35069,  34512,  33965,
 | 
			
		||||
   33428,  32900,  32383,  31875,  31377,  30888,  30407,  29936,
 | 
			
		||||
   29473,  29018,  28572,  28133,  27703,  27280,  26865,  26457,
 | 
			
		||||
   26056,  25663,  25276,  24897,  24524,  24157,  23797,  23443,
 | 
			
		||||
   23096,  22754,  22419,  22089,  21765,  21446,  21133,  20825,
 | 
			
		||||
   20523,  20226,  19933,  19646,  19364,  19086,  18813,  18544,
 | 
			
		||||
   18280,  18021,  17765,  17514,  17268,  17025,  16786,  16551,
 | 
			
		||||
   16320,  16093,  15869,  15650,  15433,  15220,  15011,  14805,
 | 
			
		||||
   14602,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -42,8 +42,6 @@ extern const prog_uint32_t* const lookup_table_32_table[];
 | 
			
		|||
extern const prog_uint16_t lut_res_env_linear[] PROGMEM;
 | 
			
		||||
extern const prog_uint16_t lut_res_env_expo[] PROGMEM;
 | 
			
		||||
extern const prog_uint16_t lut_res_env_quartic[] PROGMEM;
 | 
			
		||||
extern const prog_uint16_t lut_res_raised_cosine[] PROGMEM;
 | 
			
		||||
extern const prog_uint16_t lut_res_unipolar_fold[] PROGMEM;
 | 
			
		||||
extern const prog_uint32_t lut_res_env_increments[] PROGMEM;
 | 
			
		||||
extern const prog_uint32_t lut_res_env_increments_slow[] PROGMEM;
 | 
			
		||||
#define STR_RES_DUMMY 0  // dummy
 | 
			
		||||
| 
						 | 
				
			
			@ -53,10 +51,6 @@ extern const prog_uint32_t lut_res_env_increments_slow[] PROGMEM;
 | 
			
		|||
#define LUT_RES_ENV_EXPO_SIZE 257
 | 
			
		||||
#define LUT_RES_ENV_QUARTIC 2
 | 
			
		||||
#define LUT_RES_ENV_QUARTIC_SIZE 257
 | 
			
		||||
#define LUT_RES_RAISED_COSINE 3
 | 
			
		||||
#define LUT_RES_RAISED_COSINE_SIZE 257
 | 
			
		||||
#define LUT_RES_UNIPOLAR_FOLD 4
 | 
			
		||||
#define LUT_RES_UNIPOLAR_FOLD_SIZE 1025
 | 
			
		||||
#define LUT_RES_ENV_INCREMENTS 0
 | 
			
		||||
#define LUT_RES_ENV_INCREMENTS_SIZE 257
 | 
			
		||||
#define LUT_RES_ENV_INCREMENTS_SLOW 1
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,8 +32,7 @@ import numpy
 | 
			
		|||
 | 
			
		||||
SAMPLE_RATE = 20000000.0 / 510 / 16#/ 4  # hz
 | 
			
		||||
 | 
			
		||||
WAVESHAPER_SIZE = 1024
 | 
			
		||||
 | 
			
		||||
WAVETABLE_SIZE = 1024
 | 
			
		||||
"""----------------------------------------------------------------------------
 | 
			
		||||
LFO and envelope increments.
 | 
			
		||||
----------------------------------------------------------------------------"""
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +64,7 @@ lookup_tables_32.append(
 | 
			
		|||
 | 
			
		||||
# Tides envelopes
 | 
			
		||||
max_time = 60.0 * 2  # seconds
 | 
			
		||||
min_time = 2
 | 
			
		||||
min_time = .5
 | 
			
		||||
gamma = 0.175
 | 
			
		||||
min_increment = excursion / (max_time * sample_rate)
 | 
			
		||||
max_increment = excursion / (min_time * sample_rate)
 | 
			
		||||
| 
						 | 
				
			
			@ -90,13 +89,3 @@ lookup_tables.append(('env_expo', env_expo / env_expo.max() * 65535.0))
 | 
			
		|||
lookup_tables.append(
 | 
			
		||||
    ('env_quartic', env_quartic / env_quartic.max() * 65535.0))
 | 
			
		||||
 | 
			
		||||
raised_cosine = 0.5 - numpy.cos(env_linear * numpy.pi) / 2
 | 
			
		||||
lookup_tables.append(('raised_cosine', raised_cosine * 65535.0))
 | 
			
		||||
 | 
			
		||||
x = numpy.arange(0, WAVESHAPER_SIZE + 1) / float(WAVESHAPER_SIZE)
 | 
			
		||||
x[-1] = x[-2]
 | 
			
		||||
sine = numpy.sin(8 * numpy.pi * x)
 | 
			
		||||
window = numpy.exp(-x * x * 4) ** 2
 | 
			
		||||
unipolar_fold = (0.5 * sine + 2 * x) * window + numpy.arctan(4 * x) * (1 - window)
 | 
			
		||||
unipolar_fold /= numpy.abs(unipolar_fold).max()
 | 
			
		||||
lookup_tables.append(('unipolar_fold', numpy.round(32767 * unipolar_fold)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -82,15 +82,6 @@ void Tides::Process(
 | 
			
		|||
 | 
			
		||||
    value_ = a + ((b - a) * (t >> 1) >> 15);
 | 
			
		||||
 | 
			
		||||
    int32_t wf_balance = smoothness_ >> 1;
 | 
			
		||||
    int32_t wf_gain = 2048 + \
 | 
			
		||||
        (static_cast<int32_t>(smoothness_ >> 1) * (65535 - 2048) >> 15);
 | 
			
		||||
    int32_t original = value_;
 | 
			
		||||
    int32_t m = pgm_read_word(lut_res_unipolar_fold + ((original * wf_gain + (1U << 31)) >> 22));
 | 
			
		||||
    int32_t n = pgm_read_word(lut_res_unipolar_fold + ((original * wf_gain + (1U << 31)) >> 22) + 1);
 | 
			
		||||
    int32_t folded = m + ((n - m) * static_cast<int32_t>(((original * wf_gain) >> 6) & 0xffff) >> 16);
 | 
			
		||||
    value_ = original + ((folded - original) * wf_balance >> 15);
 | 
			
		||||
    value_ = value_ << 1;
 | 
			
		||||
    phase_ += phase_increment_;
 | 
			
		||||
    *out++ = value_;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -35,6 +35,8 @@
 | 
			
		|||
#include <avrlib/avrlib.h>
 | 
			
		||||
#include <stddef.h>
 | 
			
		||||
 | 
			
		||||
#define max(x, y) (((x) > (y)) ? (x) : (y))
 | 
			
		||||
 | 
			
		||||
namespace pure_adsr {
 | 
			
		||||
 | 
			
		||||
class Tides {
 | 
			
		||||
| 
						 | 
				
			
			@ -47,30 +49,38 @@ class Tides {
 | 
			
		|||
 | 
			
		||||
  void Configure(uint16_t* parameter, ControlMode control_mode)
 | 
			
		||||
  {
 | 
			
		||||
    set_ad_loop(parameter[0], parameter[1]);
 | 
			
		||||
    smoothness_ = parameter[3];
 | 
			
		||||
    uint8_t waveform_mode = quant.Process(parameter[2] / 65536.0f, 5);
 | 
			
		||||
    uint16_t param = parameter[2];
 | 
			
		||||
    uint16_t hold_high_length = 0;
 | 
			
		||||
    uint16_t hold_low_length = 0;
 | 
			
		||||
    if(param > 32768) {
 | 
			
		||||
      hold_high_length = (param - 32768) >> 0;
 | 
			
		||||
    } else {
 | 
			
		||||
      hold_low_length = (32768 - param) >> 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    set_ad_f_loop(parameter[0], parameter[1], hold_high_length, hold_low_length);
 | 
			
		||||
    uint8_t waveform_mode = quant.Process(parameter[3] / 65536.0f, 5);
 | 
			
		||||
 | 
			
		||||
    switch (waveform_mode) {
 | 
			
		||||
    case 0:
 | 
			
		||||
      shape_[0] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      shape_[1] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      shape_[2] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      break;
 | 
			
		||||
    case 1:
 | 
			
		||||
      shape_[0] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      shape_[1] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      shape_[2] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      break;
 | 
			
		||||
    case 2:
 | 
			
		||||
      shape_[0] = ENV_SHAPE_LINEAR;
 | 
			
		||||
      shape_[1] = ENV_SHAPE_LINEAR;
 | 
			
		||||
      shape_[2] = ENV_SHAPE_LINEAR;
 | 
			
		||||
      break;
 | 
			
		||||
    case 3:
 | 
			
		||||
      shape_[0] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      shape_[1] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      shape_[2] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      break;
 | 
			
		||||
    case 4:
 | 
			
		||||
      shape_[0] = ENV_SHAPE_EXPONENTIAL;
 | 
			
		||||
      shape_[1] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      shape_[2] = ENV_SHAPE_QUARTIC;
 | 
			
		||||
      break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -262,6 +272,31 @@ class Tides {
 | 
			
		|||
    loop_end_ = 2;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  inline void set_ad_f_loop(uint16_t attack, uint16_t decay, uint16_t sustain, uint16_t silence)
 | 
			
		||||
  {
 | 
			
		||||
    num_segments_ = 4;
 | 
			
		||||
    sustain_point_ = 0;
 | 
			
		||||
 | 
			
		||||
    level_[0] = 0;
 | 
			
		||||
    level_[1] = 32767;
 | 
			
		||||
    level_[2] = 32767;
 | 
			
		||||
    level_[3] = 0;
 | 
			
		||||
    level_[4] = 0;
 | 
			
		||||
 | 
			
		||||
    time_[0] = attack;
 | 
			
		||||
    time_[1] = sustain;
 | 
			
		||||
    time_[2] = decay;
 | 
			
		||||
    time_[3] = silence;
 | 
			
		||||
 | 
			
		||||
    shape_[0] = ENV_SHAPE_LINEAR;
 | 
			
		||||
    shape_[1] = ENV_SHAPE_LINEAR;
 | 
			
		||||
    shape_[2] = ENV_SHAPE_LINEAR;
 | 
			
		||||
    shape_[3] = ENV_SHAPE_LINEAR;
 | 
			
		||||
 | 
			
		||||
    loop_start_ = 0;
 | 
			
		||||
    loop_end_ = 4;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  inline void set_adr_loop(
 | 
			
		||||
      uint16_t attack,
 | 
			
		||||
      uint16_t decay,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue