From a746bf54619ce873569ca6b9a77f6f3312550925 Mon Sep 17 00:00:00 2001 From: Felix Roos Date: Wed, 10 Jan 2024 22:08:41 +0100 Subject: [PATCH] add assemblyscript version --- packages/superdough-wasm/README.md | 33 +++++++++--- packages/superdough-wasm/ascsaw/asconfig.json | 22 ++++++++ .../superdough-wasm/ascsaw/assembly/index.ts | 3 ++ .../ascsaw/assembly/tsconfig.json | 6 +++ .../superdough-wasm/ascsaw/build/.gitignore | 2 + .../superdough-wasm/ascsaw/package-lock.json | 54 +++++++++++++++++++ packages/superdough-wasm/ascsaw/package.json | 25 +++++++++ packages/superdough-wasm/main.js | 3 +- 8 files changed, 140 insertions(+), 8 deletions(-) create mode 100644 packages/superdough-wasm/ascsaw/asconfig.json create mode 100644 packages/superdough-wasm/ascsaw/assembly/index.ts create mode 100644 packages/superdough-wasm/ascsaw/assembly/tsconfig.json create mode 100644 packages/superdough-wasm/ascsaw/build/.gitignore create mode 100644 packages/superdough-wasm/ascsaw/package-lock.json create mode 100644 packages/superdough-wasm/ascsaw/package.json diff --git a/packages/superdough-wasm/README.md b/packages/superdough-wasm/README.md index c14acca70..75a2e9c0c 100644 --- a/packages/superdough-wasm/README.md +++ b/packages/superdough-wasm/README.md @@ -9,23 +9,28 @@ WASM can be compiled from several languages, which are tested here.. ```sh # (re)compile dsp.zig +brew install zig # prequisite cd zigsaw -zig build-lib zigsaw.zig -target wasm32-freestanding -dynamic -rdynamic -O ReleaseSmall -# run server -npx http-server .. -o +zig build-lib zigsaw.zig -target wasm32-freestanding -dynamic -rdynamic -O ReleaseSmall # build +npx http-server .. -o # run ``` +wasm file size: 690B + ## rust ```sh -# cargo install wasm-pack +# https://www.rust-lang.org/tools/install +cargo install wasm-pack # prequisite cd rustsaw -wasm-pack build --target bundler -npx http-server .. -o +wasm-pack build --target bundler # build +npx http-server .. -o # run ``` +wasm file size: 653B + ## c @@ -33,6 +38,20 @@ npx http-server .. -o ```sh # brew install emscripten cd csaw -emcc -O2 csaw.c -o csaw +emcc -O2 csaw.c -o csaw # build npx http-server .. -o ``` + +wasm file size: 680B + +## assemblyscript + + + +```sh +cd ascsaw +# npm i +npm run asbuild # build +``` + +wasm file size: 122B ! diff --git a/packages/superdough-wasm/ascsaw/asconfig.json b/packages/superdough-wasm/ascsaw/asconfig.json new file mode 100644 index 000000000..fab108684 --- /dev/null +++ b/packages/superdough-wasm/ascsaw/asconfig.json @@ -0,0 +1,22 @@ +{ + "targets": { + "debug": { + "outFile": "build/debug.wasm", + "textFile": "build/debug.wat", + "sourceMap": true, + "debug": true + }, + "release": { + "outFile": "build/release.wasm", + "textFile": "build/release.wat", + "sourceMap": true, + "optimizeLevel": 3, + "shrinkLevel": 2, + "converge": false, + "noAssert": false + } + }, + "options": { + "bindings": "esm" + } +} \ No newline at end of file diff --git a/packages/superdough-wasm/ascsaw/assembly/index.ts b/packages/superdough-wasm/ascsaw/assembly/index.ts new file mode 100644 index 000000000..2e8ca7b02 --- /dev/null +++ b/packages/superdough-wasm/ascsaw/assembly/index.ts @@ -0,0 +1,3 @@ +export function saw(t: f64, f: f64): f64 { + return (((f * t * 1.0) % 1.0) - 0.5) * 2.0; +} diff --git a/packages/superdough-wasm/ascsaw/assembly/tsconfig.json b/packages/superdough-wasm/ascsaw/assembly/tsconfig.json new file mode 100644 index 000000000..e28fcf257 --- /dev/null +++ b/packages/superdough-wasm/ascsaw/assembly/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "assemblyscript/std/assembly.json", + "include": [ + "./**/*.ts" + ] +} \ No newline at end of file diff --git a/packages/superdough-wasm/ascsaw/build/.gitignore b/packages/superdough-wasm/ascsaw/build/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/packages/superdough-wasm/ascsaw/build/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/packages/superdough-wasm/ascsaw/package-lock.json b/packages/superdough-wasm/ascsaw/package-lock.json new file mode 100644 index 000000000..d808c9688 --- /dev/null +++ b/packages/superdough-wasm/ascsaw/package-lock.json @@ -0,0 +1,54 @@ +{ + "name": "ascsaw", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ascsaw", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "assemblyscript": "^0.27.22" + } + }, + "node_modules/assemblyscript": { + "version": "0.27.22", + "resolved": "https://registry.npmjs.org/assemblyscript/-/assemblyscript-0.27.22.tgz", + "integrity": "sha512-6ClobsR4Hxn6K0daYp/+n9qWTqVbpdVeSGSVDqRvUEz66vvFb8atS6nLm+fnQ54JXuXmzLQy0uWYYgB8G59btQ==", + "dev": true, + "dependencies": { + "binaryen": "116.0.0-nightly.20231102", + "long": "^5.2.1" + }, + "bin": { + "asc": "bin/asc.js", + "asinit": "bin/asinit.js" + }, + "engines": { + "node": ">=16", + "npm": ">=7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/assemblyscript" + } + }, + "node_modules/binaryen": { + "version": "116.0.0-nightly.20231102", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-116.0.0-nightly.20231102.tgz", + "integrity": "sha512-aPU9tlKdw/gcXx6u4PxtDgOtGjg/ZKnYdk23ctYb70GxZgPhWnGWmnBt01aV5dt5yFFo2V4rbB7SzpSFhViFQA==", + "dev": true, + "bin": { + "wasm-opt": "bin/wasm-opt", + "wasm2js": "bin/wasm2js" + } + }, + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "dev": true + } + } +} diff --git a/packages/superdough-wasm/ascsaw/package.json b/packages/superdough-wasm/ascsaw/package.json new file mode 100644 index 000000000..27371a3c1 --- /dev/null +++ b/packages/superdough-wasm/ascsaw/package.json @@ -0,0 +1,25 @@ +{ + "name": "ascsaw", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "node tests", + "asbuild:debug": "asc assembly/index.ts --target debug", + "asbuild:release": "asc assembly/index.ts --target release", + "asbuild": "npm run asbuild:debug && npm run asbuild:release", + "start": "npx serve ." + }, + "author": "", + "license": "ISC", + "devDependencies": { + "assemblyscript": "^0.27.22" + }, + "type": "module", + "exports": { + ".": { + "import": "./build/release.js", + "types": "./build/release.d.ts" + } + } +} \ No newline at end of file diff --git a/packages/superdough-wasm/main.js b/packages/superdough-wasm/main.js index 62768819e..0206df915 100644 --- a/packages/superdough-wasm/main.js +++ b/packages/superdough-wasm/main.js @@ -6,7 +6,8 @@ document.getElementById('play').addEventListener('click', async () => { const node = new AudioWorkletNode(ac, 'saw-processor'); //let res = await fetch('./zigsaw/zigsaw.wasm'); - let res = await fetch('./csaw/csaw.wasm'); + // let res = await fetch('./csaw/csaw.wasm'); + let res = await fetch('./ascsaw/build/release.wasm'); //let res = await fetch('./rustsaw/pkg/rustsaw_bg.wasm'); const buffer = await res.arrayBuffer(); node.port.onmessage = (e) => {