An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

README

          

# WebChucK

[![Node.js Build](https://github.com/ccrma/webchuck/actions/workflows/deploy.yml/badge.svg)](https://github.com/ccrma/webchuck/actions/workflows/deploy.yml)
[![](https://data.jsdelivr.com/v1/package/npm/webchuck/badge)](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.