Modérateur : darcmorcel
Merci pour ton aide.SmashedTransistors a écrit :Ca ressemble bien à de l'aliasing.
Peux tu mettre l'autorisation de download pour que je puisse le charger et le zieuter de plus près ?
Il y a pas mal de techniques évoluées pour éviter l'aliasing (comme on en a discuté sur le post viewtopic.php?f=35&t=16157.
Mais si tu arrives à tourner avec l'Arduino à 120kHz ça devrait suffire.
Les harmoniques d'une dent de scie décroissent à raison de -6dB par octave
Un carré a un harmonique sur deux avec une ampli nulle mais ils décroissent aussi à -6dB/oct.
si tu aux alentours de 10kHz avec une fréquence d'échantillonnage de 120kHz
10kHz 0 dB pour la fondamentale
20kHz -6 dB pour le premier harmonique
30kHz -12 dB
40kHz -18 dB
50kHz -24 dB
60kHz -36 dB -- limite de repliement (pour un échantillonnage à 120kHz)
50kHz -42 dB -- les fréquences sont repliées
40kHz -48 dB
30kHz -54 dB
20kHz -60 dB Repliement à -60 dB
10kHz -66 dB
si tu aux alentours de 10kHz avec une fréquence d'échantillonnage de 60kHz
10kHz 0 dB pour la fondamentale
20kHz -6 dB pour le premier harmonique
30kHz -12 dB ---
20kHz -18 dB Repliement audible à -18 dB
10kHz -24 dB
Ha... heu... je crois que j'ai grillé une des sorties DACSalmacis a écrit :yes...aliasing....
Tu peux te rabattre sur du variable rate pour le convertisseur.Il me semble que le duo a deux convertisseurs.
J'utilise cette technique pour mon projet et j'ai peu d'aliasing.
Une autre technique est d'avoir plusieurs formes d'onde par octaves (voir du wave morphing) :un carre sur les octave basse puis plus tu monte en fréquence plus tu passe sur un sinus...bon du coup tu pers tes harmoniques sur le octaves hautes...mais bon... c'est un choix.
Pourquoi l'arduino duo ?
Code : Tout sélectionner
//1024 valeures de A1 (55Hz) à A7 (3520Hz)
int NOTELOOKUP[]={
65536, 65802, 66071, 66340, 66610, 66881, 67154, 67427, 67702, 67978, 68255, 68533, 68812, 69092, 69374, 69656, 69940, 70225, 70511, 70798, 71087, 71376, 71667, 71959, 72252, 72546, 72842, 73139, 73437, 73736, 74036, 74338,
74641, 74945, 75250, 75557, 75864, 76173, 76484, 76795, 77108, 77422, 77738, 78054, 78372, 78692, 79012, 79334, 79657, 79982, 80307, 80635, 80963, 81293, 81624, 81957, 82290, 82626, 82962, 83300, 83640, 83980, 84322, 84666,
85011, 85357, 85705, 86054, 86404, 86756, 87110, 87465, 87821, 88179, 88538, 88899, 89261, 89624, 89990, 90356, 90724, 91094, 91465, 91837, 92212, 92587, 92964, 93343, 93723, 94105, 94489, 94873, 95260, 95648, 96038, 96429,
96822, 97216, 97612, 98010, 98409, 98810, 99212, 99617, 100022, 100430, 100839, 101250, 101662, 102076, 102492, 102910, 103329, 103750, 104172, 104597, 105023, 105451, 105880, 106312, 106745, 107180, 107616, 108055, 108495,
108937, 109381, 109826, 110274, 110723, 111174, 111627, 112081, 112538, 112996, 113457, 113919, 114383, 114849, 115317, 115787, 116258, 116732, 117207, 117685, 118164, 118646, 119129, 119614, 120101, 120591, 121082, 121575,
122070, 122568, 123067, 123568, 124072, 124577, 125085, 125594, 126106, 126620, 127135, 127653, 128173, 128695, 129220, 129746, 130275, 130805, 131338, 131873, 132410, 132950, 133491, 134035, 134581, 135129, 135680, 136233,
136788, 137345, 137904, 138466, 139030, 139597, 140165, 140736, 141310, 141885, 142463, 143044, 143626, 144211, 144799, 145389, 145981, 146576, 147173, 147772, 148374, 148979, 149586, 150195, 150807, 151421, 152038, 152657,
153279, 153904, 154531, 155160, 155792, 156427, 157064, 157704, 158346, 158991, 159639, 160289, 160942, 161598, 162256, 162917, 163581, 164247, 164916, 165588, 166263, 166940, 167620, 168303, 168988, 169677, 170368, 171062,
171759, 172459, 173161, 173867, 174575, 175286, 176000, 176717, 177437, 178160, 178885, 179614, 180346, 181080, 181818, 182559, 183303, 184049, 184799, 185552, 186308, 187067, 187829, 188594, 189362, 190133, 190908, 191686,
192467, 193251, 194038, 194828, 195622, 196419, 197219, 198022, 198829, 199639, 200452, 201269, 202089, 202912, 203739, 204569, 205402, 206239, 207079, 207922, 208769, 209620, 210474, 211331, 212192, 213056, 213924, 214796,
215671, 216549, 217432, 218317, 219207, 220100, 220996, 221897, 222800, 223708, 224619, 225534, 226453, 227376, 228302, 229232, 230166, 231103, 232045, 232990, 233939, 234892, 235849, 236810, 237775, 238743, 239716, 240692,
241673, 242657, 243646, 244638, 245635, 246635, 247640, 248649, 249662, 250679, 251700, 252725, 253755, 254789, 255827, 256869, 257915, 258966, 260021, 261080, 262144, 263211, 264284, 265360, 266441, 267527, 268616, 269711,
270809, 271913, 273020, 274132, 275249, 276370, 277496, 278627, 279762, 280901, 282046, 283195, 284348, 285507, 286670, 287837, 289010, 290187, 291369, 292556, 293748, 294945, 296146, 297353, 298564, 299780, 301002, 302228,
303459, 304695, 305936, 307183, 308434, 309690, 310952, 312219, 313490, 314768, 316050, 317337, 318630, 319928, 321231, 322540, 323854, 325173, 326498, 327828, 329163, 330504, 331850, 333202, 334560, 335923, 337291, 338665,
340045, 341430, 342821, 344217, 345620, 347027, 348441, 349861, 351286, 352717, 354154, 355596, 357045, 358499, 359960, 361426, 362898, 364377, 365861, 367352, 368848, 370351, 371859, 373374, 374895, 376422, 377956, 379495,
381041, 382593, 384152, 385717, 387288, 388866, 390450, 392041, 393638, 395241, 396851, 398468, 400091, 401721, 403357, 405001, 406650, 408307, 409970, 411640, 413317, 415001, 416691, 418389, 420093, 421805, 423523, 425248,
426980, 428720, 430466, 432220, 433981, 435748, 437524, 439306, 441095, 442892, 444697, 446508, 448327, 450153, 451987, 453828, 455677, 457533, 459397, 461269, 463148, 465034, 466929, 468831, 470741, 472658, 474584, 476517,
478458, 480407, 482364, 484329, 486302, 488283, 490272, 492270, 494275, 496288, 498310, 500340, 502379, 504425, 506480, 508543, 510615, 512695, 514783, 516880, 518986, 521100, 523223, 525354, 527495, 529643, 531801, 533967,
536143, 538326, 540520, 542721, 544932, 547152, 549381, 551619, 553866, 556122, 558388, 560662, 562947, 565240, 567542, 569854, 572176, 574506, 576847, 579197, 581556, 583925, 586304, 588692, 591091, 593498, 595916, 598344,
600781, 603228, 605686, 608153, 610631, 613118, 615616, 618124, 620642, 623170, 625708, 628257, 630817, 633386, 635967, 638557, 641159, 643770, 646393, 649026, 651670, 654325, 656990, 659666, 662354, 665052, 667761, 670481,
673213, 675955, 678709, 681474, 684250, 687037, 689836, 692646, 695468, 698301, 701145, 704001, 706869, 709749, 712640, 715543, 718458, 721385, 724323, 727274, 730237, 733212, 736198, 739197, 742209, 745232, 748268, 751316,
754377, 757450, 760535, 763634, 766744, 769868, 773004, 776153, 779315, 782490, 785677, 788878, 792091, 795318, 798558, 801811, 805077, 808357, 811650, 814956, 818276, 821610, 824956, 828317, 831691, 835079, 838481, 841897,
845326, 848770, 852227, 855699, 859185, 862685, 866199, 869728, 873271, 876828, 880400, 883987, 887587, 891203, 894834, 898479, 902139, 905814, 909504, 913209, 916929, 920665, 924415, 928181, 931961, 935758, 939570, 943398,
947240, 951100, 954974, 958864, 962770, 966692, 970630, 974584, 978554, 982541, 986543, 990562, 994597, 998649, 1002717, 1006802, 1010903, 1015021, 1019156, 1023308, 1027476, 1031662, 1035865, 1040084, 1044321, 1048576,
1052847, 1057136, 1061442, 1065766, 1070108, 1074467, 1078844, 1083239, 1087652, 1092082, 1096531, 1100998, 1105483, 1109987, 1114508, 1119048, 1123607, 1128184, 1132780, 1137395, 1142028, 1146680, 1151351, 1156042, 1160751,
1165479, 1170227, 1174994, 1179781, 1184587, 1189412, 1194258, 1199123, 1204007, 1208912, 1213837, 1218781, 1223746, 1228731, 1233737, 1238763, 1243809, 1248876, 1253963, 1259072, 1264201, 1269351, 1274521, 1279713, 1284926,
1290161, 1295416, 1300694, 1305993, 1311313, 1316655, 1322018, 1327404, 1332811, 1338240, 1343692, 1349166, 1354662, 1360180, 1365721, 1371285, 1376871, 1382480, 1388111, 1393766, 1399444, 1405145, 1410869, 1416616, 1422387,
1428181, 1433999, 1439841, 1445706, 1451595, 1457509, 1463446, 1469408, 1475393, 1481404, 1487438, 1493498, 1499582, 1505690, 1511824, 1517983, 1524167, 1530375, 1536610, 1542869, 1549154, 1555465, 1561802, 1568164, 1574552,
1580966, 1587406, 1593873, 1600366, 1606885, 1613431, 1620004, 1626603, 1633229, 1639882, 1646563, 1653270, 1660005, 1666767, 1673557, 1680375, 1687220, 1694094, 1700994, 1707924, 1714881, 1721867, 1728881, 1735925, 1742995,
1750097, 1757225, 1764384, 1771571, 1778789, 1786034, 1793310, 1800615, 1807951, 1815315, 1822711, 1830135, 1837591, 1845076, 1852593, 1860139, 1867717, 1875325, 1882965, 1890635, 1898338, 1906070, 1913835, 1921631, 1929460,
1937319, 1945212, 1953135, 1961092, 1969080, 1977102, 1985155, 1993243, 2001362, 2009516, 2017701, 2025921, 2034173, 2042461, 2050780, 2059135, 2067522, 2075946, 2084401, 2092894, 2101418, 2109980, 2118574, 2127205, 2135870,
2144572, 2153307, 2162080, 2170886, 2179731, 2188609, 2197526, 2206478, 2215466, 2224491, 2233553, 2242652, 2251787, 2260960, 2270171, 2279419, 2288704, 2298028, 2307389, 2316788, 2326226, 2335702, 2345217, 2354771, 2364363,
2373995, 2383666, 2393376, 2403126, 2412915, 2422745, 2432614, 2442524, 2452474, 2462464, 2472495, 2482568, 2492681, 2502835, 2513031, 2523268, 2533547, 2543868, 2554230, 2564635, 2575083, 2585573, 2596106, 2606681, 2617300,
2627962, 2638667, 2649416, 2660209, 2671046, 2681927, 2692852, 2703822, 2714836, 2725895, 2737000, 2748149, 2759344, 2770585, 2781871, 2793204, 2804582, 2816007, 2827479, 2838997, 2850562, 2862174, 2873834, 2885541, 2897295,
2909098, 2920948, 2932847, 2944795, 2956791, 2968836, 2980930, 2993073, 3005266, 3017508, 3029800, 3042143, 3054535, 3066979, 3079472, 3092017, 3104613, 3117260, 3129959, 3142709, 3155511, 3168366, 3181272, 3194232, 3207244,
3220309, 3233428, 3246600, 3259825, 3273104, 3286438, 3299826, 3313268, 3326765, 3340317, 3353925, 3367587, 3381306, 3395080, 3408910, 3422797, 3436740, 3450740, 3464797, 3478912, 3493084, 3507313, 3521601, 3535947, 3550351,
3564814, 3579336, 3593916, 3608557, 3623257, 3638016, 3652837, 3667717, 3682658, 3697662, 3712725, 3727849, 3743035, 3758283, 3773593, 3788965, 3804400, 3819898, 3835459, 3851083, 3866771, 3882523, 3898339, 3914219, 3930165,
3946175, 3962250, 3978391, 3994597, 4010870, 4027209, 4043614, 4060087, 4076626, 4093233, 4109907, 4126650, 4143460, 4160339, 4177287, 4194304};
int SINLOOKUPSIZE=802;
short SINLOOKUP[]={
2047, 2063, 2079, 2095, 2111, 2127, 2143, 2159, 2175, 2191, 2207, 2223, 2239, 2255, 2271, 2287, 2303, 2319, 2335, 2351, 2367, 2382, 2398, 2414, 2430, 2445, 2461, 2477, 2493, 2508, 2524, 2539,
2555, 2570, 2586, 2601, 2617, 2632, 2648, 2663, 2678, 2693, 2709, 2724, 2739, 2754, 2769, 2784, 2799, 2814, 2829, 2843, 2858, 2873, 2888, 2902, 2917, 2931, 2946, 2960, 2974, 2989, 3003, 3017,
3031, 3045, 3059, 3073, 3087, 3101, 3114, 3128, 3142, 3155, 3169, 3182, 3195, 3209, 3222, 3235, 3248, 3261, 3274, 3287, 3299, 3312, 3324, 3337, 3349, 3362, 3374, 3386, 3398, 3410, 3422, 3434,
3446, 3457, 3469, 3481, 3492, 3503, 3515, 3526, 3537, 3548, 3559, 3569, 3580, 3591, 3601, 3611, 3622, 3632, 3642, 3652, 3662, 3672, 3682, 3691, 3701, 3710, 3719, 3729, 3738, 3747, 3756, 3764,
3773, 3782, 3790, 3798, 3807, 3815, 3823, 3831, 3839, 3846, 3854, 3861, 3869, 3876, 3883, 3890, 3897, 3904, 3911, 3917, 3924, 3930, 3936, 3942, 3948, 3954, 3960, 3966, 3971, 3977, 3982, 3987,
3992, 3997, 4002, 4007, 4011, 4016, 4020, 4024, 4028, 4032, 4036, 4040, 4044, 4047, 4051, 4054, 4057, 4060, 4063, 4066, 4068, 4071, 4073, 4075, 4077, 4079, 4081, 4083, 4085, 4086, 4088, 4089,
4090, 4091, 4092, 4093, 4093, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4094, 4093, 4093, 4092, 4091, 4090, 4089, 4088, 4086, 4085, 4083, 4081, 4079, 4077, 4075, 4073, 4071, 4068, 4066, 4063,
4060, 4057, 4054, 4051, 4047, 4044, 4040, 4036, 4032, 4028, 4024, 4020, 4016, 4011, 4007, 4002, 3997, 3992, 3987, 3982, 3977, 3971, 3966, 3960, 3954, 3948, 3942, 3936, 3930, 3924, 3917, 3911,
3904, 3897, 3890, 3883, 3876, 3869, 3861, 3854, 3846, 3839, 3831, 3823, 3815, 3807, 3798, 3790, 3782, 3773, 3764, 3756, 3747, 3738, 3729, 3719, 3710, 3701, 3691, 3682, 3672, 3662, 3652, 3642,
3632, 3622, 3611, 3601, 3591, 3580, 3569, 3559, 3548, 3537, 3526, 3515, 3503, 3492, 3481, 3469, 3457, 3446, 3434, 3422, 3410, 3398, 3386, 3374, 3362, 3349, 3337, 3324, 3312, 3299, 3287, 3274,
3261, 3248, 3235, 3222, 3209, 3195, 3182, 3169, 3155, 3142, 3128, 3114, 3101, 3087, 3073, 3059, 3045, 3031, 3017, 3003, 2989, 2974, 2960, 2946, 2931, 2917, 2902, 2888, 2873, 2858, 2843, 2829,
2814, 2799, 2784, 2769, 2754, 2739, 2724, 2709, 2693, 2678, 2663, 2648, 2632, 2617, 2601, 2586, 2570, 2555, 2539, 2524, 2508, 2493, 2477, 2461, 2445, 2430, 2414, 2398, 2382, 2367, 2351, 2335,
2319, 2303, 2287, 2271, 2255, 2239, 2223, 2207, 2191, 2175, 2159, 2143, 2127, 2111, 2095, 2079, 2063, 2047, 2031, 2015, 1999, 1983, 1967, 1951, 1935, 1919, 1903, 1887, 1871, 1855, 1839, 1823,
1807, 1791, 1775, 1759, 1743, 1727, 1712, 1696, 1680, 1664, 1649, 1633, 1617, 1601, 1586, 1570, 1555, 1539, 1524, 1508, 1493, 1477, 1462, 1446, 1431, 1416, 1401, 1385, 1370, 1355, 1340, 1325,
1310, 1295, 1280, 1265, 1251, 1236, 1221, 1206, 1192, 1177, 1163, 1148, 1134, 1120, 1105, 1091, 1077, 1063, 1049, 1035, 1021, 1007, 993, 980, 966, 952, 939, 925, 912, 899, 885, 872, 859, 846,
833, 820, 807, 795, 782, 770, 757, 745, 732, 720, 708, 696, 684, 672, 660, 648, 637, 625, 613, 602, 591, 579, 568, 557, 546, 535, 525, 514, 503, 493, 483, 472, 462, 452, 442, 432, 422, 412,
403, 393, 384, 375, 365, 356, 347, 338, 330, 321, 312, 304, 296, 287, 279, 271, 263, 255, 248, 240, 233, 225, 218, 211, 204, 197, 190, 183, 177, 170, 164, 158, 152, 146, 140, 134, 128, 123,
117, 112, 107, 102, 97, 92, 87, 83, 78, 74, 70, 66, 62, 58, 54, 50, 47, 43, 40, 37, 34, 31, 28, 26, 23, 21, 19, 17, 15, 13, 11, 9, 8, 6, 5, 4, 3, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 3,
4, 5, 6, 8, 9, 11, 13, 15, 17, 19, 21, 23, 26, 28, 31, 34, 37, 40, 43, 47, 50, 54, 58, 62, 66, 70, 74, 78, 83, 87, 92, 97, 102, 107, 112, 117, 123, 128, 134, 140, 146, 152, 158, 164, 170, 177,
183, 190, 197, 204, 211, 218, 225, 233, 240, 248, 255, 263, 271, 279, 287, 296, 304, 312, 321, 330, 338, 347, 356, 365, 375, 384, 393, 403, 412, 422, 432, 442, 452, 462, 472, 483, 493, 503, 514,
525, 535, 546, 557, 568, 579, 591, 602, 613, 625, 637, 648, 660, 672, 684, 696, 708, 720, 732, 745, 757, 770, 782, 795, 807, 820, 833, 846, 859, 872, 885, 899, 912, 925, 939, 952, 966, 980, 993,
1007, 1021, 1035, 1049, 1063, 1077, 1091, 1105, 1120, 1134, 1148, 1163, 1177, 1192, 1206, 1221, 1236, 1251, 1265, 1280, 1295, 1310, 1325, 1340, 1355, 1370, 1385, 1401, 1416, 1431, 1446, 1462,
1477, 1493, 1508, 1524, 1539, 1555, 1570, 1586, 1601, 1617, 1633, 1649, 1664, 1680, 1696, 1712, 1727, 1743, 1759, 1775, 1791, 1807, 1823, 1839, 1855, 1871, 1887, 1903, 1919, 1935, 1951, 1967,
1983, 1999, 2015, 2031};
short CREUXLOOKUP[]={
-900,-898,-825,-807,-805,-785,-781,-761,-749,-741,-732,-720,-704,-692,-680,-668,-656,-640,-632,-607,-571,-539,-519,-494,-486,-474,-458,-450,-442,-426,-418,-410,-403,-396,-389,-383,-376,-369,-361,
-353,-345,-337,-329,-324,-318,-313,-307,-301,-295,-290,-285,-278,-272,-266,-260,-252,-248,-244,-240,-232,-228,-224,-220,-216,-214,-212,-209,-206,-204,-200,-196,-192,-192,-188,-184,-180,-176,-176,
-176,-172,-167,-163,-159,-155,-149,-143,-139,-135,-131,-123,-120,-117,-113,-110,-107,-103,-99,-95,-89,-83,-75,-63,-59,-54,-42,-30,-22,-14,-6,2,16,22,30,38,45,52,59,69,80,91,103,109,115,119,123,127,
131,139,147,154,161,167,173,178,184,191,198,206,213,221,228,237,247,256,263,269,276,282,289,295,301,308,314,321,328,335,342,349,357,364,372,379,387,394,402,410,418,426,431,437,442,454,470,478,486,
494,510,531,551,567,577,587,594,601,607,632,644,656,664,672,684,693,702,711,720,726,732,741,749,755,761,773,785,793,801,810,819,828,837,844,851,858,866,874,879,884,889,894,901,907,914,924,934,940,
946,951,957,962,971,979,987,993,999,1005,1011,1019,1027,1035,1047,1059,1066,1073,1079,1094,1108,1116,1124,1132,1141,1151,1160,1168,1176,1184,1213,1225,1237,1247,1257,1265,1273,1281,1289,1297,1305,
1314,1321,1328,1335,1343,1350,1355,1360,1365,1370,1375,1379,1384,1389,1394,1399,1405,1410,1415,1420,1425,1431,1436,1442,1447,1453,1458,1464,1469,1475,1479,1483,1487,1491,1495,1499,1503,1507,1511,
1516,1521,1526,1531,1536,1541,1546,1551,1556,1564,1572,1580,1588,1596,1601,1607,1612,1618,1623,1628,1637,1646,1656,1665,1670,1675,1681,1689,1697,1705,1711,1717,1723,1729,1739,1748,1757,1766,1774,
1782,1790,1798,1806,1811,1816,1821,1826,1834,1842,1850,1858,1866,1883,1895,1903,1911,1919,1927,1939,1951,1959,1967,1975,1987,1996,1996,2020,2048,2024,2012,2000,1985,1971,1961,1951,1941,1931,1921,
1911,1903,1895,1887,1879,1870,1862,1854,1846,1838,1830,1821,1812,1804,1795,1786,1777,1768,1760,1751,1742,1733,1725,1717,1709,1701,1693,1685,1677,1669,1661,1653,1644,1636,1628,1619,1610,1601,1592,
1583,1574,1565,1556,1547,1538,1528,1519,1510,1500,1490,1481,1471,1462,1452,1442,1433,1423,1414,1404,1394,1386,1378,1369,1361,1352,1344,1336,1327,1319,1311,1302,1294,1286,1277,1267,1256,1246,1236,
1225,1215,1204,1194,1183,1173,1163,1152,1144,1135,1126,1118,1109,1100,1092,1083,1075,1066,1057,1049,1040,1032,1023,1016,1009,1001,994,987,980,972,965,958,951,944,936,929,922,915,907,900,893,886,
878,871,863,856,848,841,834,826,819,811,804,796,789,781,774,766,759,751,744,736,730,723,716,710,703,696,689,683,676,669,662,656,649,642,636,629,622,615,607,599,591,583,575,567,559,551,543,535,527,
519,510,502,494,484,474,464,454,444,434,424,414,404,393,383,373,364,355,346,337,328,318,309,300,291,282,273,264,254,245,236,226,215,204,194,183,173,162,152,141,131,120,109,99,89,79,69,59,48,38,28,
18,8,-2,-12,-22,-29,-36,-42,-49,-56,-63,-69,-76,-83,-89,-96,-103,-110,-116,-123,-130,-137,-144,-151,-158,-165,-173,-180,-187,-194,-201,-208,-214,-220,-226,-232,-238,-244,-250,-256,-262,-268,-275,
-281,-287,-293,-300,-306,-312,-319,-325,-331,-337,-342,-348,-354,-360,-366,-371,-377,-383,-388,-394,-400,-405,-411,-416,-422,-426,-431,-436,-440,-445,-449,-454,-460,-467,-473,-480,-486,-492,-498,
-504,-510,-517,-523,-528,-533,-539,-544,-549,-555,-560,-566,-571,-576,-582,-587,-591,-595,-599,-603,-607,-611,-615,-619,-623,-628,-632,-636,-640,-644,-650,-657,-664,-671,-677,-684,-694,-703,-713,
-723,-732,-739,-746,-753,-760,-767,-774,-781,-791,-802,-812,-823,-833,-842,-851,-860,-869,-878,-887,-897,-907,-916,-926,-936,-946,-955,-965,-975,-983,-992,-1001,-1010,-1018,-1027,-1039,-1051,-1063,
-1075,-1084,-1092,-1100,-1108,-1116,-1125,-1135,-1144,-1158,-1172,-1178,-1184,-1189,-1195,-1201,-1213,-1226,-1239,-1252,-1265,-1276,-1287,-1297,-1305,-1314,-1322,-1327,-1332,-1338,-1342,-1346,-1350,
-1340,-1240,-1140,-1040,-940,-930,-920,-910};
short PHOENIXLOOKUP[]={
0,2,3,5,6,10,11,13,14,16,19,21,22,24,26,29,30,32,33,36,38,40,41,43,46,48,49,51,53,56,58,59,61,63,67,69,70,72,74,78,80,82,84,88,89,92,94,96,100,102,104,106,108,112,114,116,118,120,124,126,128,130,132,
136,138,140,142,146,148,150,152,154,158,161,163,165,167,171,174,176,178,181,185,188,190,192,197,199,202,204,207,212,214,217,219,222,227,229,232,235,237,243,246,248,251,254,260,263,267,270,276,279,283,
286,290,297,300,304,308,312,319,323,327,331,335,343,348,352,356,361,369,374,378,383,392,397,401,406,410,420,424,429,433,438,447,452,457,462,467,477,482,487,493,504,509,515,520,525,538,544,550,556,562,
574,580,587,594,601,614,621,627,636,644,660,669,677,685,703,713,723,733,742,762,772,783,795,806,828,840,851,862,875,901,913,926,939,952,978,992,1005,1019,1047,1060,1074,1088,1102,1130,1144,1158,1172,1186,
1213,1226,1240,1253,1267,1294,1307,1319,1332,1358,1371,1383,1396,1408,1432,1443,1455,1467,1479,1501,1512,1523,1533,1544,1565,1576,1586,1595,1605,1624,1634,1643,1653,1670,1679,1688,1696,1705,1722,1730,1738,
1746,1754,1770,1778,1786,1792,1799,1813,1820,1827,1834,1841,1853,1859,1865,1871,1884,1890,1895,1900,1906,1916,1921,1927,1932,1936,1945,1950,1954,1959,1964,1972,1976,1979,1983,1990,1994,1998,2001,2004,2010,
2013,2016,2020,2023,2027,2029,2031,2033,2035,2039,2040,2041,2042,2042,2044,2044,2045,2045,2044,2043,2043,2043,2042,2041,2039,2038,2037,2036,2034,2032,2030,2028,2025,2021,2019,2016,2014,2010,2003,1999,1995,
1992,1984,1979,1974,1969,1964,1954,1949,1944,1937,1931,1918,1912,1906,1899,1893,1877,1869,1861,1853,1838,1830,1820,1811,1802,1783,1774,1764,1755,1744,1723,1712,1701,1691,1680,1657,1645,1633,1621,1609,1584,
1572,1559,1545,1519,1505,1492,1478,1465,1437,1422,1408,1394,1380,1352,1337,1322,1307,1292,1261,1246,1231,1215,1184,1168,1152,1136,1120,1088,1071,1055,1038,1022,989,972,955,938,921,887,871,854,837,819,785,
767,750,733,698,680,662,645,627,592,574,556,538,520,484,466,448,430,412,376,357,339,321,302,266,248,229,211,175,156,138,120,102,66,48,30,12,-6,-42,-59,-77,-95,-113,-148,-166,-184,-202,-236,-254,-272,-289,
-306,-341,-358,-376,-393,-410,-444,-461,-478,-495,-511,-545,-562,-578,-595,-611,-645,-661,-678,-694,-726,-742,-758,-774,-790,-821,-836,-852,-867,-882,-913,-929,-943,-958,-973,-1003,-1018,-1032,-1047,-1061,
-1089,-1103,-1118,-1132,-1160,-1173,-1186,-1199,-1213,-1239,-1252,-1266,-1278,-1290,-1315,-1328,-1340,-1352,-1365,-1388,-1399,-1411,-1422,-1445,-1456,-1467,-1477,-1487,-1508,-1518,-1529,-1539,-1548,-1567,
-1576,-1586,-1595,-1605,-1623,-1631,-1640,-1648,-1657,-1674,-1683,-1691,-1698,-1714,-1722,-1729,-1737,-1745,-1759,-1767,-1774,-1781,-1788,-1802,-1809,-1815,-1822,-1828,-1841,-1847,-1854,-1859,-1865,-1876,
-1882,-1887,-1893,-1903,-1908,-1913,-1918,-1923,-1933,-1938,-1942,-1946,-1950,-1959,-1963,-1967,-1971,-1975,-1981,-1985,-1988,-1991,-1998,-2000,-2003,-2005,-2008,-2013,-2015,-2018,-2020,-2022,-2026,-2028,
-2030,-2031,-2033,-2036,-2037,-2038,-2039,-2040,-2043,-2043,-2043,-2044,-2045,-2045,-2045,-2046,-2046,-2045,-2045,-2045,-2045,-2045,-2045,-2044,-2044,-2044,-2043,-2042,-2042,-2041,-2040,-2039,-2037,-2036,
-2035,-2034,-2032,-2030,-2029,-2027,-2026,-2023,-2021,-2019,-2018,-2016,-2012,-2011,-2009,-2007,-2005,-2000,-1998,-1996,-1994,-1989,-1987,-1984,-1982,-1979,-1974,-1972,-1969,-1967,-1965,-1960,-1957,-1955,
-1953,-1951,-1946,-1944,-1942,-1940,-1938,-1934,-1932,-1930,-1929,-1925,-1923,-1922,-1920,-1919,-1916,-1915,-1914,-1912,-1911,-1909,-1908,-1907,-1906,-1905,-1903,-1902,-1901,-1901,-1900,-1898,-1897,-1896,
-1896,-1894,-1893,-1892,-1891,-1890,-1888,-1887,-1885,-1884,-1882,-1880,-1878,-1876,-1873,-1870,-1865,-1863,-1860,-1857,-1850,-1846,-1843,-1839,-1835,-1828,-1823,-1819,-1814,-1810,-1801,-1797,-1792,-1787,
-1782,-1773,-1768,-1763,-1758,-1753,-1742,-1737,-1732,-1726,-1716,-1711,-1705,-1699,-1694,-1683,-1677,-1672,-1666,-1661,-1649,-1644,-1638,-1633,-1627,-1616,-1610,-1605,-1599,-1594,-1583,-1577,-1572,-1566,
-1554,-1549,-1543,-1537,-1531,-1518,-1511,-1504,-1497,-1490,-1477,-1468,-1460,-1452,-1443,-1000,-800,-600,-400,-300,-200,-100};
short SQUARELOOKUP[]={
0,-311,-607,-879,-1117,-1318,-1484,-1617,-1722,-1802,-1864,-1911,-1946,-1973,-1992,-2007,-2018,-2025,-2031,-2036,-2039,-2041,-2043,-2044,-2045,-2046,-2047,-2047,-2047,-2047,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,-2048,
-2048,-2048,-2048,-2048,-2048,-2048,-2047,-2047,-2047,-2047,-2046,-2045,-2044,-2043,-2041,-2039,-2036,-2031,-2025,-2018,-2007,-1992,-1973,-1946,-1911,-1864,-1802,-1722,-1617,-1484,-1318,-1117,-879,-607,
-311,0,311,607,879,1117,1318,1484,1617,1722,1802,1864,1911,1946,1973,1992,2007,2018,2025,2031,2036,2039,2041,2043,2044,2045,2046,2047,2047,2047,2047,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,2048,
300,150,50};
#define SAMPLE_RATE 750000.0
#define TICKS_PER_CYCLE (4294967296/SAMPLE_RATE)
#define BIAS 2048
#define LEDPIN1 47 //led octave1
#define LEDPIN2 43 //led octave2
#define LEDPIN3 39 //led octave3
#define LEDPIN4 35 //led octave4
#define LEDPIN5 31 //led PEDALE1
#define LEDPIN6 33 //led PEDALE2
#define FADEMAX 512
#define MAXDELAYBUFFERSIZE 40000 //environs 1 second de delay
int POT0FIN=0,POT0AFIN=0,POT0=0,POT0A=0,POT0AB=0,CORRECTION=0,POT1=0,POT2=0,POT3BB=0,POT3B=0,POT3=0,POT4B=0,POT4=0,POT5B,POT5=0,OCTAVE=0,PEDALE=0,PEDALEB=0,RDLED=0;
int out_DAC0;
int ledvert=2,ledbleu=4,ledblanc=5;
int64_t iter=0,iter2=0;
boolean COMPTEUR=false,COMPTEUR2=false,PEDALEON=false;
const byte BUTTONS[]={11,12,13,10,9,7,6,3,8}; //11=>PedaleOn, 12=>creux, 13=>Nasillard, 10=>CourtLong, 9=>PedaleOctave, 7=>PedaleBasse, 6=>PedaleFormeOnde
byte BUTTONSTATES[]={0,0,0,0,0,0,0,0,0};
short DELAYBUFFER[MAXDELAYBUFFERSIZE];
unsigned int delayWriteIndex=0,pDelayWriteIndex=0,FADE=0;
//-----------------------------------------------------------------------------------Detection appuie long verrouillage clavier ---------------------------------
long debut_appui1;
boolean variable1=false;
int temps_defini=500,etat_bouton1,dernier_etat_bouton1=LOW,etat_prg1=LOW;
//-----------------------------------------------------------------------------------Fin detection appuie long verrouillage clavier -----------------------------
//-----------------------------------------------------------------------------------Lissage du pitch -----------------------------------------------------------
const int nEchantillons = 10;
int POT0ABB[nEchantillons],indice = 0; // un tableau pour stocker les échantillons lus / l'indice de l'échantillon courant
float total = 0,moyenne = 0; // la somme des échantillons mémorisés / la moyenne des échantillons mémorisés
//-----------------------------------------------------------------------------------Fin Lissage du pitch -------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void setup()
{
Serial.begin(115200);
pmc_set_writeprotect(false);
pmc_enable_periph_clk(ID_TC4);
TC_Configure(TC1,1, TC_CMR_WAVE | TC_CMR_WAVSEL_UP_RC | TC_CMR_TCCLKS_TIMER_CLOCK2);
TC_SetRC(TC1, 1, 238);
TC_Start(TC1, 1);
TC1->TC_CHANNEL[1].TC_IER=TC_IER_CPCS;
TC1->TC_CHANNEL[1].TC_IDR=~TC_IER_CPCS;
NVIC_EnableIRQ(TC4_IRQn);
analogWrite(DAC1,0);
pinMode(LEDPIN1,OUTPUT);
pinMode(LEDPIN2,OUTPUT);
pinMode(LEDPIN3,OUTPUT);
pinMode(LEDPIN4,OUTPUT);
pinMode(LEDPIN5,OUTPUT);
pinMode(LEDPIN6,OUTPUT);
for(int i=0;i<9;i++){
pinMode(BUTTONS[i],INPUT_PULLUP);
}
for(int i=0;i<MAXDELAYBUFFERSIZE;i++){
DELAYBUFFER[i]=BIAS; //initialise delay buffer à 'zero'
}
analogWrite(ledbleu,255);
delay(250);
analogWrite(ledbleu,0);
analogWrite(ledvert,255);
delay(125);
analogWrite(ledbleu,255);
analogWrite(ledvert,0);
delay(250);
analogWrite(ledbleu,0);
analogWrite(ledvert,255);
//----------------------------------------------- Lissage pitch
for (int i = 0; i < nEchantillons; i++) {
POT0ABB[i] = 0;
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void loop()
{
total = total - POT0ABB[indice];
CORRECTION = ((analogRead(A6)/17)-30); //Accordage
POT0ABB[indice] = (analogRead(A0)+CORRECTION); //Fréquence
POT0AB = (analogRead(A0)+CORRECTION);
POT1 = analogRead(A1); //Delay
POT2 = analogRead(A2); //Feedback
if((COMPTEUR==true)&&(POT0AB<65)){
if(POT3BB>0){
POT3BB = constrain((POT3BB-2), 0, 512);
}
}else if((COMPTEUR==true)&&(POT0AB>65)){
if(POT3BB<constrain((analogRead(A3)/1.8), 0, 512)){
POT3BB = constrain((POT3BB+2), 0, 512);
}else{
POT3BB = constrain((analogRead(A3)/1.8), 0, 512);
}
}else{
POT3BB = constrain((analogRead(A3)/1.8), 0, 512); //Volume
}
POT4B = constrain(analogRead(A5), 0, 1000); //FormeOnde
POT5B = constrain((analogRead(A7)/1.8), 0, 512); //VolumeBasses
OCTAVE = analogRead(A4)/146; //Octave
PEDALEB = analogRead(A8)-90;
if(PEDALEON==true){
PEDALE = constrain((PEDALEB*1.08), 0, 1000); //ValeurPédale
}
if(PEDALEON==false){
PEDALE = 0;
}
if(BUTTONSTATES[0]==2){
PEDALEON = true;
}else if(BUTTONSTATES[0]==0){
PEDALEON = false;
}
if((BUTTONSTATES[4]==2)&&(BUTTONSTATES[8]==0)&&(BUTTONSTATES[7]==0)){
OCTAVE = constrain((OCTAVE+1), 0, 3);
}
if((BUTTONSTATES[4]==2)&&(BUTTONSTATES[8]==2)&&(BUTTONSTATES[7]==0)){
OCTAVE = constrain((OCTAVE-1), 0, 3);
}
if((BUTTONSTATES[4]==2)&&(BUTTONSTATES[8]==0)&&(BUTTONSTATES[7]==2)){
OCTAVE = constrain((OCTAVE+2), 0, 3);
}
if(PEDALEON==true){
if(BUTTONSTATES[5]==2){
digitalWrite(LEDPIN5,HIGH);
digitalWrite(LEDPIN6,LOW);
POT3B = POT3BB;
POT4 = POT4B;
POT5 = constrain((PEDALE/2+POT5B), 0, 512); //Basses+Pedale
}else if(BUTTONSTATES[6]==2){
digitalWrite(LEDPIN6,HIGH);
digitalWrite(LEDPIN5,LOW);
POT3B = POT3BB;
POT5 = POT5B;
POT4 = constrain((PEDALE+POT4B), 0, 1000); //FormeOnde+Pedale
}else{
digitalWrite(LEDPIN5,LOW);
digitalWrite(LEDPIN6,LOW);
POT4 = constrain((POT3BB+POT4B), 0, 1000);
POT5 = POT5B;
POT3B = constrain((PEDALE/2-5), 0, 512); //Volume+Pedale
}
}
if(PEDALEON==false){
digitalWrite(LEDPIN6,LOW);
digitalWrite(LEDPIN5,LOW);
POT3B = POT3BB;
POT4 = constrain(POT4B, 0, 1000);
POT5 = constrain(POT5B, 0, 512);
}
//-------------------------------------------------------Detection appuie long pour verrouiller le clavier--------------------------------------------------
if((POT3B==0)&&((POT0AB-CORRECTION)>1010)&&(COMPTEUR2==false)){
etat_bouton1=HIGH;
}else{
etat_bouton1=LOW;
}
if( etat_bouton1==HIGH && dernier_etat_bouton1==LOW ){
debut_appui1=millis();
variable1=true;
}
if((variable1==true)&&(etat_bouton1==HIGH)&&(dernier_etat_bouton1==HIGH)){
if((millis()-debut_appui1) >= temps_defini){
analogWrite(ledblanc,255);
delay(100);
analogWrite(ledbleu,255);
delay(100);
analogWrite(ledblanc,0);
COMPTEUR2=true;
}
}
if(etat_bouton1==LOW){
etat_prg1=LOW;
}
dernier_etat_bouton1=etat_bouton1;
//------------------------------------------------------Fin detection appuie long pour verrouiller le clavier-----------------------------------------------
//------------------------------------------------------Lissage valeur pitch--------------------------------------------------------------------------------
// Ajout du dernier echantillon
total = total + POT0ABB[indice];
// Incrémentation de l'indice
indice++;
// si on est à la fin du tableau ...
if (indice >= nEchantillons) {
// ...retour au début
indice = 0;
}
// calcul de la moyenne
moyenne = total / nEchantillons;
//------------------------------------------------------Fin Lissage valeur pitch-----------------------------------------------------------------------------
if((COMPTEUR2==true)&&(constrain((analogRead(A3)/1.8), 0, 512)>100)){
COMPTEUR2=false;
}
if(COMPTEUR2==true){
if(COMPTEUR==false){
POT3=512;
}else if((COMPTEUR==true)&&(POT0AB<65)&&(POT3>0)){
POT3=constrain((POT3-2), 0, 512);
}else if((COMPTEUR==true)&&(POT0AB>65)&&(POT3<512)){
POT3=constrain((POT3+2), 0, 512);
}
}else{
POT3=POT3B;
}
Serial.print(POT0); Serial.print("\t");
buttonUpdate();
selectCourtLong();
defOctave();
antiplop();
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void selectCourtLong(){
if(BUTTONSTATES[3]==2){
delay(25);
if(COMPTEUR==false){ // court
analogWrite(ledbleu,255);
analogWrite(ledblanc,255);
delay(200);
analogWrite(ledbleu,0);
analogWrite(ledblanc,0);
delay(100);
analogWrite(ledbleu,255);
analogWrite(ledblanc,255);
delay(200);
analogWrite(ledbleu,0);
analogWrite(ledblanc,0);
}
if(COMPTEUR==true){ // continu
analogWrite(ledbleu,255);
analogWrite(ledblanc,255);
delay(500);
analogWrite(ledbleu,0);
analogWrite(ledblanc,0);
}
COMPTEUR=!COMPTEUR;
}
if(POT0AB>65){ // sons continus : avec détection ruban
if((OCTAVE>=50)&&(OCTAVE<=65)){
POT0A = POT0AB;
}else{
POT0A = POT0ABB[indice];
}
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void defOctave(){
if((POT3/4)>0){
analogWrite(ledbleu,(POT3/2));
analogWrite(ledvert,255-(POT3/2));
}else{
analogWrite(ledbleu,0);
analogWrite(ledvert,255);
}
if((OCTAVE>=0)&&(OCTAVE<1)){ // Programme Octave1
digitalWrite(LEDPIN1,HIGH);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,LOW);
POT0=constrain((POT0A/2), 0, 595);
}
if((OCTAVE>=1)&&(OCTAVE<2)){ // Programme Octave2
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN2,HIGH);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,LOW);
POT0=constrain((170+(POT0A/2)), 0, 935);
}
if((OCTAVE>=2)&&(OCTAVE<3)){ // Programme Octave3
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN3,HIGH);
digitalWrite(LEDPIN4,LOW);
POT0=constrain((340+(POT0A/2)), 0, 1090);
}
if((OCTAVE>=3)&&(OCTAVE<4)){ // Programme Octave4
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,HIGH);
POT0=constrain((510+(POT0A/2)), 0, 1090);
}
if((OCTAVE>=4)&&(OCTAVE<5)){ // Programme Octave5
digitalWrite(LEDPIN1,HIGH);
digitalWrite(LEDPIN2,HIGH);
digitalWrite(LEDPIN3,HIGH);
digitalWrite(LEDPIN4,HIGH);
POT0=constrain(POT0A, 0, 1090);
}
if((OCTAVE>=5)&&(OCTAVE<6)){ // Programme Octave6
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,LOW);
POT0=(POT0A*3);
}
if((OCTAVE>=6)&&(OCTAVE<=7)){ // Programme Octave7
RDLED = random(1, 200);
if(RDLED==10){
digitalWrite(LEDPIN1,HIGH);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,LOW);
}
if(RDLED==50){
digitalWrite(LEDPIN2,HIGH);
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN4,LOW);
}
if(RDLED==100){
digitalWrite(LEDPIN3,HIGH);
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN2,LOW);
digitalWrite(LEDPIN4,LOW);
}
if(RDLED==170){
digitalWrite(LEDPIN4,HIGH);
digitalWrite(LEDPIN1,LOW);
digitalWrite(LEDPIN3,LOW);
digitalWrite(LEDPIN2,LOW);
}
POT0=(random(20, 520)+(POT0A/2));
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void antiplop()
{
if((COMPTEUR==false)&&(POT0>POT0FIN)&&(OCTAVE<6)){
POT0FIN++;
}else if((COMPTEUR==false)&&(POT0<POT0FIN)&&(OCTAVE<6)){
POT0FIN--;
}else{
POT0FIN=POT0;
}
if((COMPTEUR==false)&&(POT0A>POT0AFIN)&&(OCTAVE<6)){
POT0AFIN++;
}else if((COMPTEUR==false)&&(POT0A<POT0AFIN)&&(OCTAVE<6)){
POT0AFIN--;
}else{
POT0AFIN=POT0A;
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void TC4_Handler()
{
TC_GetStatus(TC1, 1);
if(((POT0>65)&&(POT0AB<1010)&&(COMPTEUR==true))||(COMPTEUR==false)||(FADE>0)){
iter+=NOTELOOKUP[POT0FIN];
iter%=SINLOOKUPSIZE<<16;
if(BUTTONSTATES[1]==2){
out_DAC0=volumeAdd4096((volumeMult4096(getBufInterp(CREUXLOOKUP,SINLOOKUPSIZE,iter),(FADE*POT4/1650)<<7)),(volumeMult4096(getBufInterp(SINLOOKUP,SINLOOKUPSIZE,iter),(512-FADE*POT4/1650)<<6)));
}else if(BUTTONSTATES[2]==2){
out_DAC0=volumeAdd4096((volumeMult4096(getBufInterp(SQUARELOOKUP,SINLOOKUPSIZE,iter),(FADE*POT4/1650)<<7)),(volumeMult4096(getBufInterp(SINLOOKUP,SINLOOKUPSIZE,iter),(512-FADE*POT4/2000)<<6)));
}else{
out_DAC0=volumeAdd4096((volumeMult4096(getBufInterp(PHOENIXLOOKUP,SINLOOKUPSIZE,iter),(FADE*POT4/1650)<<7)),(volumeMult4096(getBufInterp(SINLOOKUP,SINLOOKUPSIZE,iter),(512-FADE*POT4/1650)<<6)));
}
//ASR--------------------------------------------------------------------------------------
if((FADE<FADEMAX)&&(((POT0>65)&&(POT0AB<1010))||((COMPTEUR==false)))){
FADE++;
}else{
FADE--;
}
//BASSES------------------------------------------------------------------------------------
iter2+=NOTELOOKUP[POT0AFIN/2];
iter2%=SINLOOKUPSIZE<<16;
out_DAC0=volumeMult4096((volumeAdd4096((out_DAC0),(volumeMult4096(getBufInterp(SINLOOKUP,SINLOOKUPSIZE,iter2),(FADE*POT5/512)<<5)))),(FADE*POT3/512)<<7);
}
//delay,feedback,filtering--------------------------------------------------------------------
pDelayWriteIndex=delayWriteIndex;
delayWriteIndex+=POT1<<9;
//crappy filtering - take a equal mix of current and last sample (2 tap rectangular moving average filter - good for high frequency clicks but not very noticeable otherwise)
int oldsample=volumeMix4096(getBufInterp(DELAYBUFFER,MAXDELAYBUFFERSIZE,delayWriteIndex),getBufInterp(DELAYBUFFER,MAXDELAYBUFFERSIZE,pDelayWriteIndex),32768); //lit ancien sample
oldsample=volumeMult4096(oldsample,((POT2*3)>>1)<<6); //multiplie la quantité de feedback (à 150%)
out_DAC0=volumeAdd4096(oldsample,out_DAC0); //ajoutez l'échantillon le plus ancien à la sortie
for(unsigned int i=(pDelayWriteIndex>>16);i<(delayWriteIndex>>16);i++){
int index=i%MAXDELAYBUFFERSIZE;
DELAYBUFFER[index]=out_DAC0;
}
delayWriteIndex%=MAXDELAYBUFFERSIZE<<16;
dacc_write_conversion_data(DACC_INTERFACE, out_DAC0);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int getBufInterp(short int* ARRAYINPUT, int BUFFSIZE, unsigned int INDEX){
int LOWER = INDEX>>16;
if((INDEX%65536)==0){
return (ARRAYINPUT[LOWER%BUFFSIZE]);
}else{
return linInterp(ARRAYINPUT[LOWER%BUFFSIZE], ARRAYINPUT[(LOWER+1)%BUFFSIZE], INDEX%65536);
}
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int linInterp(int IN1, int IN2, int WEIGHT){
return (IN1*(65536-WEIGHT) + IN2*WEIGHT)>>16;
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int volumeMult4096(int INPUTSAMPLE,int VOLFACTOR){
return constrain((((INPUTSAMPLE-BIAS)*VOLFACTOR)>>16)+BIAS,0,4095);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int volumeMix4096(int INPUTSAMPLE1,int INPUTSAMPLE2,int MIX){
return constrain((INPUTSAMPLE1*(65536-MIX)+INPUTSAMPLE2*MIX)>>16,0,4095);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
int volumeAdd4096(int INPUTSAMPLE1,int INPUTSAMPLE2){
return constrain(INPUTSAMPLE1+INPUTSAMPLE2-BIAS,0,4095);
}
//---------------------------------------------------------------------------------------------------------------------------------------------------------------
void buttonUpdate(){
for(int i=0;i<9;i++){
boolean buttonState=digitalRead(BUTTONS[i]);
if(BUTTONSTATES[i]==3){
BUTTONSTATES[i]=2;
}
if((buttonState==LOW)&&(BUTTONSTATES[i]==0)){
BUTTONSTATES[i]=3;
}
if(BUTTONSTATES[i]==1){
BUTTONSTATES[i]=0;
}
if((buttonState==HIGH)&&(BUTTONSTATES[i]==2)){
BUTTONSTATES[i]=1;
}
}
}