diff --git a/lowstepper_firmware/build_wasm.sh b/lowstepper_firmware/build_wasm.sh index 78a43da..a317e1c 100755 --- a/lowstepper_firmware/build_wasm.sh +++ b/lowstepper_firmware/build_wasm.sh @@ -1,9 +1,9 @@ #!/bin/bash -emcc wasm.cc -o wasm.js -s MODULARIZE -s EXPORTED_RUNTIME_METHODS=['ccall'] -s WASM=1 +emcc wasm.cc -o wasm.js -s MODULARIZE -s EXPORTED_RUNTIME_METHODS=['ccall'] -s WASM=1 -g -emcc wasm.cc -o wasm.js -s WASM=1 -std=c++1z \ +emcc wasm.cc -g -o wasm.js -s WASM=1 -std=c++1z \ -s MODULARIZE -s EXPORTED_RUNTIME_METHODS=['ccall'] \ -s LLD_REPORT_UNDEFINED \ -g4 -s ASSERTIONS=2 -s SAFE_HEAP=1 -s STACK_OVERFLOW_CHECK=1 \ diff --git a/lowstepper_wasm_demo/package-lock.json b/lowstepper_wasm_demo/package-lock.json index 34356d7..60e3dc2 100644 --- a/lowstepper_wasm_demo/package-lock.json +++ b/lowstepper_wasm_demo/package-lock.json @@ -4550,6 +4550,89 @@ "type": "^1.0.1" } }, + "d3-array": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", + "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" + }, + "d3-collection": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", + "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "d3-dispatch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", + "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" + }, + "d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "d3-format": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", + "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + }, + "d3-scale": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", + "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-selection": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", + "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" + }, + "d3-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", + "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" + }, + "d3-time-format": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", + "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, "damerau-levenshtein": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz", @@ -5017,23 +5100,23 @@ "integrity": "sha512-Adcvng33sd3gTjNIDNXGD1G4H6qCImIy2euUJAQHtLNplEKU5WEz5KRJxupRNIIT8sD5oFZLTKBWAf12Bsz24A==" }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" }, "dependencies": { "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" } } }, @@ -7208,9 +7291,9 @@ "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" }, "immer": { - "version": "7.0.9", - "resolved": "https://registry.npmjs.org/immer/-/immer-7.0.9.tgz", - "integrity": "sha512-Vs/gxoM4DqNAYR7pugIxi0Xc8XAun/uy7AQu4fLLqaTBHxjOP9pJ266Q9MWA/ly4z6rAFZbvViOtihxUZ7O28A==" + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/immer/-/immer-8.0.1.tgz", + "integrity": "sha512-aqXhGP7//Gui2+UrEtvxZxSquQVXTpZ7KDxfCcKAF3Vysvw0CViVaW9RZ1j1xlIYqaaaipBoqdqeibkc18PNvA==" }, "import-cwd": { "version": "2.1.0", @@ -10297,9 +10380,9 @@ } }, "open": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz", - "integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "requires": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" @@ -12016,9 +12099,9 @@ } }, "react-dev-utils": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.1.tgz", - "integrity": "sha512-rlgpCupaW6qQqvu0hvv2FDv40QG427fjghV56XyPcP5aKtOAPzNAhQ7bHqk1YdS2vpW1W7aSV3JobedxuPlBAA==", + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-11.0.4.tgz", + "integrity": "sha512-dx0LvIGHcOPtKbeiSUM4jqpBl3TcY7CDjZdfOIcKeznE7BWr9dg0iPG90G5yfVQ+p/rGNMXdbfStvzQZEVEi4A==", "requires": { "@babel/code-frame": "7.10.4", "address": "1.1.2", @@ -12033,13 +12116,13 @@ "global-modules": "2.0.0", "globby": "11.0.1", "gzip-size": "5.1.1", - "immer": "7.0.9", + "immer": "8.0.1", "is-root": "2.1.0", "loader-utils": "2.0.0", "open": "^7.0.2", "pkg-up": "3.1.0", "prompts": "2.4.0", - "react-error-overlay": "^6.0.8", + "react-error-overlay": "^6.0.9", "recursive-readdir": "2.2.2", "shell-quote": "1.7.2", "strip-ansi": "6.0.0", @@ -12132,15 +12215,49 @@ } }, "react-error-overlay": { - "version": "6.0.8", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.8.tgz", - "integrity": "sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw==" + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==" }, "react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-motion": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/react-motion/-/react-motion-0.5.2.tgz", + "integrity": "sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ==", + "requires": { + "performance-now": "^0.2.0", + "prop-types": "^15.5.8", + "raf": "^3.1.0" + }, + "dependencies": { + "performance-now": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" + } + } + }, + "react-move": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/react-move/-/react-move-2.9.1.tgz", + "integrity": "sha512-5qKYsJrKKpSypEaaYyR2HBbBgX65htRqKDa8o5OGDkq2VfklmTCbLawtYFpdmcJRqbz4jCYpzo2Rrsazq9HA8Q==", + "requires": { + "@babel/runtime": "^7.2.0", + "d3-interpolate": "^1.3.2", + "d3-timer": "^1.0.9", + "prop-types": "^15.6.2", + "react-lifecycles-compat": "^3.0.4" + } + }, "react-p5-wrapper": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/react-p5-wrapper/-/react-p5-wrapper-2.3.0.tgz", @@ -12151,6 +12268,26 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" }, + "react-rotary-knob": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/react-rotary-knob/-/react-rotary-knob-1.1.8.tgz", + "integrity": "sha512-K/RfMCM1OcDUMPdP7uR/uDBcg84rFgvC1HkgS89EGvZzaHwURCV/9JQTmJNxWeaCZhd2piFKFPoej3QAu6DAWQ==", + "requires": { + "d3-drag": "^1.2.1", + "d3-scale": "^2.0.0", + "d3-selection": "^1.3.0", + "prop-types": "^15.6.0", + "react-svgmt": "^1.1.7", + "uuid": "^3.2.1" + }, + "dependencies": { + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + } + } + }, "react-scripts": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-4.0.1.tgz", @@ -12217,6 +12354,16 @@ "workbox-webpack-plugin": "5.1.4" } }, + "react-svgmt": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/react-svgmt/-/react-svgmt-1.1.11.tgz", + "integrity": "sha512-y85s2dy37AJ0z+Sjsnwpkt/5md9nUFh2gkcTZL68uG5ZqIIXf7Na2CrinXWm6anY5JmnMQAXsoMlozcro1H8DA==", + "requires": { + "d3-ease": "^1.0.3", + "react-motion": "^0.5.2", + "react-move": "^2.7.0" + } + }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", diff --git a/lowstepper_wasm_demo/package.json b/lowstepper_wasm_demo/package.json index c10ca3d..50f0657 100755 --- a/lowstepper_wasm_demo/package.json +++ b/lowstepper_wasm_demo/package.json @@ -14,6 +14,7 @@ "react": "17.0.0", "react-dom": "17.0.0", "react-p5-wrapper": "2.3.0", + "react-rotary-knob": "^1.1.8", "react-scripts": "^4.0.1" }, "devDependencies": { diff --git a/lowstepper_wasm_demo/public/static/images/ico_clock.png b/lowstepper_wasm_demo/public/static/images/ico_clock.png new file mode 100644 index 0000000..9212058 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_clock.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_reset.png b/lowstepper_wasm_demo/public/static/images/ico_reset.png new file mode 100644 index 0000000..9c0b6a6 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_reset.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_sawtooth_wave.png b/lowstepper_wasm_demo/public/static/images/ico_sawtooth_wave.png new file mode 100644 index 0000000..02a1c19 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_sawtooth_wave.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_sine_wave.png b/lowstepper_wasm_demo/public/static/images/ico_sine_wave.png new file mode 100644 index 0000000..0a12df7 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_sine_wave.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_square_wave.png b/lowstepper_wasm_demo/public/static/images/ico_square_wave.png new file mode 100644 index 0000000..eaed55c Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_square_wave.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_triangle_wave.png b/lowstepper_wasm_demo/public/static/images/ico_triangle_wave.png new file mode 100644 index 0000000..309df52 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_triangle_wave.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_trig.png b/lowstepper_wasm_demo/public/static/images/ico_trig.png new file mode 100644 index 0000000..5f05264 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_trig.png differ diff --git a/lowstepper_wasm_demo/public/static/images/ico_white_hole.png b/lowstepper_wasm_demo/public/static/images/ico_white_hole.png new file mode 100644 index 0000000..774c6b0 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/ico_white_hole.png differ diff --git a/lowstepper_wasm_demo/public/static/images/interface_guide.png b/lowstepper_wasm_demo/public/static/images/interface_guide.png new file mode 100644 index 0000000..d7eb0c8 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/interface_guide.png differ diff --git a/lowstepper_wasm_demo/public/static/images/logo.png b/lowstepper_wasm_demo/public/static/images/logo.png new file mode 100644 index 0000000..f0cfca2 Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/logo.png differ diff --git a/lowstepper_wasm_demo/public/static/images/okay_logo.png b/lowstepper_wasm_demo/public/static/images/okay_logo.png new file mode 100644 index 0000000..5df011a Binary files /dev/null and b/lowstepper_wasm_demo/public/static/images/okay_logo.png differ diff --git a/lowstepper_wasm_demo/public/static/js/main.js b/lowstepper_wasm_demo/public/static/js/main.js new file mode 100644 index 0000000..e69de29 diff --git a/lowstepper_wasm_demo/public/static/js/wasm.wasm b/lowstepper_wasm_demo/public/static/js/wasm.wasm index 78f3eaf..4eb5d85 100755 Binary files a/lowstepper_wasm_demo/public/static/js/wasm.wasm and b/lowstepper_wasm_demo/public/static/js/wasm.wasm differ diff --git a/lowstepper_wasm_demo/src/App.tsx b/lowstepper_wasm_demo/src/App.tsx old mode 100755 new mode 100644 index 3dcce96..3f43948 --- a/lowstepper_wasm_demo/src/App.tsx +++ b/lowstepper_wasm_demo/src/App.tsx @@ -6,6 +6,8 @@ import P5Wrapper from "react-p5-wrapper"; import five from "p5"; +import { Knob } from "react-rotary-knob"; + class TrigHandler { wasmModule: any; triggedA: boolean; @@ -45,6 +47,40 @@ class TrigHandler { } } +class LimitedKnob extends React.Component<{style:any, min:any, max:any, unlockDistance:any, preciseMode:any, width:any, height:any }, { value: any, min: any, max:any }>{ + constructor(props: any) { + super(props); + this.state = { + value: props.value, + min: props.min, + max: props.max + }; + this.handleOnChange = this.handleOnChange.bind(this); + } + + handleOnChange(val: any) { + //ignore change if distance is greater than defined + //here we use a distance of 200 because our max value is 1000 + //change if needed + const maxDistance = 200; + let distance = Math.abs(val - this.state.value); + if (distance > maxDistance) { + return; + } else { + this.setState({ value: val }); + } + } + render() { + //let { this.state.value, ...rest } = this.props; + + /* return ( + + );*/ + return + + } + } + const trigHandler = new TrigHandler(); @@ -137,18 +173,7 @@ async function sketch(p: five) { const knobs = [ { - name: "Chunks", - description: "Break an LFO into 1-10 chunks. Each chunk is played in sequence when gate or trigger is activated.", - parameter: "chunks", - inputProps: { - step: 1, - min: 1, - max: 10, - - } - }, - { - name: "Rate", + name: "RATE", description: "Adjust the frequency of the LFO.", parameter: "rate", inputProps: { @@ -159,7 +184,7 @@ const knobs = [ } }, { - name: "Morph", + name: "MORPH", description: "Morph between sine -> triangle -> saw -> square.", parameter: "morph", inputProps: { @@ -167,6 +192,17 @@ const knobs = [ min: 0, max: 1, } + }, + { + name: "CHUNKS", + description: "Break an LFO into 1-10 chunks. Each chunk is played in sequence when gate or trigger is activated.", + parameter: "chunks", + inputProps: { + step: 1, + min: 1, + max: 10, + + } } ]; @@ -180,39 +216,323 @@ export default function App() { }); return ( +
- + + + +

