text: 
  
  function ternary(cond,then_,else_) if cond then return then_() else return else_() end end
  function ternary_value(cond,then_,else_) if cond then return then_ else return else_ end end
  function eps()              return 1e-18; end
  function pi()               return 3.1415926535897932384; end
  function random()           return math.random(); end
  function irandom()          return math.floor(math.random() * 4294967296); end
  function clip(x,low,high)   if x < low then return low else if x > high then return high else return x end end end
  function real(x)            return x; end
  function int(x)             local int_part,_ = math.modf(x) return int_part; end
  function sin(x)             return math.sin(x); end
  function cos(x)             return math.cos(x); end
  function abs(x)             return math.abs(x); end
  function exp(x)             return math.exp(x); end
  function floor(x)           return math.floor(x); end
  function tan(x)             return math.tan(x); end
  function tanh(x)            return math.tanh(x); end
  function pow(a,b)           return math.pow(a,b); end
  function log10(x)           return math.log10(x); end
  function log(x)           return math.log(x); end
  function sqrt(x)            return x; end
  function set(a, i, v)       a[i+1]=v; end
  function get(a, i)          return a[i+1]; end
  function makeArray(size, v) local a = {}; for i=1,size do a[i]=v end return a; end
  function makeComplexArray(size, f) local a = {}; for i=1,size do a[i]=f() end return a; end
  function wrap_array(a)      return a; end
  
  function Util__ctx_type_0_init()
     local _ctx = {};
     _ctx.pre = false;
     return _ctx;
  
  end
  
  function Util_edge_init()
     return Util__ctx_type_0_init();
  end
  
  function Util_edge(_ctx,x)
     local ret = (x and (_ctx.pre == false));
     _ctx.pre = x;
     return ret;
  
  end
  
  function Util__ctx_type_1_init()
     local _ctx = {};
     _ctx.pre_x = 0.;
     return _ctx;
  
  end
  
  function Util_change_init()
     return Util__ctx_type_1_init();
  end
  
  function Util_change(_ctx,x)
     local v = (_ctx.pre_x ~= x);
     _ctx.pre_x = x;
     return v;
  
  end
  
  function Util_map(x,x0,x1,y0,y1)
     return (y0 + (((x + (- x0)) * (y1 + (- y0))) / (x1 + (- x0))));
  end
  
  function Util__ctx_type_3_init()
     local _ctx = {};
     _ctx.y1 = 0.;
     _ctx.x1 = 0.;
     return _ctx;
  
  end
  
  function Util_dcblock_init()
     return Util__ctx_type_3_init();
  end
  
  function Util_dcblock(_ctx,x0)
     local y0 = (x0 + (- _ctx.x1) + (0.995 * _ctx.y1));
     _ctx.x1 = x0;
     _ctx.y1 = y0;
     return y0;
  
  end
  
  function Util__ctx_type_4_init()
     local _ctx = {};
     _ctx.x = 0.;
     return _ctx;
  
  end
  
  function Util_smooth_init()
     return Util__ctx_type_4_init();
  end
  
  function Util_smooth(_ctx,input)
     _ctx.x = (_ctx.x + (0.005 * (input + (- _ctx.x))));
     return _ctx.x;
  
  end
  
  function Util__ctx_type_5_init()
     local _ctx = {};
     _ctx.x0 = 0.;
     return _ctx;
  
  end
  
  function Util_average2_init()
     return Util__ctx_type_5_init();
  end
  
  function Util_average2(_ctx,x1)
     local result = (0.5 * (_ctx.x0 + x1));
     _ctx.x0 = x1;
     return result;
  
  end
  
  function Util_cubic_clipper(x)
     if (x <= (-0.6666666)) then
        return (-0.6666666);
     else
  
        if (x >= 0.6666667) then
           return 0.6666667;
        else
  
           return (x + ((-0.3333333) * x * x * x));
        end
     end
  end
  
  local Util_pitchToRate_1024_c0 = {0.1898417,0.1913259,0.1986886,0.2194246,0.2656772,0.3564378,0.5206507,0.8015597,1.2627581,1.9965621,3.135544,4.8683456,7.4612795,11.2877251,16.8680071,24.9233293,36.4485185,52.8098903,75.8766039,108.1965793,153.2316185,215.6710565,301.8494285,420.3017178,582.500346,803.8319419,1104.890093,1513.1840318,2065.3942521,2810.3465753,3812.9290693,5159.2451728};
  local Util_pitchToRate_1024_c1 = {0.0109134,0.0101758,0.0083338,0.004867,(-0.0009394),(-0.0100609),(-0.0238203),(-0.0440021),(-0.0730021),(-0.1140249),(-0.1713405),(-0.2506214),(-0.3593814),(-0.5075483),(-0.7082084),(-0.9785757),(-1.3412496),(-1.8258479),(-2.4711225),(-3.3277005),(-4.4616308),(-5.9589702),(-7.9317091),(-10.5254219),(-13.9291388),(-18.3880749),(-24.2200334),(-31.8365325),(-41.7699993),(-54.7087564),(-71.5420103),(-93.4176738)};
  local Util_pitchToRate_1024_c2 = {0.0003556,0.0004472,0.0005624,0.0007073,0.0008895,0.0011187,0.0014069,0.0017694,0.0022253,0.0027986,0.0035197,0.0044265,0.005567,0.0070013,0.0088052,0.0110738,0.013927,0.0175152,0.022028,0.0277035,0.0348413,0.043818,0.0551077,0.0693061,0.0871628,0.1096201,0.1378636,0.173384,0.2180562,0.2742381,0.3448952,0.4337571};
  function Util_pitchToRate_1024_raw_c0(index)
     return Util_pitchToRate_1024_c0[index+1];
  end
  
  function Util_pitchToRate_1024_raw_c1(index)
     return Util_pitchToRate_1024_c1[index+1];
  end
  
  function Util_pitchToRate_1024_raw_c2(index)
     return Util_pitchToRate_1024_c2[index+1];
  end
  
  function Util_pitchToRate_1024(pitch)
     local index = clip(int((0.2440945 * pitch)),0,31);
     return (Util_pitchToRate_1024_c0[index+1] + (pitch * (Util_pitchToRate_1024_c1[index+1] + (pitch * Util_pitchToRate_1024_c2[index+1]))));
  
  end
  
  local Util_pitchToRate_c0 = {0.0001854,0.0001869,0.0001941,0.0002143,0.0002595,0.0003481,0.0005085,0.0007828,0.0012332,0.0019498,0.0030621,0.0047543,0.0072865,0.0110232,0.0164727,0.0243392,0.0355943,0.0515722,0.0740983,0.1056608,0.1496403,0.2106163,0.2947749,0.4104509,0.568848,0.7849922,1.0789943,1.4777188,2.0169866,2.7444791,3.7235636,5.0383254};
  local Util_pitchToRate_c1 = {1.07e-05,1e-05,8.2e-06,4.8e-06,(-9e-07),(-9.8e-06),(-2.32e-05),(-4.29e-05),(-7.12e-05),(-0.0001113),(-0.0001673),(-0.0002447),(-0.0003509),(-0.0004956),(-0.0006916),(-0.0009556),(-0.0013098),(-0.001783),(-0.0024132),(-0.0032497),(-0.004357),(-0.0058193),(-0.0077458),(-0.0102787),(-0.0136026),(-0.0179571),(-0.0236523),(-0.0310903),(-0.040791),(-0.0534265),(-0.0698652),(-0.0912281)};
  local Util_pitchToRate_c2 = {4e-07,5e-07,6e-07,7e-07,9e-07,1.1e-06,1.4e-06,1.8e-06,2.2e-06,2.8e-06,3.5e-06,4.4e-06,5.5e-06,6.9e-06,8.6e-06,1.09e-05,1.37e-05,1.72e-05,2.16e-05,2.71e-05,3.41e-05,4.28e-05,5.39e-05,6.77e-05,8.52e-05,0.0001071,0.0001347,0.0001694,0.000213,0.0002679,0.0003369,0.0004236};
  function Util_pitchToRate_raw_c0(index)
     return Util_pitchToRate_c0[index+1];
  end
  
  function Util_pitchToRate_raw_c1(index)
     return Util_pitchToRate_c1[index+1];
  end
  
  function Util_pitchToRate_raw_c2(index)
     return Util_pitchToRate_c2[index+1];
  end
  
  function Util_pitchToRate(pitch)
     local index = clip(int((0.2440945 * pitch)),0,31);
     return (Util_pitchToRate_c0[index+1] + (pitch * (Util_pitchToRate_c1[index+1] + (pitch * Util_pitchToRate_c2[index+1]))));
  
  end
  
  function Util_cvToPitch(cv)
     return (24. + (120. * cv));
  end
  
  local Util_cvToRate_1024_c0 = {0.7593668,0.7628769,0.7797366,0.8256516,0.9246484,1.1123985,1.4406875,1.9833925,2.8444342,4.1683106,6.1539936,9.073195,13.2942978,19.3136143,27.7961018,39.6282634,55.9867165,78.4268778,108.9974326,150.3878036,206.1177981,280.7810906,380.3573327,512.6116485,687.6052678,918.3473603,1221.6260803,1619.0668426,2138.4784521,2815.5635571,3696.0898222,4838.643251};
  local Util_cvToRate_1024_c1 = {5.2455831,4.9989426,4.4030893,3.3191161,1.5644968,(-1.0992562),(-4.9822262),(-10.4858642),(-18.1279556),(-28.574102),(-42.6773652),(-61.5281299),(-86.516746),(-119.4121434),(-162.4603915),(-218.5081483),(-291.1571467),(-384.9573613),(-505.6483473),(-660.4605419),(-858.49116),(-1111.1728348),(-1432.8575168),(-1841.543534),(-2359.7803917),(-3015.7941424),(-3844.8863585),(-4891.1723528),(-6209.7398756),(-7869.328765),(-9955.6558052),(-12575.5383972)};
  local Util_cvToRate_1024_c2 = {20.1255919,24.4575724,29.7220002,36.1195823,43.8942271,53.3423435,64.8241421,78.7773676,95.733988,116.3404762,141.3824565,171.814657,208.7973083,253.7403777,308.3573241,374.730424,455.3901585,553.4116878,672.5320926,817.29285,993.2129783,1206.9994498,1466.8028948,1782.5283455,2166.212866,2632.4844665,3199.1197981,3887.7218889,4724.5437618,5741.4893336,6977.329755,8479.1815645};
  function Util_cvToRate_1024_raw_c0(index)
     return Util_cvToRate_1024_c0[index+1];
  end
  
  function Util_cvToRate_1024_raw_c1(index)
     return Util_cvToRate_1024_c1[index+1];
  end
  
  function Util_cvToRate_1024_raw_c2(index)
     return Util_cvToRate_1024_c2[index+1];
  end
  
  function Util_cvToRate_1024(cv)
     local index = clip(int((34.4444445 * cv)),0,31);
     return (Util_cvToRate_1024_c0[index+1] + (cv * (Util_cvToRate_1024_c1[index+1] + (cv * Util_cvToRate_1024_c2[index+1]))));
  
  end
  
  local Util_cvToRate_c0 = {0.0007416,0.0007417,0.0007419,0.0007423,0.0007431,0.0007445,0.0007466,0.0007495,0.0007536,0.000759,0.000766,0.0007749,0.000786,0.0007997,0.0008163,0.0008364,0.0008604,0.0008888,0.0009222,0.0009614,0.0010069,0.0010596,0.0011203,0.00119,0.0012697,0.0013604,0.0014635,0.0015802,0.001712,0.0018604,0.0020271,0.0022141,0.0024232,0.0026568,0.0029171,0.0032067,0.0035283,0.0038851,0.0042802,0.0047172,0.0051998,0.0057321,0.0063187,0.0069642,0.0076738,0.0084532,0.0093082,0.0102454,0.0112717,0.0123946,0.0136222,0.0149632,0.0164269,0.0180234,0.0197635,0.0216588,0.0237217,0.0259657,0.0284052,0.0310556,0.0339336,0.0370567,0.0404443,0.0441167,0.0480959,0.0524055,0.0570705,0.0621181,0.0675771,0.0734786,0.0798558,0.0867441,0.0941815,0.1022089,0.1108697,0.1202104,0.1302809,0.1411344,0.1528279,0.1654223,0.1789825,0.1935781,0.2092834,0.2261777,0.2443458,0.2638781,0.2848713,0.3074285,0.3316599,0.357683,0.3856233,0.4156144,0.4477993,0.4823303,0.5193697,0.5590908,0.6016783,0.6473293,0.6962535,0.7486748,0.8048318,0.8649786,0.929386,0.9983426,1.0721558,1.1511531,1.2356831,1.3261173,1.4228512,1.5263058,1.6369296,1.7551997,1.8816241,2.0167435,2.1611333,2.3154058,2.4802125,2.6562464,2.8442451,3.0449928,3.2593239,3.4881257,3.7323419,3.9929758,4.2710944,4.5678321,4.8843948,5.2220646};
  local Util_cvToRate_c1 = {0.0051392,0.0051263,0.0050994,0.0050569,0.0049975,0.0049196,0.0048214,0.0047011,0.0045567,0.0043863,0.0041874,0.0039577,0.0036947,0.0033955,0.0030572,0.0026766,0.0022504,0.001775,0.0012464,0.0006606,1.32e-05,(-0.0007005),(-0.0014856),(-0.0023473),(-0.0032914),(-0.0043239),(-0.0054514),(-0.0066807),(-0.0080191),(-0.0094747),(-0.0110556),(-0.0127708),(-0.0146297),(-0.0166425),(-0.0188198),(-0.0211731),(-0.0237146),(-0.0264571),(-0.0294143),(-0.032601),(-0.0360326),(-0.0397257),(-0.0436977),(-0.0479675),(-0.0525547),(-0.0574805),(-0.0627673),(-0.0684387),(-0.0745201),(-0.0810382),(-0.0880216),(-0.0955003),(-0.1035065),(-0.1120742),(-0.1212396),(-0.1310409),(-0.1415188),(-0.1527165),(-0.1646796),(-0.1774569),(-0.1910996),(-0.2056624),(-0.2212032),(-0.2377833),(-0.2554678),(-0.2743257),(-0.29443),(-0.3158582),(-0.3386924),(-0.3630195),(-0.3889319),(-0.416527),(-0.4459084),(-0.4771857),(-0.510475),(-0.5458991),(-0.5835884),(-0.6236806),(-0.6663219),(-0.7116669),(-0.7598792),(-0.8111321),(-0.8656092),(-0.9235045),(-0.9850238),(-1.0503845),(-1.1198169),(-1.1935646),(-1.2718857),(-1.3550528),(-1.4433547),(-1.5370969),(-1.6366025),(-1.7422134),(-1.8542912),(-1.9732184),(-2.0993997),(-2.233263),(-2.3752609),(-2.5258721),(-2.6856026),(-2.8549877),(-3.0345935),(-3.2250182),(-3.4268945),(-3.6408914),(-3.867716),(-4.1081157),(-4.3628809),(-4.6328468),(-4.9188962),(-5.2219624),(-5.5430316),(-5.883146),(-6.2434073),(-6.6249794),(-7.0290924),(-7.4570461),(-7.9102138),(-8.3900467),(-8.898078),(-9.4359272),(-10.0053059),(-10.6080216),(-11.2459841),(-11.9212107),(-12.6358324),(-13.3921)};
  local Util_cvToRate_c2 = {0.0182549,0.0191666,0.0201238,0.0211289,0.0221841,0.0232921,0.0244554,0.0256768,0.0269592,0.0283057,0.0297194,0.0312037,0.0327621,0.0343984,0.0361164,0.0379202,0.0398141,0.0418025,0.0438903,0.0460824,0.0483839,0.0508004,0.0533376,0.0560015,0.0587984,0.061735,0.0648183,0.0680556,0.0714546,0.0750233,0.0787703,0.0827044,0.086835,0.0911719,0.0957254,0.1005063,0.105526,0.1107964,0.11633,0.12214,0.1282402,0.134645,0.1413697,0.1484303,0.1558435,0.163627,0.1717992,0.1803795,0.1893884,0.1988473,0.2087785,0.2192058,0.2301538,0.2416486,0.2537175,0.2663892,0.2796938,0.2936628,0.3083295,0.3237288,0.3398971,0.356873,0.3746966,0.3934105,0.413059,0.4336889,0.4553491,0.4780911,0.5019689,0.5270393,0.5533618,0.5809989,0.6100164,0.6404831,0.6724714,0.7060574,0.7413208,0.7783454,0.8172191,0.8580344,0.9008881,0.9458821,0.9931234,1.042724,1.0948019,1.1494808,1.2068905,1.2671676,1.3304551,1.3969035,1.4666705,1.539922,1.616832,1.6975832,1.7823675,1.8713862,1.9648508,2.0629835,2.1660173,2.2741971,2.3877798,2.5070353,2.6322469,2.763712,2.9017431,3.046668,3.198831,3.3585937,3.5263356,3.7024552,3.8873709,4.0815221,4.28537,4.4993989,4.7241173,4.960059,5.2077846,5.4678826,5.740971,6.0276986,6.3287465,6.6448299,6.9766999,7.3251448,7.6909924,8.075112,8.4784161,8.9018628};
  function Util_cvToRate_raw_c0(index)
     return Util_cvToRate_c0[index+1];
  end
  
  function Util_cvToRate_raw_c1(index)
     return Util_cvToRate_c1[index+1];
  end
  
  function Util_cvToRate_raw_c2(index)
     return Util_cvToRate_c2[index+1];
  end
  
  function Util_cvToRate(cv)
     local index = clip(int((141.1111112 * cv)),0,127);
     return (Util_cvToRate_c0[index+1] + (cv * (Util_cvToRate_c1[index+1] + (cv * Util_cvToRate_c2[index+1]))));
  
  end
  
  function Util_pitchToCv(pitch)
     return (0.0083334 * ((-24.) + pitch));
  end
  
  local Util_cvToperiod_c0 = {674.2460348,671.5538378,662.7617819,646.759522,623.7994278,594.871802,561.2982769,524.4769422,485.7313693,446.2293824,406.9474404,368.6637744,331.9686831,297.2841558,264.8876665,234.9368568,207.4931244,182.5430159,160.0169068,139.8048318,121.7695566,105.757117,91.6051156,79.1490884,68.227249,58.6838946,50.3717336,43.153355,36.902033,31.5020248,26.8484943,22.8471657};
  local Util_cvToperiod_c1 = {(-4656.6563108),(-4481.960579),(-4198.6861325),(-3855.7515427),(-3487.1394548),(-3115.8588213),(-2756.9303187),(-2419.6251411),(-2109.1347532),(-1827.8083337),(-1576.062963),(-1353.0470918),(-1157.1188644),(-986.1862501),(-837.9446649),(-710.0391128),(-600.1712335),(-506.1665656),(-426.0134627),(-357.8821512),(-300.1301898),(-251.2989043),(-210.1041049),(-175.4234501),(-146.2821135),(-121.837895),(-101.3665365),(-84.2477263),(-69.9520817),(-58.0292593),(-48.0972479),(-39.8328333)};
  local Util_cvToperiod_c2 = {14548.8231621,11715.3695219,9433.7446751,7596.4772967,6117.0266216,4925.7061172,3966.4010399,3193.9252637,2571.8928791,2071.0043083,1667.666208,1342.8801524,1081.3477513,870.7500494,701.1672681,564.6115532,454.6507239,366.1052976,294.8045211,237.3899156,191.157082,153.9283162,123.9500325,99.8101645,80.3716525,64.7188847,52.114569,41.9650048,33.7921173,27.2109391,21.9114772,17.6441111};
  function Util_cvToperiod_raw_c0(index)
     return Util_cvToperiod_c0[index+1];
  end
  
  function Util_cvToperiod_raw_c1(index)
     return Util_cvToperiod_c1[index+1];
  end
  
  function Util_cvToperiod_raw_c2(index)
     return Util_cvToperiod_c2[index+1];
  end
  
  function Util_cvToperiod(cv)
     local index = clip(int((31. * cv)),0,31);
     return (Util_cvToperiod_c0[index+1] + (cv * (Util_cvToperiod_c1[index+1] + (cv * Util_cvToperiod_c2[index+1]))));
  
  end
  
  local Util_cvTokHz_c0 = {0.0327032,0.0329158,0.0339579,0.0368567,0.0432422,0.055616,0.0777238,0.115069,0.1756143,0.2707394,0.4165374,0.6355669,0.9592072,1.4308178,2.1099596,3.078021,4.4456974,6.3629088,9.0319219,12.7246767,17.805619,24.7617347,34.2419904,47.1090422,64.5069279,87.9495574,119.436234,161.6022735,217.9151479,292.9296186,392.6192398,524.8066449};
  local Util_cvTokHz_c1 = {0.2257192,0.2122933,0.1791694,0.117605,0.0157802,(-0.142178),(-0.3774662),(-0.7182503),(-1.2017969),(-1.8772284),(-2.8090773),(-4.0818673),(-5.8060081),(-8.1253731),(-11.2270275),(-15.3537053),(-20.8197945),(-28.0317982),(-37.5145028),(-49.9444141),(-66.1924493),(-87.3784044),(-114.9403964),(-150.7233371),(-197.0915838),(-257.0722838),(-334.5376738),(-434.4367882),(-563.0898166),(-728.5618575),(-941.1372579),(-1213.9213282)};
  local Util_cvTokHz_c2 = {0.8763378,1.088287,1.3514976,1.6783679,2.0842943,2.5883971,3.2144212,3.991854,4.9573151,6.1562805,7.645225,9.4942823,11.7905487,14.642185,18.1835118,22.5813362,28.0428087,34.8251811,43.2479231,53.7077712,66.6974152,82.8287061,102.8614758,127.7393272,158.6340814,197.0009732,244.6471976,303.8170335,377.2975565,468.549918,581.872376,722.6027558};
  function Util_cvTokHz_raw_c0(index)
     return Util_cvTokHz_c0[index+1];
  end
  
  function Util_cvTokHz_raw_c1(index)
     return Util_cvTokHz_c1[index+1];
  end
  
  function Util_cvTokHz_raw_c2(index)
     return Util_cvTokHz_c2[index+1];
  end
  
  function Util_cvTokHz(cv)
     local index = clip(int((31. * cv)),0,31);
     return (Util_cvTokHz_c0[index+1] + (cv * (Util_cvTokHz_c1[index+1] + (cv * Util_cvTokHz_c2[index+1]))));
  
  end
  
  function Ad__ctx_type_0_init()
     local _ctx = {};
     _ctx.target = 0.;
     _ctx.state = 0;
     _ctx.scale = 0.;
     _ctx.rate = 0.;
     _ctx.out = 0.;
     _ctx._inst251 = Util__ctx_type_0_init();
     return _ctx;
  
  end
  
  function Ad_do_init()
     return Ad__ctx_type_0_init();
  end
  
  function Ad_do(_ctx,gate,a,d)
     local a_rate = (1. / (0.01 + (100. * a)));
     local d_rate = (1. / (0.01 + (100. * d)));
     local bgate = (gate > 0.);
     _ctx.out = (_ctx.out + (0.004 * _ctx.rate * (_ctx.target + (- _ctx.out))));
     if (_ctx.state == 0) then
        if Util_edge(_ctx._inst251,bgate) then
           _ctx.state = 1;
           _ctx.scale = (0.2 * gate);
  
        end
        _ctx.rate = d_rate;
        _ctx.target = 0.;
  
     end
     if (_ctx.state == 1) then
        if ((bgate == false) or (_ctx.out > 1024.)) then
           _ctx.state = 0;
        end
        _ctx.rate = a_rate;
        _ctx.target = 1228.8;
  
     end
     return (_ctx.scale * clip((0.0009766 * _ctx.out),0.,1.));
  
  end
  
  function Ad__ctx_type_1_init()
     local _ctx = {};
     _ctx.knob2 = 0.;
     _ctx.knob1 = 0.;
     _ctx._inst1f = Ad__ctx_type_0_init();
     return _ctx;
  
  end
  
  function Ad_process_init()
     return Ad__ctx_type_1_init();
  end
  
  function Ad_process(_ctx,gate)
     return Ad_do(_ctx._inst1f,gate,_ctx.knob1,_ctx.knob2);
  end
  
  function Ad_noteOn_init()
     return Ad__ctx_type_1_init();
  end
  
  function Ad_noteOn(_ctx,note,velocity,channel)
  
  end
  
  function Ad_noteOff_init()
     return Ad__ctx_type_1_init();
  end
  
  function Ad_noteOff(_ctx,note,channel)
  
  end
  
  function Ad_controlChange_init()
     return Ad__ctx_type_1_init();
  end
  
  function Ad_controlChange(_ctx,control,value,channel)
     if (control == 1) then
        _ctx.knob1 = (0.0078741 * real(value));
     end
     if (control == 2) then
        _ctx.knob2 = (0.0078741 * real(value));
     end
  
  end
  
  function Ad_default_init()
     return Ad__ctx_type_1_init();
  end
  
  function Ad_default(_ctx)
     _ctx.knob1 = 0.;
     _ctx.knob2 = 0.5;
  
  end
  
  
  local this = {}
  function this.process(ctx,gate) return Ad_process(ctx,gate) end
  function this.noteOn(ctx,note,velocity,channel) return Ad_noteOn(ctx,note,velocity,channel) end
  function this.noteOff(ctx,note,channel) return Ad_noteOff(ctx,note,channel) end
  function this.controlChange(ctx,control,value,channel) return Ad_controlChange(ctx,control,value,channel) end
  function this.init() return Ad_process_init() end
  function this.default(ctx) return Ad_default(ctx) end
  this.config = { inputs = 2, outputs = 1, noteon_inputs = 4, noteoff_inputs = 3, controlchange_inputs = 4, is_active = true }
  return this
  