mirror of
https://codeberg.org/uzu/strudel
synced 2026-08-11 08:16:46 -04:00
add assemblyscript version
This commit is contained in:
@@ -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
|
||||
|
||||
<https://developer.mozilla.org/en-US/docs/WebAssembly/Rust_to_Wasm>
|
||||
|
||||
```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
|
||||
|
||||
<https://emscripten.org/docs/getting_started/Tutorial.html>
|
||||
@@ -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
|
||||
|
||||
<https://www.assemblyscript.org/getting-started.html#setting-up-a-new-project>
|
||||
|
||||
```sh
|
||||
cd ascsaw
|
||||
# npm i
|
||||
npm run asbuild # build
|
||||
```
|
||||
|
||||
wasm file size: 122B !
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
export function saw(t: f64, f: f64): f64 {
|
||||
return (((f * t * 1.0) % 1.0) - 0.5) * 2.0;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"extends": "assemblyscript/std/assembly.json",
|
||||
"include": [
|
||||
"./**/*.ts"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
||||
+54
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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) => {
|
||||
|
||||
Reference in New Issue
Block a user