![image](https://private-user-images.githubusercontent.com/1523305/293961619-b1d71975-f0a5-4127-8214-e36e2a58d3f6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3MzY4NjQsIm5iZiI6MTcyMTczNjU2NCwicGF0aCI6Ii8xNTIzMzA1LzI5Mzk2MTYxOS1iMWQ3MTk3NS1mMGE1LTQxMjctODIxNC1lMzZlMmE1OGQzZjYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcyMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MjNUMTIwOTI0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OGIwYWZhMWYxYzlkYTMyNTM4ODUzZmI2NTcyYjg5ZGY5YTUxYWQzZDc3Mjk5MzEwOGVlMTVmYzcwNWU1ZDFmZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.OFTPAuynmyLNslMVhBHv0RMxP_ZhueX8IGKlZJiw2iw)
![image](https://private-user-images.githubusercontent.com/1523305/293961619-b1d71975-f0a5-4127-8214-e36e2a58d3f6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE3MzY4NjQsIm5iZiI6MTcyMTczNjU2NCwicGF0aCI6Ii8xNTIzMzA1LzI5Mzk2MTYxOS1iMWQ3MTk3NS1mMGE1LTQxMjctODIxNC1lMzZlMmE1OGQzZjYucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcyMyUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MjNUMTIwOTI0WiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9OGIwYWZhMWYxYzlkYTMyNTM4ODUzZmI2NTcyYjg5ZGY5YTUxYWQzZDc3Mjk5MzEwOGVlMTVmYzcwNWU1ZDFmZCZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.OFTPAuynmyLNslMVhBHv0RMxP_ZhueX8IGKlZJiw2iw)
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<title>WebGPU Audio</title> | |
</head> | |
<body> | |
<button type="button" id="play">Play</button> | |
<script type="module"> | |
const code = ` |
#!/usr/bin/env -S deno run --allow-read --allow-write --allow-run | |
// compeko - pack JavaScript into a self-extracting html+deflate | |
// v2.0.0 | |
// Copyright (c) 2022-2024 0b5vr | |
// SPDX-License-Identifier: MIT | |
// Usage: | |
// - prepare a js code, which will be fed into `eval` |
/* | |
* Copyright (c) 2021 - Peter Johan Salomonsen | |
*/ | |
setBPM(85); | |
addInstrument('piano'); | |
addInstrument('string'); | |
addInstrument('drums'); | |
addInstrument('guitar'); |
// $ wat2wasm fft.wat | |
// $ node --experimental-modules call-fft-dynamic.js | |
(async function () { | |
{ | |
const res = fetch(new URL("./fft.wasm", import.meta.url).href); | |
const imports = { | |
"./math.js": await import(new URL("./math.js", import.meta.url)) | |
}; | |
const {instance} = await WebAssembly.instantiateStreaming(res, imports); |
from ctypes import cast, py_object | |
from google.colab import output | |
def set_var(v_id, value): | |
obj = cast(v_id, py_object).value | |
obj.value = value | |
output.register_callback('set_var', set_var) | |
class Checkbox: |
// Pseudo Effect Via XML - Example File | |
// Full Tutorial: https://www.youtube.com/watch?v=pHwBOFZgKcs&t=296s | |
// Edit the PresetEffects.xml for your version of After Effects to add Pseudo Effects. | |
// XML File Location on Windows: | |
// Program Files > Adobe > After Effects (Version) > Support Files | |
// XML File Location on OSX: | |
// Apps > After Effects > Right-click After Effects.app > “Show Contents” > Contents > Resources |
// ADPCM decoder implementation based on https://github.com/jwzhangjie/Adpcm_Pcm/blob/master/adpcm.c | |
const indexTable = [ | |
-1, -1, -1, -1, 2, 4, 6, 8, | |
-1, -1, -1, -1, 2, 4, 6, 8 | |
]; | |
const stepSizeTable = [ | |
7, 8, 9, 10, 11, 12, 13, 14, 16, 17, | |
19, 21, 23, 25, 28, 31, 34, 37, 41, 45, |