https://github.com/ccrma/webchuck
ChucK on the Web
https://github.com/ccrma/webchuck
emscripten webassembly webaudio
Last synced: 5 months ago
JSON representation
ChucK on the Web
- Host: GitHub
- URL: https://github.com/ccrma/webchuck
- Owner: ccrma
- License: mit
- Created: 2021-10-20T19:27:13.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2026-01-25T08:23:45.000Z (5 months ago)
- Last Synced: 2026-01-25T22:52:59.132Z (5 months ago)
- Topics: emscripten, webassembly, webaudio
- Language: JavaScript
- Homepage: https://chuck.stanford.edu/webchuck
- Size: 37.4 MB
- Stars: 56
- Watchers: 14
- Forks: 8
- Open Issues: 8
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# WebChucK
[](https://github.com/ccrma/webchuck/actions/workflows/deploy.yml)
[](https://www.jsdelivr.com/package/npm/webchuck)
[site](https://chuck.stanford.edu/webchuck/) | [docs](https://chuck.stanford.edu/webchuck/docs) | [npm](https://www.npmjs.com/package/webchuck)
WebChucK brings [ChucK](https://chuck.stanford.edu), a strongly-timed audio programming language, to
the web! ChucK's C++ source code has been compiled with [Emscripten](https://emscripten.org) and
targets WebAssembly (WASM) to run via the `AudioWorkletNode` interface of the Web Audio API.
With near-native performance, WebChucK runs on modern desktop browsers as well as tablets and mobile
devices! Bring together ChucK's real-time sound synthesis engine and web tools to create new
experiences and develop creative workflows. Embed WebChucK into any website to build online audiovisual
experiences, immersive multi-channel audio web apps, or shareable musical instruments! To learn more
about WebChucK and what it can do, check out [https://chuck.stanford.edu/webchuck/](https://chuck.stanford.edu/webchuck/)
Try out WebChucK in action through [WebChucK IDE](https://chuck.stanford.edu/ide/)!
## Getting Started
### NPM
Install WebChucK via [npm](https://www.npmjs.com/package/webchuck). WebChucK also
supports TypeScript:
```
npm install webchuck
```
```ts
import { Chuck } from 'webchuck'
// Create the default ChucK object
const theChuck = await Chuck.init([]);
// Run ChucK code
theChuck.runCode(`
SinOsc sin => dac;
440 => sin.freq;
1::second => now;
`);
```
Note that many browsers do not let audio run without a user interaction (e.g. button press).
You can check for a suspended audio context and resume like this:
```ts
if (theChuck.context.state === "suspended") {
theChuck.context.resume();
}
```
### CDN
You can also embed WebChucK as a JavaScript module into your `index.html`.
```html
import { Chuck } from 'https://cdn.jsdelivr.net/npm/webchuck/+esm';
let theChuck; // global variable
document.getElementById('action').addEventListener('click', async () => {
// Initialize default ChucK object
if (theChuck === undefined) {
theChuck = await Chuck.init([]);
}
// Run ChucK code
theChuck.runCode(`
SinOsc sin => dac;
440 => sin.freq;
1::second => now;
`);
});
Start and Play
```
`theChuck` contains the ChucK Virtual Machine for running code, removing shreds,
syncing global variables, and more! Read the
[documentation](https://chuck.stanford.edu/webchuck/docs/classes/Chuck.html)
for the full API reference.
## Documentation
WebChucK full documentation and API reference: [here](https://chuck.stanford.edu/webchuck/docs)
## For Developers
If you are a developer, check out the [Developer Guide](https://github.com/ccrma/webchuck/blob/main/DEVELOPER_GUIDE.md) to get started.