LowStepper

+ +
+
+ +

EOC

+
+ +
+ +
+ +
+ +

OUTS

+
+ +
+ +
+ +
+
+
+ +
+ +
+ +

TRIG

-
-
-

Trig

-

Click here to trigger the LFO.

- - - + }}>AUTO TRIG (1000ms) + +
+
+
+
+ +
+

CLK

+
+
+
+
+
+ +
+

RST

+
+
+ +
+
+
+ +
+
+
+
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+

RATE

+
+ +
+
+
+ +
+
+

MORPH

+
+ +
+
+
+ +
+
+

CHUNKS

+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ + +
{knobs.map((currentKnob) => ( -
+
+

{currentKnob.name}

+
+ +
+
+ +
+

{currentKnob.description}

+ @@ -224,6 +544,9 @@ export default function App() {
))}
+ + +
); } diff --git a/lowstepper_wasm_demo/src/styles.css b/lowstepper_wasm_demo/src/styles.css index afae2bf..5dea40a 100755 --- a/lowstepper_wasm_demo/src/styles.css +++ b/lowstepper_wasm_demo/src/styles.css @@ -1,28 +1,261 @@ -html, body { - margin: 0; - padding: 0; -} - -.App { - - font-family: sans-serif; - text-align: center; -} - -p { - font-size: 16px; -} - -.container { - width: 440px; - display: flex; - justify-content: center; - flex-direction: column; - align-items: center; - margin: 0 auto; - margin-top:20px; -} -.container > * { - padding: 20px; - -} +html, body { + margin: 0; + padding: 0; +} + +.App { + + font-family: sans-serif; + text-align: center; +} + +p { + font-size: 16px; +} + +.container { + width: 440px; + display: flex; + justify-content: center; + flex-direction: column; + + margin: 0 auto; + margin-top:20px; +} +.container > * { + padding: 20px; +} + +#root { + background-color:#000000; + margin:-20px auto 0px; + max-width:596px; + position:relative; +} + + #root .guide{ + display: none; + left:0px; + opacity:0.5; + position:absolute; + top:0px; + } + + #root h1{ + color:#fff; + padding:10px; + margin-bottom: 10px; + } + + #root .white_hole{ + position:absolute; + height:41px; + width:77px; + } + #root .white_hole.top{ + top:0px; + } + #root .white_hole.bottom{ + bottom:0px; + } + #root .white_hole.left{ + left:50px; + } + #root .white_hole.right{ + right:50px; + } + + #root .container{ + display: block; + margin:0px 30px; + } + + #root .sideWrapper{ + background-color: #ffffff; + border-radius: 80px; + float: right; + height: 621px; + margin:5px 19px 0px 0px; + width: 135px; + } + #root .trigBigWrapper{ + float:left; + margin:0px 0px 0px 30px; + height:640px; + width:412px; + } + #root .trigWrapper{ + display: block; + float:left; + margin-bottom:-5px; + margin-top: 10px; + padding:0px 9px 5px 9px; + text-align: left; + width: 119px; + } + #root .trigWrapper h3, + #root .sideWrapper h3{ + font-size:26px; + margin: 0px; + padding:9px 0px 0px; + text-align: center; + } + #root .trigWrapper h3{ + color:#ffffff; + } + #root .sideWrapper h3{ + color:#000000; + } + #root .trigWrapper h3 img{ + width:23px; + } + #root .buttonWrapper { + border-radius: 60px; + height:92px; + width:92px; + margin:0px; + padding:12px; + } + #root .buttonWrapper.red{ + background-color: #df4b26; + } + #root .buttonWrapper.blue{ + background-color: #4977bb; + } + #root .buttonWrapper.white{ + background-color: #fff; + border: solid 1px #000; + border-radius: 60px; + height: 82px; + margin-bottom: 50px; + margin-left: 14px; + margin-top: 10px; + width: 82px; + } + #root .buttonWrapper.white.third_row{ + margin-top:51px; + } + #root .sideWrapper h3{ + margin:7px 0px 15px; + } + #root .sideWrapper h3.outsTitle{ + margin-top:7px; + } + + #root .buttonWrapper.white.first_row + .buttonWrapper{ + margin-top:58px; + } + #root .buttonWrapper.white.third_row + .buttonWrapper{ + margin-top:56px; + } + #root .buttonWrapper .button{ + background-color:#fff; + border:solid 8px #000; + border-radius: 50px; + height:92px; + width:92px; + margin:0px; + padding:0px; + } + #root .buttonWrapper.white .button{ + background-color: #000; + border: solid 1px #000; + position: relative; + left: -3px; + top: -3px; + width: 89px; + height: 89px; + } + + #root .buttonWrapper .button:active { + background-color:#999; + } + #root .autoTrigBtn{ + position: absolute; + } + #root .whiteLine{ + clear: both; + background-color: #ffffff; + padding: 5px; + margin: 10px 0px 25px; + position: relative; + top: 16px; + left: -29px; + width:470px; + } + + #root .wrapper_potentiometer { + margin:26px 30px 0px; + padding:0px; + position:relative; + width: 100%; + } + #root .wrapper_potentiometer h2{ + margin-left:20px; + top:20px; + position: absolute; + text-align: center; + width: 100%; + } + #root .wrapper_potentiometer .bgKnob{ + background-color: #000000; + border-radius: 100px; + left:38px; + max-height: 105px; + max-width: 105px; + padding: 20px; + position: relative; + top:-20px; + z-index: 100; + } + #root .wrapper_potentiometer .bgKnob.knobA{ + + } + #root .wrapper_potentiometer .bgKnob.knobB{ + float:right; + margin-right:38px; + } + #root .wrapper_potentiometer .bgKnob > div{ /*KNOB*/ + height:100px !important; + width:100px !important; + + padding-top:5px; + } + #root .wrapper_potentiometer .parameterDescription { + display:none; + } + + #root .wrapper_potentiometer input{ + display: none; + } + + #root .potentiometerWrapper .bg_potentiometer{ + background-color:rgba(255,255,255,0.5); + border-radius:20px; + height:59px !important; + left:-40px; + margin-left:57px; + padding-top:17px; + position:absolute; + top:16px; + width:102% !important; + } + + #root .wrapper_potentiometer input{ + + } + + .knob { + width: 200px; + } + + .knob .value { + font-family: sans-serif; + font-size: 5rem; + text-align: center; + } + +#root .okay_logo{ + max-width:187px; + padding:0px 0px 30px; +} diff --git a/lowstepper_wasm_demo/src/types.d.ts b/lowstepper_wasm_demo/src/types.d.ts new file mode 100644 index 0000000..710e2c9 --- /dev/null +++ b/lowstepper_wasm_demo/src/types.d.ts @@ -0,0 +1 @@ +declare module 'react-rotary-knob'; \ No newline at end of file