From 3cf77b96b69fae705c1fee8e2138ee6399f6a5c3 Mon Sep 17 00:00:00 2001 From: David Huss <dh@atoav.com> Date: Sat, 17 Feb 2024 09:44:10 +0100 Subject: [PATCH] Add Scripts --- scripts/envelope.ipynb | 322 ++++++++++++ scripts/lookup-tables.ipynb | 971 ++++++++++++++++++++++++++++++++++++ 2 files changed, 1293 insertions(+) create mode 100644 scripts/envelope.ipynb create mode 100644 scripts/lookup-tables.ipynb diff --git a/scripts/envelope.ipynb b/scripts/envelope.ipynb new file mode 100644 index 0000000..7bec7a5 --- /dev/null +++ b/scripts/envelope.ipynb @@ -0,0 +1,322 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 31, + "id": "6ad68c73-abea-4199-a610-f9c06edd405b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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WVmyWCyaN29eyPF93rx5Ouuss2S32/0/kY7vEydO1P333x9U99lnn9UNN9yg7OxsZWdna/z48Ro5cmTY92SgwP5z1llnhW2nM844w/9aRtLH09PTde655+rSSy8N205ZWVk699xztXjx4pA1d+3aFbZf5+XldWun1NRUZWZm9vo59LWvfU3Dhg1TamqqCgsLdd555+miiy4K2U5Tp05VamqqcnJyVFJSErbvRPLcq6urg9rpyiuv1KxZs8LWlLqPx2eccYZmz57dbV0D26incT7SPhrYTpF8dmzfvl2f/vSnVVhYqKysLF100UWaMWNGyP6UmpqqiooKTZkypcfP4t76aNd2SklJUUpKilJTUyPetgn13APbKTMzU8OGDVNJSUnYsbhrHy0tLdXw4cNDbi8FttNtt90W8WfcyJEjZbFYlJqaGlSzr+Ne1zGq63bd66+/HtROAwYM0LBhw8Jui/TUR//2t78FLRvYnwoKCnT11VeHfL7xlhQB5/nnn9e3vvUt/fjHP9aqVav0iU98QrNmzeo2wIRTXV2tc889Vw6HQ6+88oo2bNighx9+WDk5Od2WffHFF7VkyRKVlpYG3d7Y2KgJEyboscce63afpqYmrVy5Uj/5yU+0cuVKvfDCC9qyZYuuvPLKoOVuuOEGbd68WS+//LLWrVuns88+WytWrNB3vvOdbjWNMfrUpz6lHTt26KWXXtKqVatUXl6u6dOnq7GxUZK0f/9+7d+/X7/+9a+1bt06/elPf9KaNWtktVr14YcfauHChWpra9OMGTP89/GZOXOmDhw44P+ZP39+0N8/+OADzZw5UzNmzNCjjz6qP/zhD3rkkUf0/vvv6+KLL9ZVV12ljz76KOLn/q1vfUv//Oc/NXfuXL377ruSvAPIkiVLtHz58qCakvTtb39br776qp599llt3LhR3/72t3XnnXfqpZde6vZa/eY3v5HFYgm6bdmyZXriiSc0fvz4bstL4du5azvdfvvtKioqksVi0WuvvaYDBw5o3bp1/mUbGxt17rnn6he/+EXIxwnVRtu2bVNWVlbQ6x9YM/D2AwcO6Omnn5bFYtFnPvOZkO2zdOlSLVu2TDfffLMuueSSE3qfS8FttWjRIk2bNk1jx47Vvn37tHDhQknS5z73OUnSQw89pEceeUSPPfaYli1bpgEDBujSSy9VfX19t7qB7fT000/7n1/Xmtu3b9d5552n0aNH680339SaNWv0k5/8RCkpKSHbaN26dcrPz9cLL7ygb3/729q4caMeeugh/epXv9Jvf/tb/31Gjhypxx57TOvWrdO7776rIUOGaMaMGTp8+HDItpoxY4ZWrlypsrKykDUj6aOh2urcc8+VxWLR008/7X+c6dOnq7KyMuLn/+ijj+ro0aP6yU9+IklqaWnRJz/5SbW3t0fULqHelx9++KF2794dcoz7/ve/r5aWFknSD37wg7BtHckYd/nll6utrU1vvPGG7r//fo0YMcJfO5yvfvWr/vfLs88+q+uuu86/nvv27VNHR4cef/xxLVmyREOGDFFLS4s+//nPhx2PmpqaNHPmTP3oRz/y/7/r+P6Pf/xDN9xwg6677jpNnTpVv/71r/Xwww9HPL5fffXVuu+++1RcXOyv+8gjj2j16tV69dVX9eqrr6q6ulp5eXlh35OBAvvPkCFDwraTr08vXrw4oj7+7rvvqqGhQWvXrtX//M//hGynFStW6IwzztDMmTP13nvvdas5aNCgbuPW9ddfL4fD4e8vge300UcfacqUKXI6nbrtttvCfg5NmjRJc+bM0caNG7VgwQJ5PB6tXLkyaD197fSlL31J//rXvyRJU6ZMCdt3Innu1113nb+d/vjHP2r+/PnasmVL2JqhxuPLL79c48eP79ZOgW20cOHCsON8pH00sJ3ee+893XzzzUpNTdWaNWu61WxsbNSMGTNksVj8y7e0tGj9+vX+59+1nUaMGKGVK1fq3HPP7fGzuKc+GthON998s8aMGaPTTz9d9957b8TbNqGeu6+dXnnlFZWXl+vgwYMaPnx42LG4ax9NT0/Xjh07NGfOnG7bS4Ht9Oyzz0b8GVddXS1J+uUvfxlUc9asWX0a97qOUV/5yleCtuuuu+46tba2+tvp2muv1aFDhzRx4sSQ9UL10Z/+9KdKT0/XrFmzurXTl770Ja1Zs0bvvfeerrvuurDrGVcmCUyZMsXcdtttQbeNHj3a/OAHP4jo/nfffbc577zzel1u3759ZuDAgWb9+vWmvLzcPProoyGXk2T++c9/9lhr6dKlRpLZvXu3/7b09HTz5z//OWi5vLw888c//rFbzc2bNxtJZv369f7b2traTF5ennnyySfDPu5f//pX43Q6jcfjMcYYU1VVZSSZt956y7/MTTfd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My0tLcaYj79VzMvLM08//bRZuXKluf76640kY7PZTHZ2tpk3b17Ez/25554zTqez27Jnn322sdvtIWu2traaG2+80f9aOZ3Obt+83HrrreaWW27x/1+S+c53vmNOO+0009zcbIzp/s1SJO0c2E5Wq9Wkpqaaxx9/3L9HqLi42Bw5ciToPpHuwTly5IgpLCw0n/nMZ8zatWt7rGmMMb/85S9Nbm6u//kYE7p9vvWtbxlJxul0ntD7PFxbXXrppeaSSy4xNpvNVFZWGmOMee+994wk//99vvrVrwa9R0O1k++9/vzzzwfV9H37lZaWZh555BGzatUq8+CDDxqLxWLefPNNf42ufSkzM9N8/vOfNxaLxdjtdmOxWMzPf/7zbs/jX//6l0lPTzcWi8WUlpaapUuXdm+kTocPHzZZWVn+x+haM5I+GqqtSkpKjMViMe+8845pa2szzzzzjLFYLGbkyJERPf+ubeR7PS+99FJz6623RtwugbqOHZLMCy+8YGbOnGn+67/+y1+z63u8a81Ixrh9+/aZSZMmGYvFYmw2myktLTXz5s0L23+eeOIJs3DhQrNu3Trzl7/8xQwZMsRMnz49qGagbdu2maysLPPkk0+GHYt9wu3B+c53vmMkmcGDB5u///3vZvny5ebaa681+fn5prKyss/ju69uSUlJt3UoKSkxTqcz7Huyp/7TtZ2MMeauu+4ykszKlSuNMX3r47feemvIdrJYLMblcoWt2dXXv/51M2bMmJDr7PPf//3fJjU11dx3330hP4d8/t//+38mPT3dSDKjR48227Zt89cMbKcnn3zS/xmVlpZm3nzzzV77Tqjn/sUvftGMGDHCGBM8HhUUFJg77rijW81w47HT6TRbtmzxr+uZZ57pb6OunxehxvmuQvXRcP1p1apVIWtWVVWZrKws881vftM0NjaahoYG841vfMNICmr7QBs2bDAOh6PHz+Le+mhgO82dO9eUlJSYQYMGmdzcXHPgwIE+b9t0bafAsXjo0KHm/vvvD1mzpz7q217Kzc31t9Pf//53I8ksWLAgaH0i/YwL3Abr67jn03WMCrdd5xv3fM+7t22Rrn3UGGP+8pe/hB33jh492mO9eEiagPP+++8H3f6zn/3MjBo1KqIaDofDnHPOOUG33Xnnnebss882xhizfPlyU1xcHLRBcLwBx+12m6uuusqc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Zh544AEjfXw2kMCaxnjPGrJ48WKzfft28+KLL5ry8nJz9dVX+9eprq7OTJ061Zx++ulm27Zt5sCBA+amm24yWVlZ5vXXXw9aj6amJv/z+O53v2vef/99s3PnTrN48WJzzjnnmIEDB5q6ujp/7UcffdRkZWWZv/3tb+a2224zN954o3E6nWbevHnmRz/6kbFarea1116L6LkbY8xtt91mysrKzKJFi8zKlStNeXm5GTZsmNm2bZtZu3ZtUE1jvIeWjRs3zixevNjs2LHDzJkzx6SkpJjf/e53YdtMIfaC9XR2l1Dt3LWdbrnlFv+u+4cffth88pOfNJmZmf733tGjR82qVav8x9LOnTvXrFq1yhw4cCBsG912223mH//4h9m6dav58MMPu9U0xrtbPi0tzfz+978Pud6B7bN161Zzzz33GKfTecLvc2O6t9VFF11kHA6Hueuuu7rd/xe/+IXJzs42L7zwglm3bp259tprTUlJSdB7qStJ5h//+IcZPHiwufvuu7v9/YUXXjAOh8M88cQTZuvWrea3v/2tsdls/m+VQvWlyZMnG0nm3nvvNTt37jQvvPCCKSgoMN///veNMd5D0374wx+aDz74wOzatcusWLHC3HLLLcblcvm/0evaVtdcc40pKSkxzzzzjNm2bVu3msb03kdDtdW1115rHA6HWbx4sXnttdfMhAkTzJQpU/yHX/T2/I3xfoNaVFRk/vCHPxhJZvjw4WbkyJH+b/Z6a5dQ78tt27aZhQsX+g8v6Toe3X333f5+EKpmJGOc75vwmTNnmtWrV5slS5aYG2+80f+tZ9f+s23bNvPTn/7ULFu2zOzcudPMmzfPjBw50owaNcq/nvfee68ZNGiQmTZtmtm1a5e57LLLTGlpqVm0aFHY8ejAgQNm1apV/nkbr776qpk7d6558803/c/9uuuuM8XFxWb+/Pnm4osvNunp6SY3N9ds3LgxovH917/+tf+5+z43Ro8ebUaMGGH++c9/mjfeeMMUFhaac889N+x7Mlz/8bVNqHbq+g1uJH38/PPPNyNHjvS/pl3bafPmzeZ73/uecTgcZvXq1WEPUdu6dauxWCzmlVde6faZGdhOmzdvNrfddpv517/+ZZYuXRryc2j79u3m5z//uVm+fLnZvXu3ef/9983ll1/u/3zr2k4LFiwwv/3tb43VajWZmZlm+fLlIftOb8/9kUceMdOmTTOjR482H3zwgX/Ozemnnx62P4Yaj10ul3n55ZdDtpOvjd55552w43wkfTRUO915551Gkn++SldPP/20+eCDD8y2bdvMM888Y3Jzc831118fsp327dtnzjnnHDNq1Cjzj3/8I+RncSR9tGs7/eY3vzGzZ882+fn55tlnn41o2ybU+BTYTj/72c9MRUWFueiii0KOxaH66DnnnGMkmV/84hcht5d87ZSRkRHxZ5xve+G//uu//PXWr19v8vLyzNVXXx3RuGdM9zEqIyPDPPnkk2bDhg3+vw0dOtRcfPHFZt++fWbDhg1m4cKF5tlnnw1bs2sfDeWb3/ymGThwoFmwYIHZtGmT/7Om617PRJAUAccY70TD8vJy43Q6zcSJE7udHq83//rXv8xpp51mXC6XGT16tHniiSd6XL7rAO7bTdj156abbvJ3glA/ixcv9tfYsmWLufrqq01RUZFJS0szQ4cODVvTGO8kzLKyMuNwOMzgwYPNPffcE/QhHW6dQv3MmTPHGOM99nLGjBmmsLDQX/emm24ye/bs6fYaPPjgg6asrMzYbDbjcrmMw+EwhYWF5pJLLvEHkUife3Nzs7njjjtMXl6eSU1NNYMGDTJlZWXG6XR2q2mMt3PffPPNprS01KSkpJhRo0aZhx9+2D85PpRoBJyu7WSz2fwnQigtLTVXX3110NyjOXPmhHzu9957b69t5HA4QtY0xpjHH3/cpKammpqamrDr7muftLQ0c84555h33nnnhN/nxnRvq6lTpxpJZvPmzd3u39HRYe69914zYMAA43K5zPnnn2/WrVvX42P6Xp9wNY0x5qmnnvLPgZkwYULQYWzGdO9LvlOZDh482KSkpJihQ4eaH//4x/7+0tzcbD796U+b0tJS43Q6TUlJibnyyiuDJnT31FYul6tbTWN676M+gW01YsQI/3oMGDDAfOMb3+jWzr09/wULFvQ4dvTWLn0ZO3w1fYfiFBQUhG3rSMe40tJSk5eXZ1JSUnrsP3v27DHnn3++ycvLM06n0wwbNsxcffXVEa97uPHI9/7r7WfcuHEmPz//uMb38ePHmx/+8Ich72e3201GRoYZNGiQ/yQDod6TofTWTpEEnK59/Oyzz+6xnTIzM83ZZ59t5s+fH7amMcb88Ic/NGVlZaa9vb1P77FQn0OVlZVm1qxZpqioyDgcDlNWVmYuueSSsO1UVFRkMjMzzZgxY/zjQKi+E+lzHzp0qMnMzPQ/96FDh4ataUz38dgX6kO1k6+N7rnnnrDjfF9ev8B2qqioMC6XK+xnx913322Ki4uNw+EwI0aM8G+QR/IT6rO4L33U106+Ez/Z7fYT3rbxtZPL5TJpaWk9jsVd+2i4mr7tJV87fe1rX4v4My5czf/8z/80M2bMiGjcMybyMaq3n8CaxgT30VDcbrf57ne/6+9P06dP7/ELl3iyGGOMAAAAACAJnPJzcAAAAADAh4ADAAAAIGkQcAAAAAAkDQIOAAAAgKRBwAEAAACQNAg4AAAAAJIGAQcAAABA0iDgAAAAAEgaBBwAAAAASYOAAwAAACBpEHAAAAAAJI3/DzsJgAk5iA49AAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "\n", + "def draw(r, data):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + " ax.plot(x, data)\n", + "\n", + "pulse_delay = 100\n", + "pulse_duration = 100\n", + "total_duration = 2000\n", + "data = [0.0]*pulse_delay\n", + "data += [-1.0]*pulse_duration\n", + "data += [0.0]*pulse_delay\n", + "data += [1.0]*pulse_duration\n", + "data += [0.0]*(total_duration-pulse_delay-pulse_duration)\n", + "\n", + "\n", + "\n", + "def process(data):\n", + " attack = pow(0.01, 1.0 / (20.1 * 48000 * 0.001))\n", + " decay = pow(0.01, 1.0 / (100.0 * 48000 * 0.001))\n", + " value = 0.0\n", + " output = []\n", + " for in_ in data:\n", + " abs_value = abs(in_)\n", + " if abs_value > value:\n", + " value = attack * (value - abs_value) + abs_value\n", + " else:\n", + " value = decay * (value - abs_value) + abs_value\n", + " output.append(value)\n", + " return output\n", + "\n", + "env = process(data)\n", + "draw(env, data)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "50316437-021e-49b4-bda9-7663854444da", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Min: 0.0\n", + "Max: 1.0\n" + ] + }, + { + "data": { + "image/png": "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cWQfHepjRG9tu+v37XUHg8GjOp4c6zGiIys+R3T1fbfMUaqpqTGSur3NnTs3pr3P5+u27cyZM2Pa5ubmdtv2tNNOi2lbUlLSbdsTTzwxpu2JJ57YbduSkpKYtqeddpqRZJJHTzUld79sRn3rOeP0+o0kk5ubG9N25syZ3T6vz+eLaTt37twef28dfe5zn+uxbX19fbTtjTfe2GPb8vLyaNtbb721x7Y7duyItv3Od77TY9v/+q//MsFg0BhjzP33399j2xUrVkSf9+GHH+6x7dKlS6Nt58+f32Pbl19+Odp2wYIFPbZ99tlnjTHGBINB893vfrfHtgsWLIg+78svv9xj2/nz50fbLl26tMe2Dz/8cLTtihUremx7//33R9tu2LChx7bf+c53om137NjRY9tbb7012ra8vLzHtjfeeGO0bX19fY9tP/e5z8Xswz21jbdjRF5eXnRfN+bwMaKr23A5RlRVVZnnn3/eBINBy44RGzZsiLbtzzHiwQcf7LHtYB8jjDHm2Wef7bEtx4jIbTgcI84///zovm7M8Poc0dWt/RgRDAbN888/b84///xu29r9c8TRHiOs/hxhjHXHiAcffDDaNlGPETU1NaYnTFHrRdppV0mSGja8oXCgj6kRAAAAgCUcbemo32pra5WRkaGysjKlp6d3ut+KKWqvv/665syZM2BT1HZWNGjufy+XkfTyv87Q2NzD9w/0FLX22uNtitrSpUt1xRVXyO12x9UUtVAopJdeekkXXXRRXE5RO3Jf765td6yaotax7niborZ48WJ95jOfif7O42WK2quvvqq5c+cqHA7H1RS1hoYGvfzyy532867aDscpakf20XiZotZedzxOUVu6dKnmzp0rt9sdN1PUQqGQFi1apAsvvLDL6f4d27YbTlPUunovkuJjilrH2uNpitrrr7+uK664Ivr/nGhT1Gpra1VUVKSampou80f0Z3Z7Tx/5/f6YztRTu/48Z1+1H0xCoZCSk5Pl9/u7/cDa8cDTm5SUFP1t7Q4ZSTMn5GlKSV6Pbfuq439au46199a2O16vN7rzDGRbj8cT3dmPFAqFogel3tr253mP5Ha7u/0/PZa2Lperx/2lo6SkpOgBra/PO9BtnU5n9A2xt329vW1fOByOQWkrxfbl3uoe7GPEsbQNhUKd+kx/+v2xHiOOtm3HN38rjhHH2ra3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AAAA2AYBBwAAAIBtEHAAAAAA2AYBBwAAAIBt2Cbg/PrXv9bYsWOVnJys6dOn6+2337a6pE5KS0t1/fXXKycnRz6fTyeffLI+/PDDLtt+/etfl8Ph0C9/+cuhLVLSW2+9pSuvvFJFRUVyOBx6/vnno/eFQiHdfffdOumkk+T3+1VUVKSvfOUrKisri3mO/fv364YbblBhYaH8fr9OPfVUPffcc5bVLUkHDhzQTTfdpKKiIvl8Pl166aXasmVL9P7Kykrdcccdmjhxonw+n0aPHq1vfvObqqmpGdS6H3zwQZ1++ulKS0tTfn6+rr76am3atCmmzU033SSHwxFzO/PMMzs91/vvv6+LLrpIfr9fmZmZuuCCC9TU1DRotf/mN7/R1KlTo1dVPuuss/Tqq69K6vu+EggEdMcddyg3N1d+v19XXXWV9u7dO2g196V2Saqvr9ftt9+u4uJipaSk6IQTTtBvfvObLp/LGKPLLrusy/1usD344INyOBy66667ury/u2OJFX30gQce6LQfFxYWRu9fuHCh5syZo9zcXDkcDq1duzbm8Vb10d7qPvK+9tvPfvazmOcZ6v7ZbiDee6zop2PGjOny93rbbbdJivS7Bx54QEVFRUpJSdEFF1ygjz/+uMvnGso+2lvdkrRx40ZdddVVysjIUFpams4880zt3r07er8V/VOSWlpadN9992ns2LFKSUnRuHHj9MMf/lDhcDja5oEHHtCkSZPk9/uVlZWlWbNmafny5dH7reinfam7t88A7azop3V1dbrrrrtUUlKilJQUnX322Vq5cmVMm972GaveS4crWwScZ555RnfddZe+//3va82aNTrvvPN02WWXxfzHW62qqkrnnHOO3G63Xn31VX3yySd65JFHlJmZ2ant888/r+XLl6uoqGjoC5XU0NCgadOmaf78+Z3ua2xs1OrVq/WDH/xAq1ev1sKFC7V582ZdddVVMe1uuOEGbdq0SS+++KLWr1+va665Rl/4whe0Zs0aS+o2xujqq6/W9u3b9cILL2jNmjUqKSnRrFmz1NDQIEkqKytTWVmZfv7zn2v9+vX605/+pNdee0233HLLoNUsSW+++aZuu+02ffDBB1qyZIlaWlo0e/bsaF3tLr30Uu3bty96W7RoUcz977//vi699FLNnj1bK1as0MqVK3X77bfL6Ry8bl5cXKyHHnpI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k07tXnrpJeP3+43D4TBFRUVmxYoV3T7nUPTT3uruy2cAK/vpWWedZWbOnGlKS0tNS0uLeeKJJ4zD4TATJkzo0z4zHProcGObgPPee+/FbP+P//gPM3HiRIuq6sztdpuzzjorZtsdd9xhzjzzTGOMMatWrTIFBQUxB+vhHnCCwaCZN2+eOeWUU0xNTU3MfbfffruZMWOGeeONN8zatWvNAw88YDIyMsy6deuGoOqu6161apWZNm2akWRcLpeZM2eOueyyy8xll13W6fE1NTXmjDPOMJdeeqkJBoNDUrMxxtx6662mpKTE7Nmzp8d2ZWVlxu12m//93/81xhx+s7/33ntj2p100kmDPlUzEAiYLVu2mJUrV5p77rnH5Obmmo8//jimTXf7SncH5VmzZpmvf/3rg1p3b7X/7Gc/MxMmTDAvvvii+eijj8yvfvUrk5qaapYsWWKMMeaFF14w48ePN3V1ddHnG4oPT7t37zb5+flm7dq10W0dA05fjyVW91FjjKmvrzcFBQXmkUceidnel4BjVR81pvu6jTFm4sSJ5vbbb4/ZZmX/HIj3Hqv7qTHGzJ4921xxxRXR79t/p2VlZTHtvvrVr5o5c+YYY6zrox0dWXf7Z5brrrsupt2VV15pvvjFL0a/t6p/PvXUU6a4uNg89dRTZt26debPf/6zyc7ONn/6059i2tXX15stW7aY999/39x8881mzJgx5sCBA52eb6j6aV/q7u0zgJX9dOvWreb888+P1nb66aebL3/5y+aEE07o0z4zHProcBP3AScQCBiXy2UWLlwYs/2b3/ymOf/88y2qqrPRo0fH/BXJGGN+/etfm6KiImOMMY8++qhxOBzG5XJFb5KM0+k0JSUlFlQc0d2bQTAYNFdffbWZOnVqp79ibt26tdNcV2OMufjii4eso/X0JlZdXW3Ky8uNMZHzt2699daY+2tra81ZZ51lLr744pi/wg6222+/3RQXF5vt27f3qf348eOj88+3b99uJJknnngips21115rvvSlLw14rT25+OKLY/5i1NO+8o9//MNIMpWVlTHbp06dav793/99SOrtqL32xsZG43a7O82JvuWWW6Ifnu68885u++zMmTMHrca///3v0TfBjj+3vZaf//znvR5LhkMfbTdr1qxO51D2FnCs6qMddVX3W2+9ZSTFhE9jrO2fA/HeY3U/3blzp3E6neb555+Pbtu2bZuRZFavXh3T9qqrrjJf+cpXjDHW9dGe6g4EAiYpKcn86Ec/imn7ve99z5x99tnGGGv7Z3FxsZk/f37Mth/96Ee9/sF4/PjxnUZ6hrKf9qfu7j4DDIf30fr6+mhov/baa83cuXP7tM9Y3UeHo7g/B8fj8Wj69OnRVUraLVmyRGeffbZFVXV2zjnndFr6d/PmzSopKZEUWTFl3bp1Wrt2bfRWVFSk7373u3r99detKLlboVBI1157rbZs2aI33nhDOTk5Mfc3NjZKUqdVR1wuV8ySjVbJyMhQXl6etmzZolWrVmnevHnR+2prazV79mx5PB69+OKLnebEDgZjjG6//XYtXLhQ//znPzV27NheH3Po0CHt2bNHI0aMkBRZlrSoqKjHfWyoGGOi851721emT58ut9sd03/37dunDRs2WNJ/22sPhUIKhUI97sP33HNPpz4rSY8++qgWLFgwaDVefPHFWr9+fczPPe200/TlL39Za9eu1U033dTrsWS49NFAIKCNGzdG9+O+sKKPHqm7uv/whz9o+vTpnc5FsLJ/DsR7j9X9dMGCBcrPz9fll18e3TZ27FgVFhbG1BQMBvXmm29Ga7Kqj/ZUt8fj0emnn97j/4mV/bOxsfGofm7H47409P20P3V39xlgOLyP+v1+jRgxQlVVVXr99dc1b968Pu0zVvfRYcnafDUwnn76aeN2u80f/vAH88knn5i77rrL+P1+s3PnTqtLi1qxYoVJSkoyP/7xj82WLVvMX/7yF+Pz+cyTTz7Z7WOsmqJWV1dn1qxZY9asWWMkRed87tq1y4RCIXPVVVeZ4uJis3btWrNv377oLRAIGGMif7EfP368Oe+888zy5cvN1q1bo39V7u78jMGu25jIKi5Lly4127ZtM88//7wpKSkx11xzTfTxtbW15owzzjAnnXSS2bp1a8xra2lpGbS6//Vf/9VkZGSYZcuWxfzMxsbG6Ov69re/bd577z2zY8cOs3TpUnPWWWeZkSNHmtra2ujzPProoyY9Pd387W9/M1u2bDH33XefSU5ONlu3bh202u+9917z1ltvmR07dph169aZf/u3fzNOp9MsXry4T/uKMcZ84xvfMMXFxeaNN94wq1evNhdddJGZNm3aoP7Oe6vdmMi0r8mTJ5ulS5ea7du3mwULFpjk5GTz61//utvnlAUrNBnT+RycIx15LLGqj3772982y5YtM9u3bzcffPCBueKKK0xaWlr0WH3o0CGzZs0a88orrxhJ5umnnzZr1qwx+/btM8ZY10d7q9uYyFQcn89nfvOb33T5HFb0T2MG7r3Hqn7a2tpqRo8ebe6+++5O9z300EMmIyPDLFy40Kxfv95cd911ZsSIETHHxSMNVR/tqe6FCxcat9ttHn/8cbNlyxbzq1/9yrhcLvP2228bY6zrn8ZEVuwcOXKkefnll82OHTvMwoULTW5urvne975njImMMNx7773m/fffNzt37jQffvihueWWW4zX642OOFnRT3ur25jePwMYY10/fe2118yrr75qtm/fbhYvXmymTZtmZsyYEZ3W19s+Y4x1fXS4skXAMcaY//7v/zYlJSXG4/GYU089NWaJ3eHipZdeMlOmTDFer9dMmjTJPP744z22tyrgLF261EjqdLvxxhujU0e6ui1dujT6HJs3bzbXXHONyc/PNz6fz0ydOrXTCdpDWbcxxvznf/6nKS4uNm6324wePdrcd999MR+0u3u8JLNjx45Bq7u7n7lgwQJjTGQJydmzZ5u8vLxo7TfeeKPZvXt3p+d68MEHTXFxsfH5fOass86KOfgNhptvvjna7/Ly8szFF18cDQh93VeamprM7bffbrKzs01KSoq54oorunxtQ1m7MZGTgW+66SZTVFRkkpOTzcSJE80jjzwSPRG7K/EScIyxpo9+4QtfMCNGjDBut9sUFRWZa665JuZ8rQULFnS5v9x///3GGOv6aG91G2PMb3/7W5OSkmKqq6u7fZ6h7p/tBuK9x6p++vrrrxtJZtOmTZ3uC4fD5v777zeFhYXG6/Wa888/36xfv77H5xuqPtpT3cYY84c//MGMHz/eJCcnm2nTpsVMYzPGmv5pTCSc3HnnnWb06NEmOTnZjBs3znz/+9+Pvlc2NTWZz3zmM6aoqMh4PB4zYsQIc9VVV8UsMmBFP+2tbmN6/wzQzop++swzz5hx48YZj8djCgsLzW233dbpWNLbPmNVHx2uHMYYMzBjQQAAAABgrbg/BwcAAAAA2hFwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbRBwAAAAANgGAQcAAACAbfx/yETS1oDs3Z0AAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "\n", + "def draw(r):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + " \n", + "\n", + "data = [(3.0 + math.log10(x/1000))/3.0 for x in range(1,1001)]\n", + "\n", + "draw(data)\n", + "print(f'Min: {min(data)}')\n", + "print(f'Max: {max(data)}')" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "d3bbb0dd-b8c3-4563-aec0-f39f1d0766b1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.0 direct access 0: 0.0\n", + "0.03125 interpolating [0.0] -> [1.0] with f 0.125: 0.125\n", + "0.0625 interpolating [0.0] -> [1.0] with f 0.25: 0.25\n", + "0.09375 interpolating [0.0] -> [1.0] with f 0.375: 0.375\n", + "0.125 interpolating [0.0] -> [1.0] with f 0.5: 0.5\n", + "0.15625 interpolating [0.0] -> [1.0] with f 0.625: 0.625\n", + "0.1875 interpolating [0.0] -> [1.0] with f 0.75: 0.75\n", + "0.21875 interpolating [0.0] -> [1.0] with f 0.875: 0.875\n", + "0.25 direct access 1: 1.0\n", + "0.28125 interpolating [1.0] -> [2.0] with f 0.125: 1.125\n", + "0.3125 interpolating [1.0] -> [2.0] with f 0.25: 1.25\n", + "0.34375 interpolating [1.0] -> [2.0] with f 0.375: 1.375\n", + "0.375 interpolating [1.0] -> [2.0] with f 0.5: 1.5\n", + "0.40625 interpolating [1.0] -> [2.0] with f 0.625: 1.625\n", + "0.4375 interpolating [1.0] -> [2.0] with f 0.75: 1.75\n", + "0.46875 interpolating [1.0] -> [2.0] with f 0.875: 1.875\n", + "0.5 direct access 2: 2.0\n", + "0.53125 interpolating [2.0] -> [3.0] with f 0.125: 2.125\n", + "0.5625 interpolating [2.0] -> [3.0] with f 0.25: 2.25\n", + "0.59375 interpolating [2.0] -> [3.0] with f 0.375: 2.375\n", + "0.625 interpolating [2.0] -> [3.0] with f 0.5: 2.5\n", + "0.65625 interpolating [2.0] -> [3.0] with f 0.625: 2.625\n", + "0.6875 interpolating [2.0] -> [3.0] with f 0.75: 2.75\n", + "0.71875 interpolating [2.0] -> [3.0] with f 0.875: 2.875\n", + "0.75 direct access 3: 3.0\n", + "0.78125 interpolating [3.0] -> [4.0] with f 0.125: 3.125\n", + "0.8125 interpolating [3.0] -> [4.0] with f 0.25: 3.25\n", + "0.84375 interpolating [3.0] -> [4.0] with f 0.375: 3.375\n", + "0.875 interpolating [3.0] -> [4.0] with f 0.5: 3.5\n", + "0.90625 interpolating [3.0] -> [4.0] with f 0.625: 3.625\n", + "0.9375 interpolating [3.0] -> [4.0] with f 0.75: 3.75\n", + "0.96875 interpolating [3.0] -> [4.0] with f 0.875: 3.875\n", + "1.0 direct access 4: 4.0\n" + ] + } + ], + "source": [ + "import math\n", + "import numpy as np\n", + "\n", + "table = np.array([0.0, 1.0, 2.0, 3.0, 4.0])\n", + "\n", + "def lerp(a, b, f=0.5) -> float:\n", + " f = min(1.0, max(0.0, f))\n", + " if f == 0.0:\n", + " return a\n", + " elif f == 1.0:\n", + " return b\n", + " else:\n", + " return a * (1.0-f) + b * f\n", + "\n", + "def get(table, f):\n", + " f = min(1.0, max(0.0, f))\n", + " pos = (len(table)-1) * f\n", + " pos_frac = pos%1.0\n", + " if pos_frac == 0.0:\n", + " val = table[int(round(pos))]\n", + " print(f\"{f} direct access {int(pos)}: {val}\")\n", + " return val\n", + " a = table[int(math.floor(pos))]\n", + " b = table[int(math.ceil(pos))]\n", + " val = lerp(a, b, pos_frac) \n", + " print(f\"{f} interpolating [{a}] -> [{b}] with f {pos_frac}: {val}\")\n", + " return val\n", + " \n", + " \n", + "for i in range(0, 33):\n", + " get(table, i/32.0)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "cc0b4852-eccb-4bae-859a-bbbf92458ab2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Min: 0.0\n", + "Max: 4094.0\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "\n", + "def draw(r):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + " \n", + "def deadband(x, deadband = 200):\n", + " span = 4096\n", + " half = span/2\n", + " half_span = half-deadband\n", + " scaler = half/half_span\n", + " \n", + " if x < half:\n", + " x += deadband\n", + " x = (min(half, x)-half) * -scaler\n", + " x = int(x * -1) + half\n", + " else:\n", + " x -= deadband\n", + " x = (max(half, x)-half)*scaler\n", + " x = int(x)+half\n", + " return x\n", + "\n", + "data = [deadband(x) for x in range(0,4096)]\n", + "\n", + "draw(data)\n", + "print(f'Min: {min(data)}')\n", + "print(f'Max: {max(data)}')" + ] + }, + { + "cell_type": "code", + "execution_count": 121, + "id": "2e2c2c7f-4bc6-4a1f-b6bd-bf5558b8f03f", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "947364e8d6aa4d1ba675e14ddf866148", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.2, description='f', max=1.0, step=0.001), Output()), _dom_classes=('…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "<function __main__.draw(f)>" + ] + }, + "execution_count": 121, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6112aebb-dc20-45e3-9ca6-280c76523469", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/scripts/lookup-tables.ipynb b/scripts/lookup-tables.ipynb new file mode 100644 index 0000000..e266163 --- /dev/null +++ b/scripts/lookup-tables.ipynb @@ -0,0 +1,971 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "52c8bec3-db2d-4522-b692-b035a71410de", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "zsh:1: parse error near `-m'\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ffe8405ccce2405c84171b7c83e66e65", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "!{sys.executable} -m pip install clipboard\n", + "%matplotlib inline\n", + "import clipboard\n", + "\n", + "\n", + "def draw(r, g, b):\n", + " x = [x for x in range(256)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, 256, 64))\n", + " ax.set_yticks(range(-256*2, 256*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r, 'r')\n", + " ax.plot(x, g, 'g')\n", + " ax.plot(x, b, 'b')\n", + "\n", + "def r():\n", + " start = 100\n", + " start2 = 220\n", + " last_a = 0\n", + " for i in range(256):\n", + " if i < start:\n", + " yield 0\n", + " elif i < start2:\n", + " span = 255-start\n", + " d = (i-start)/span\n", + " last_a = int(d*30.0)\n", + " yield min(255, last_a)\n", + " else:\n", + " span = 255-start2\n", + " d = (i-start2)/span\n", + " d = d*d*d\n", + " yield min(255, last_a + int(d*350.0))\n", + "\n", + "def g():\n", + " start = 0\n", + " end = 180-80\n", + " scale = 0.25\n", + " for i in range(256):\n", + " if i < start:\n", + " yield 0\n", + " elif i > end:\n", + " d = 1.0 - ((i-end)/(295-end))\n", + " # d = (d*d)/4 + d/2\n", + " yield max(0, min(255, int(d*175*scale)))\n", + " else:\n", + " d = ((i-start)/(255-start))\n", + " d = (d*d*d)\n", + " yield min(255, int(d*2800*scale))\n", + " \n", + "def b():\n", + " start = 4\n", + " end = 40\n", + " scale = 0.2\n", + " for i in range(256):\n", + " if i < start:\n", + " yield 0\n", + " elif i > end:\n", + " d = (i-end)/(60)\n", + " d = d*d\n", + " d = 1.0 - d\n", + " # d = math.sqrt(d)\n", + " yield max(0, min(255, int(d*32*scale)))\n", + " else:\n", + " d = (i-start)/(255-start)\n", + " d = math.sqrt(d)/2 + d/2\n", + " yield max(0, min(255, int(d*107*scale)))\n", + "r, g, b = list(r()), list(g()), list(b())\n", + "draw(r, g, b)\n", + "\n", + "text = \"\"\n", + "text += \"// Lookup Table for Red LED Channel\\n\"\n", + "text += f\"int red_lookup[] = {{{', '.join(str(v) for v in r)}}};\\n\\n\"\n", + "text += \"// Lookup Table for Green LED Channel\\n\"\n", + "text += f\"int green_lookup[] = {{{', '.join(str(v) for v in g)}}};\\n\\n\"\n", + "text += \"// Lookup Table for Blue LED Channel\\n\"\n", + "text += f\"int blue_lookup[] = {{{', '.join(str(v) for v in b)}}};\\n\\n\"\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "41562cc6-9911-4fb1-87ec-f2b3c8bfb3c2", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f634b493129d44ee861620bc2c52f2df", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "16" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "\n", + "\n", + "def draw(r):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.axvline(x=l/2, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + "\n", + " \n", + " \n", + "def deadband(length, deadband=0.04):\n", + " readings = []\n", + "\n", + " for i in range(length):\n", + " current_reading = i/(length-1)\n", + " scaler = (1.0) / (1.0 - deadband)\n", + " scaler += 0.1\n", + "\n", + " if current_reading < 0.5:\n", + " current_reading += deadband\n", + " current_reading = min(0.5, current_reading)\n", + " current_reading = 0.5 - current_reading\n", + " current_reading *= scaler\n", + " current_reading = 0.5 - current_reading\n", + " # current_reading =\n", + " else:\n", + " current_reading -= deadband\n", + " current_reading = max(0.5, current_reading)\n", + " current_reading = 0.5 - current_reading\n", + " current_reading *= scaler\n", + " current_reading = 0.5 - current_reading\n", + " \n", + " val = min(length, max(0, current_reading))\n", + " readings.append(val)\n", + " return readings\n", + "\n", + "\n", + "\n", + "\n", + "bip = deadband(16, deadband = 0.08)\n", + "draw(bip)\n", + "text = \"\"\n", + "text += \"// Lookup Table for Bipolar Curve with deadband\\n\"\n", + "text += f\"float bip_lookup[] = {{{', '.join(str(v) for v in bip)}}};\\n\\n\"\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)\n", + "len(bip)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "ecc666b0-8195-4276-a576-39d41753b540", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c0275989ec7240269d115c3bda12a1ea", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "0.0" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "import sys\n", + "\n", + "\n", + "\n", + "def draw(r):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + "\n", + " \n", + " \n", + "def lin_to_log(length, strength=1.0):\n", + " # Limit to range 0.0 and 1.0\n", + " strength = min(1.0, max(0.0, strength))\n", + " readings = []\n", + " linear_readings = []\n", + " for i in range(length):\n", + " current_reading = i/length\n", + " linear_readings.append(current_reading)\n", + " # Log of 0 is error, so handle it explicitly\n", + " if i == 0:\n", + " current_reading = 0.0\n", + " else:\n", + " current_reading = math.log10(i)\n", + " readings.append(current_reading)\n", + " \n", + " # Normalize to scale 0.1 to one\n", + " maxima = max(readings)\n", + " scaler = 1.0 / maxima\n", + " readings = [r*scaler for r in readings]\n", + " \n", + " output = []\n", + " for i, r in enumerate(readings):\n", + " val = r*strength + linear_readings[i] * (1.0 - strength)\n", + " output.append(val)\n", + " \n", + " # Convert to integer value range\n", + " output = [o for o in output]\n", + " return output\n", + "\n", + "\n", + "\n", + "\n", + "# lilo = lin_to_log(4096, strength=1.0)\n", + "lilo = lin_to_log(32, strength=1.0)\n", + "# lilo = [l/256.0 for l in lilo]\n", + "draw(lilo)\n", + "text = \"\"\n", + "text += \"// Lookup Table for Logarithmic Curve\\n\"\n", + "text += f\"float log_lookup[] = {{{', '.join(str(v) for v in lilo)}}};\\n\\n\"\n", + "# print(text)\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)\n", + "min(lilo)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "2ecfda42-4a3c-489a-bc90-8576648c339c", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b80d3161dda442aca4fd56a9650f76e5", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "0.9999999999999999" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "import math\n", + "import sys\n", + "\n", + "\n", + "\n", + "def draw(r):\n", + " l = len(r)\n", + " x = [x for x in range(l)]\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.axhline(y=0.5, color='black', linestyle='--')\n", + " ax.set_xticks(range(0, l, 64))\n", + " ax.set_yticks(range(-l*2, l*2+1, 128))\n", + " ax.grid()\n", + " ax.plot(x, r)\n", + "\n", + " \n", + " \n", + "def exp_lookup(length, strength=1.0):\n", + " # Limit to range 0.0 and 1.0\n", + " strength = min(1.0, max(0.0, strength))\n", + " readings = []\n", + " linear_readings = []\n", + " for i in range(length):\n", + " current_reading = i/length\n", + " linear_readings.append(current_reading)\n", + " # Log of 0 is error, so handle it explicitly\n", + " if i == 0:\n", + " current_reading = 0.0\n", + " else:\n", + " current_reading = i*i\n", + " readings.append(current_reading)\n", + " \n", + " # Normalize to scale 0.1 to one\n", + " maxima = max(readings)\n", + " scaler = 1.0 / maxima\n", + " readings = [r*scaler for r in readings]\n", + " \n", + " output = []\n", + " for i, r in enumerate(readings):\n", + " val = r*strength + linear_readings[i] * (1.0 - strength)\n", + " output.append(val)\n", + " \n", + " # Convert to integer value range\n", + " output = [o for o in output]\n", + " return output\n", + "\n", + "\n", + "\n", + "\n", + "# lilo = lin_to_log(4096, strength=1.0)\n", + "lilo = exp_lookup(8, strength=1.0)\n", + "draw(lilo)\n", + "text = \"\"\n", + "text += \"// Lookup Table for Exponential Curve\\n\"\n", + "text += f\"float exp_lookup[] = {{{', '.join(str(v) for v in lilo)}}};\\n\\n\"\n", + "# print(text)\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)\n", + "\n", + "max(lilo)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "e51416f3-f34d-4513-9f0c-fa52c468274e", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "20aa9b4615984d5e9c1c6af071018e61", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.2, description='f', max=1.0, step=0.001), Output()), _dom_classes=('…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "dab51951087c4eaea31ddefaaafa0ce6", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from matplotlib import pyplot as plt\n", + "%matplotlib inline\n", + "from ipywidgets import interact, FloatSlider\n", + "import matplotlib.transforms as transforms\n", + "import math\n", + "import clipboard\n", + "\n", + "def draw(f):\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " b = scan2d(x, y, f)\n", + " ax.axhline(y=b, color='red', linestyle='--')\n", + " ax.axvline(x=f, color='red', linestyle='--')\n", + " trans = transforms.blended_transform_factory(\n", + " ax.get_yticklabels()[0].get_transform(), ax.transData)\n", + " ax.text(0.95, b, \"{:.02f}\".format(b), color=\"red\", transform=trans, ha=\"right\", va=\"bottom\")\n", + " ax.grid()\n", + " ax.plot(x, y)\n", + "\n", + "def lerp(a, b, f=0.5) -> float:\n", + " f = min(1.0, max(0.0, f))\n", + " if f == 0.0:\n", + " return a\n", + " elif f == 1.0:\n", + " return b\n", + " else:\n", + " return a * (1.0-f) + b * f\n", + "\n", + "def lerp2d(x1, y1, x2, y2, f=0.5):\n", + " if f == 0.0:\n", + " return [x1, x2]\n", + " elif f == 1.0:\n", + " return [x1, x2]\n", + " else:\n", + " x = lerp(x1, x2, f)\n", + " y = lerp(y1, y2, f)\n", + " return [x, y]\n", + "\n", + "\n", + "# A function that scans through two lists representing x/y values using a\n", + "# third value called f and returns the linear interpolation between those points\n", + "def scan2d(x, y, f):\n", + " # f = min(1.0, max(0.0, f))\n", + " assert len(x) == len(y)\n", + " # Find ax and bx for given factor\n", + " xa = None\n", + " last_value = None\n", + " idx = None\n", + " for i, v in enumerate(x):\n", + " # this = abs(f-v)\n", + " this = f-v\n", + " if xa is None or this > 0:\n", + " xa = this\n", + " idx = i\n", + " idx2 = min(idx+1, len(x)-1)\n", + " if idx == idx2:\n", + " return y[idx]\n", + " xa = x[idx]\n", + " xb = x[idx2]\n", + " ya = y[idx]\n", + " yb = y[idx2]\n", + " xspan = xb-xa\n", + " xscaler = 1/xspan\n", + " new_f = (f-xa)*xscaler\n", + " return lerp(ya, yb, new_f)\n", + " \n", + " \n", + "# lines_orig = [\n", + "# [0.0, 0.0, -0.5],\n", + "# [0.45, 0.5, 0.0],\n", + "# [0.55, 0.5, 1.0],\n", + "# [1.0, 1.0, 0.0],\n", + "# ]\n", + "\n", + "# half_deadband = 0.005\n", + "\n", + "# lines_orig = [\n", + "# [0.0, -1.0, 0.0],\n", + "# [0.0+half_deadband, -1.0, 0.0],\n", + "# ] \n", + "\n", + "# steps = list(range(-9, 11))\n", + "# for i in steps:\n", + "# f = float(i)\n", + "# print(f/10)\n", + "# lines_orig.append([0.5+f/20-half_deadband, f/10, 0.0])\n", + "# lines_orig.append([0.5+f/20+half_deadband, f/10, 0.0])\n", + "\n", + "db = 0.005\n", + "hb = db/2.0\n", + "\n", + "lines_orig = [\n", + " [0.0, -1.0, 0.0], # -1000%\n", + " [0.0+hb, -1.0, 0.0], # -1000%\n", + " [0.02-hb, -0.9, 0.0], # -900%\n", + " [0.02+hb, -0.9, 0.0], # -900%\n", + " [0.04-hb, -0.8, 0.0], # -800%\n", + " [0.04+hb, -0.8, 0.0], # -800%\n", + " [0.06-hb, -0.7, 0.0], # -700%\n", + " [0.06+hb, -0.7, 0.0], # -700%\n", + " [0.08-hb, -0.6, 0.0], # -600%\n", + " [0.08+hb, -0.6, 0.0], # -600%\n", + " [0.1-hb, -0.5, 0.0], # -500%\n", + " [0.1+hb, -0.5, 0.0], # -500%\n", + " [0.12-hb, -0.4, 0.0], # -400%\n", + " [0.12+hb, -0.4, 0.0], # -400%\n", + " [0.14-hb, -0.3, 0.0], # -300%\n", + " [0.14+hb, -0.3, 0.0], # -300%\n", + " [0.16-hb, -0.2, 0.0], # -200%\n", + " [0.16+hb, -0.2, 0.0], # -200%\n", + " [0.2-hb, -0.1, 0.0], # -100%\n", + " [0.2+hb, -0.1, 0.0], # -100%\n", + " [0.25-hb, -0.05, 0.0], # -50%\n", + " [0.25+hb, -0.05, 0.0], # -50%\n", + " [0.3-hb, -0.025, 0.0], # -25%\n", + " [0.3+hb, -0.025, 0.0], # -25%\n", + " [0.38-hb, -0.0125, 0.0], # -12.5%\n", + " [0.38+hb, -0.0125, 0.0], # -12.5%\n", + " [0.42-hb, -0.00625, 0.0], # -6.25%\n", + " [0.42+hb, -0.00625, 0.0], # -6.25%\n", + " [0.46-hb, -0.003125, 0.0], # -3.125%\n", + " [0.46+hb, -0.003125, 0.0], # -3.125%\n", + " [0.5-hb, 0.0, 0.0], # 0%\n", + " [0.5+hb, 0.0, 0.0], # 0%\n", + " [1.0-0.46-hb, 0.003125, 0.0], # 3.125%\n", + " [1.0-0.46+hb, 0.003125, 0.0], # 3.125%\n", + " [1.0-0.42-hb, 0.00625, 0.0], # 6.25%\n", + " [1.0-0.42+hb, 0.00625, 0.0], # 6.25%\n", + " [1.0-0.38-hb, 0.0125, 0.0], # 12.5%\n", + " [1.0-0.38+hb, 0.0125, 0.0], # 12.5%\n", + " [1.0-0.3-hb, 0.025, 0.0], # 25%\n", + " [1.0-0.3+hb, 0.025, 0.0], # 25%\n", + " [1.0-0.25-hb, 0.05, 0.0], # 50%\n", + " [1.0-0.25+hb, 0.05, 0.0], # 50%\n", + " [1.0-0.2-hb, 0.1, 0.0], # 100%\n", + " [1.0-0.2+hb, 0.1, 0.0], # 100%\n", + " [1.0-0.16-hb, 0.2, 0.0], # 200%\n", + " [1.0-0.16+hb, 0.2, 0.0], # 200%\n", + " [1.0-0.14-hb, 0.3, 0.0], # 300%\n", + " [1.0-0.14+hb, 0.3, 0.0], # 300%\n", + " [1.0-0.12-hb, 0.4, 0.0], # 400%\n", + " [1.0-0.12+hb, 0.4, 0.0], # 400%\n", + " [1.0-0.1-hb, 0.5, 0.0], # 500%\n", + " [1.0-0.1+hb, 0.5, 0.0], # 500%\n", + " [1.0-0.08-hb, 0.6, 0.0], # 600%\n", + " [1.0-0.08+hb, 0.6, 0.0], # 600%\n", + " [1.0-0.06-hb, 0.7, 0.0], # 700%\n", + " [1.0-0.06+hb, 0.7, 0.0], # 700%\n", + " [1.0-0.04-hb, 0.8, 0.0], # 800%\n", + " [1.0-0.04+hb, 0.8, 0.0], # 800%\n", + " [1.0-0.02-hb, 0.9, 0.0], # 900%\n", + " [1.0-0.02+hb, 0.9, 0.0], # 900%\n", + " [1.0-0.0-hb, 1.0, 0.0], # 1000%\n", + " [1.0-0.0, 1.0, 0.0], # 1000%\n", + "]\n", + "\n", + "# Calculate curves for points of curvature\n", + "def make_lines(lines_orig, resolution=20):\n", + " lines = []\n", + " for i, l in enumerate(lines_orig):\n", + " i2 = min(len(lines_orig)-1, i+1)\n", + " if l[2] == 0.0:\n", + " lines.append(l)\n", + " else:\n", + " xa = lines_orig[i][0]\n", + " xb = lines_orig[i2][0]\n", + " ya = lines_orig[i][1]\n", + " yb = lines_orig[i2][1]\n", + " x_span = xb-xa\n", + " y_span = yb-ya\n", + " x_step = 1/20\n", + " y_step = 1/20\n", + " for j in range(resolution):\n", + " x = x_step * j\n", + " y = y_step * j\n", + " y_curve = 0\n", + " if l[2] > 0.0:\n", + " y_curve = y*y*y\n", + " else:\n", + " y_curve = y*y\n", + " y = (1.0-l[2]) * y + l[2] * y_curve\n", + " lines.append([xa+x*x_span, ya+y*y_span, 0.0])\n", + " return lines\n", + "\n", + "lines = make_lines(lines_orig, 20)\n", + "\n", + "x = [a[0] for a in lines]\n", + "y = [a[1] for a in lines]\n", + "c = [a[2] for a in lines]\n", + "# draw(x, y, 0.45/2)\n", + "\n", + "interact(draw, f=FloatSlider(min=min(x), max=max(x), step=0.001, value=0.2))\n", + "\n", + "length = len(x)\n", + "text = \"\"\n", + "text += \"// Lookup Table for Pitch Knob\\n\"\n", + "text += f\"float pitch_knob_lookup_x[] = {{{', '.join(str(xv) for xv in x)}}};\\n\"\n", + "text += f\"float pitch_knob_lookup_y[] = {{{', '.join(str(yv) for yv in y)}}};\\n\"\n", + "text += f\"size_t pitch_knob_lookup_length = {length};\\n\"\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f35f1609-3a10-4dce-b7dd-201d79f2c39c", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1722650a6b67420b828b4257209c0c20", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "interactive(children=(FloatSlider(value=0.2, description='f', max=1.5, min=-1.5, step=0.001), Output()), _dom_…" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "8cb6ac47adeb428cb272883eda5c34fb", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "19\n" + ] + } + ], + "source": [ + "# Saturation curve\n", + "\n", + "# X / Y / Curvature\n", + "lines_orig = [\n", + " [-1.5, -1.0, 1.0],\n", + " [-0.9, -0.8, 0.0],\n", + " [0.0, 0.0, 0.0],\n", + " [0.9, 0.8, -1.1],\n", + " [1.5, 1.0, 0.0],\n", + "]\n", + "\n", + "lines = make_lines(lines_orig, 8)\n", + "\n", + "\n", + "x = [a[0] for a in lines]\n", + "y = [min(1.0, a[1]) for a in lines]\n", + "c = [a[2] for a in lines]\n", + "# draw(x, y, 0.45/2)\n", + "\n", + "interact(draw, f=FloatSlider(min=min(x), max=max(x), step=0.001, value=0.2))\n", + "\n", + "length = len(x)\n", + "text = \"\"\n", + "text += \"// Lookup Curves for Saturation b\\n\"\n", + "text += f\"float saturation_lookup_x[] = {{{', '.join(str(xv) for xv in x)}}};\\n\"\n", + "text += f\"float saturation_lookup_y[] = {{{', '.join(str(yv) for yv in y)}}};\\n\"\n", + "text += f\"size_t saturation_lookup_length = {length};\\n\"\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)\n", + "print(len(x))\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f0cd9d06-a15a-46b4-a3ef-4aee3d4f7cd0", + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5d93604ad4424d3e9fe43ad3bf55aa35", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Button(button_style='success', description='copy C++ to clipboard', style=ButtonStyle())" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 800x400 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# X / Y / Curvature\n", + "\n", + "def draw_rgb(xr, yr, xg, yg, xb, yb):\n", + " fig = plt.figure(figsize=(8, 4))\n", + " ax = fig.add_axes([0, 0, 1, 1])\n", + " ax.grid()\n", + " ax.plot(xr, yr, 'r')\n", + " ax.plot(xg, yg, 'g')\n", + " ax.plot(xb, yb, 'b')\n", + "\n", + "\n", + "# BLUE\n", + "lines_b = [\n", + " [0, 0, 0.8],\n", + " [40, 10, -1.0],\n", + " [170, 0, 1.0],\n", + "]\n", + "lines_b = make_lines(lines_b, 20)\n", + "xb = [a[0] for a in lines_b]\n", + "yb = [a[1] for a in lines_b]\n", + "\n", + "# Green\n", + "lines_g = [\n", + " [10, 0, 1.0],\n", + " [180, 60, -0.2],\n", + " [250, 0, 0.0],\n", + "]\n", + "lines_g = make_lines(lines_g, 20)\n", + "xg = [a[0] for a in lines_g]\n", + "yg = [a[1] for a in lines_g]\n", + "\n", + "# RED\n", + "lines_r = [\n", + " [170, 0, 1.0],\n", + " [240, 30, 0.9],\n", + " [255, 255, 0.0],\n", + "]\n", + "lines_r = make_lines(lines_r, 20)\n", + "xr = [a[0] for a in lines_r]\n", + "yr = [a[1] for a in lines_r]\n", + "\n", + "draw_rgb(xr, yr, xg, yg, xb, yb)\n", + "\n", + "length = len(xr)\n", + "text = \"\"\n", + "text += \"// Lookup Curves LED Red b\\n\"\n", + "text += f\"float red_lut_x[] = {{{', '.join(str(xv) for xv in xr)}}};\\n\"\n", + "text += f\"float red_lut_y[] = {{{', '.join(str(yv) for yv in yr)}}};\\n\"\n", + "text += f\"size_t red_lut_len = {length};\\n\\n\"\n", + "length = len(xg)\n", + "text += \"// Lookup Curves LED Green b\\n\"\n", + "text += f\"float green_lut_x[] = {{{', '.join(str(xv) for xv in xg)}}};\\n\"\n", + "text += f\"float green_lut_y[] = {{{', '.join(str(yv) for yv in yg)}}};\\n\"\n", + "text += f\"size_t green_lut_len = {length};\\n\\n\"\n", + "length = len(xb)\n", + "text += \"// Lookup Curves LED Blue b\\n\"\n", + "text += f\"float blue_lut_x[] = {{{', '.join(str(xv) for xv in xb)}}};\\n\"\n", + "text += f\"float blue_lut_y[] = {{{', '.join(str(yv) for yv in yb)}}};\\n\"\n", + "text += f\"size_t blue_lut_len = {length};\\n\\n\"\n", + "\n", + "import ipywidgets as widgets\n", + "from IPython.display import display, HTML, Javascript\n", + "mybtn = widgets.Button(description='copy C++ to clipboard', button_style='success')\n", + "\n", + "def mybtn_event_handler(b):\n", + " print(\"copied\")\n", + " clipboard.copy(text)\n", + "\n", + "mybtn.on_click(mybtn_event_handler)\n", + "\n", + "display(mybtn)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "59b56dbc-6852-4989-bc19-3525ee7caf8b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5a511d24-cc91-450f-83e4-8295647d9391", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.15" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} -- GitLab